在 Drools 中存储大型参考数据对象
Storing large reference data objects in Drools
我正在寻找一种在 Drools 中长时间存储大型对象的方法(即不像在会话中添加和删除的事实)。
我了解到 Drools 使用知识库和会话(无状态和有状态)工作,并且知识库包含应用程序知识定义但没有运行时数据。
在我需要存储的情况下,例如,一本大字典(它不会改变但会被多个连续会话引用),并将对象添加到工作内存并对照该字典进行检查要触发规则,最好将其存储在哪里?
是否所有内容都进入工作内存(在这种情况下,我是否需要在每次打开新会话时将词典加载到内存中?)还是我只是缺少一个重要的 Drools 基本原则?全局变量可以很好地解决这个问题吗?
不确定 "large" 有多大(当然总会有性能折衷),但您也可以使用插入的对象从数据库(/缓存)中提取并让规则通过以下方式访问值方法。
when
$y : AnObject (name == "car", lookupPrice > 10000 );
其中 AnObject.getLookupPrice() 是一种从缓存/存储的字典中提取值的方法。
如果对象不是太大,您也可以将其编码(作为对象)并以相同的方式使用它。
我正在寻找一种在 Drools 中长时间存储大型对象的方法(即不像在会话中添加和删除的事实)。
我了解到 Drools 使用知识库和会话(无状态和有状态)工作,并且知识库包含应用程序知识定义但没有运行时数据。
在我需要存储的情况下,例如,一本大字典(它不会改变但会被多个连续会话引用),并将对象添加到工作内存并对照该字典进行检查要触发规则,最好将其存储在哪里?
是否所有内容都进入工作内存(在这种情况下,我是否需要在每次打开新会话时将词典加载到内存中?)还是我只是缺少一个重要的 Drools 基本原则?全局变量可以很好地解决这个问题吗?
不确定 "large" 有多大(当然总会有性能折衷),但您也可以使用插入的对象从数据库(/缓存)中提取并让规则通过以下方式访问值方法。
when
$y : AnObject (name == "car", lookupPrice > 10000 );
其中 AnObject.getLookupPrice() 是一种从缓存/存储的字典中提取值的方法。
如果对象不是太大,您也可以将其编码(作为对象)并以相同的方式使用它。