使用带有大型(100万或更多)规则的Drools

使用带有大型(100万或更多)规则的Drools,drools,rule-engine,Drools,Rule Engine,我们正在评估与医疗相关的软件应用程序的Drools。我们最初的规则集大约是25k,但随着时间的推移,该规则集将增长到100多万。这就是典型规则的结构: when item contains the codes "1234" AND "5678" AND does not include "ABC123" then [show some message] 正在评估的项目将包含一系列代码,因为它是事实。我们试图做的是创建一个推荐引擎,引导用户对项目进行更改以符合法规。我担心的是,我们不能有

我们正在评估与医疗相关的软件应用程序的Drools。我们最初的规则集大约是25k,但随着时间的推移,该规则集将增长到100多万。这就是典型规则的结构:

when item contains the codes "1234" AND "5678" 
  AND does not include "ABC123" 
then [show some message]
正在评估的项目将包含一系列代码,因为它是事实。我们试图做的是创建一个推荐引擎,引导用户对项目进行更改以符合法规。我担心的是,我们不能有选择地过滤应该触发哪些规则,而不通过计算所有“when”语句来找到匹配的规则。如果我们有数百万条规则(我们的一些竞争对手评估的规则远远超过300万条),这是Drools可以处理的,还是我们应该去别处看看

事务负载不是很重,这意味着一个事务可能只有几十到几百个项目需要经过这个过程。这里的大多数帖子都提到了相反的问题,对数百万条记录评估了数百条规则


非常感谢您的指导

这是老生常谈,但我还是想回答。考虑到Drools有一个RETE实现,它旨在优化和排除不相关的规则。但是,要使其工作,您的数据模型必须兼容,并在条件中使用更简单的属性

也就是说,您应该首先进行分类,定义事实,而不是
[NOT]contains
,如设置
,然后对其执行规则