我们有一个拥有数万个单位的系统.每个单元将有5-10米,每个仪表将具有与之相关的值.这些仪表的值发生变化,我们需要我们的规则引擎才能实时响应这些变化.
我们将有这样的规则"如果#1单元的第一个仪表大于10,而单元#1的第二个仪表小于30则......",尽管规则可能比这长得多.每个单元的规则将是完全独立的,因此不会有来自两个不同单元的两个不同仪表的值的规则.
我们将为每个单元提供大约30条相同的规则,然后每个单元将有大约5-15个自定义规则.在规则引擎运行时,需要动态添加这些规则.一个单位可能会在注册时添加5-10个规则,然后添加或删除规则,例如每周一次.
我们决定使用Drools,我正在努力弄清楚如何最好地实现它.我对Drools很新,所以我有点困惑.每个单位都有自己的知识库是否合理?如果是这样,有没有办法分享每个单元相同的规则?
我担心我们可能没有足够的内存来存储所有这些规则,所以我想如果我们有每个单元的知识库,我们可以序列化所有知识库,将它们放在数据库中,并在我们检索时检索它们需要它们.那会合理吗?
我想为每个单元使用单独的知识库的另一个原因是因为每个单元的规则完全独立于其他单元的规则,所以将它们全部放入相同的知识库可能会有性能损失.这是正确的还是Rete算法足够智能来解决这个问题?
此外,是否可以在引擎运行时动态添加规则?是否必须重新编译所有规则?如果发动机仍需要实时响应仪表变化,需要多长时间才能实现?
多谢你们.
每个单位拥有自己的知识库是否有意义?如果是这样,有什么办法可以共享每个单位相同的规则吗?
请参阅下文,了解每个单元都有自己的知识库。出于组织目的,您可以考虑将它们放在单独的包中。要在包之间共享规则,您可以在全局区域中创建规则并导入它们。虽然这将有助于共享通用规则,但它存在一些缺陷:
我担心我们可能没有足够的内存来存储所有这些规则,所以我在想,如果我们为每个单元都有一个知识库,我们可以序列化所有知识库,将它们放入数据库中,并在我们需要时检索它们。需要他们。这样合理吗?
这是一个选项,但如果规则发生变化,您将需要重新创建知识库。
我考虑为每个单元使用单独的知识库的另一个原因是因为每个单元的规则完全独立于其他单元的规则,将它们全部放入同一个知识库中可能会影响性能。这是正确的还是 Rete 算法足够聪明来解决这个问题?
Michal Bali的《Drools JBoss Rules 5.0 Developer's Guide》一书说
Rete算法的性能理论上与知识库中规则的数量无关。
更远,
如果您好奇并想查看一些基准测试,可以在 drools-examples 模块中找到它们,该模块可从 Drools 网站下载。还有一些网站定期发布解决众所周知的数学问题的各种规则引擎的基准(通常是“Miss Manners”测试和“华尔兹”),例如 http://illation.com.au/ benchmarks/。Drools 的性能可与其他开源甚至商业引擎相媲美。
另外,是否可以在引擎运行时动态添加规则?所有规则都必须重新编译吗?如果发动机仍需要实时响应仪表变化,这需要多少时间?这是否可行?
这里没有具体的想法,但我确信规则需要重新编译才能使用。重新编译新包时,之前创建的 kbase 仍然可以使用。他们是独立的。
归档时间: |
|
查看次数: |
1735 次 |
最近记录: |