我们有一个系统,将有数万个单位。每个单位将有5-10米,每一米将有一个相关的价值。这些仪表的值会发生变化,我们需要我们的规则引擎能够实时地响应这些变化。
我们将有这样的规则“如果第一单元的第一米大于10,第二米从第一单元小于30,那么.”,尽管规则可能要长得多。每个单元的规则将是完全独立的,因此没有规则对两个不同的单位的两个不同的米的值施加条件。
我们将有大约30个规则,每个单位是相同的,然后每个单位将有大约5-15自定义规则。在规则引擎运行时,需要动态添加这些规则。这很可能是一个单位会增加5-10的规则,当它注册,然后添加或删除一个规则,大约每周一次,从那时起。
我们决定使用Drools来实现这个功能,我正在试图找出实现它的最佳方法。我对口水很陌生所以我有点困惑。每个单位都有自己的知识库有意义吗?如果是这样的话,是否有任何方法来分享每个单元相同的规则?
我担心我们可能没有足够的内存来存储所有这些规则,所以我在想,如果我们每个单元都有一个知识库,我们就可以序列化所有的知识库,把它们放到数据库中,并在需要的时候检索它们。这是否合理?
我考虑为每个单元使用一个单独的知识库的另一个原因是,因为每个单元的规则完全独立于其他单元的规则,将它们都放入同一个知识库可能会影响性能。这是正确的,还是Rete算法足够聪明来解决这个问题?
此外,在引擎运行时是否可以动态添加规则?所有的规则都要重新编译吗?如果发动机仍然需要实时响应仪表的变化,这需要多长时间,这是否可行?
谢谢你们。
发布于 2012-09-11 08:29:09
每个单元都有自己的知识库有意义吗?如果是这样的话,有没有任何方法来共享每个单元相同的规则呢?
请看下面每一个单位都有自己的知识库。为了组织目的,您可以考虑将它们放在单独的包中。要在包之间共享规则,可以在全局区域创建规则并导入它们。虽然这将有助于分享共同的规则,但它也有一些缺陷:
我担心我们可能没有足够的内存来存储所有这些规则,所以我在想,如果我们为每个单元都有一个知识库,我们就可以序列化所有的知识库,把它们放到数据库中,并在需要的时候检索它们。这合理吗?
这是一个选项,但如果规则发生变化,您将需要重新创建知识库。
我考虑为每个单元使用一个单独的知识库的另一个原因是,因为每个单元的规则完全独立于其他单元的规则,将它们都放入同一个知识库可能会影响性能。这是正确的,还是Rete算法足够聪明来解决这个问题?
“Drools JBoss Rules 5.0 Developer's Guide”( Michal巴厘)一书
Rete算法的性能在理论上与知识库中的规则数无关。
此外,
如果你很好奇,想看一些基准测试,你可以在Drools -示例模块中找到它们,这个模块可以从Drools网站下载。也有一些网站定期发布各种规则引擎的基准,以解决著名的数学问题(通常是“Manners小姐”测试和“Waltz”),例如http://illation.com.au/基准测试/。Drools的性能可以与其他开源甚至商业引擎媲美。
还可以在引擎运行时动态添加规则吗?所有的规则都要重新编译吗?如果发动机仍然需要实时响应仪表的变化,这需要多长时间,这是否可行?
这里没有具体的想法,但我相信这些规则需要重新编译才能使用。在重新编译新包时,仍然可以使用先前创建的kbase。他们是独立的。
https://stackoverflow.com/questions/11660183
复制相似问题