【发布时间】:2015-11-26 09:51:34
【问题描述】:
如您所知,许多规则引擎在处理规则时使用 Rete 算法,该算法构造了一个树,即所谓的 Rete 树。
为了确保更好的规则处理性能,Rete 树的理想拓扑是什么?换句话说,我想知道规则集应该更好地对应的树拓扑以获得更好的性能。
【问题讨论】:
标签: performance graph rule-engine rete
如您所知,许多规则引擎在处理规则时使用 Rete 算法,该算法构造了一个树,即所谓的 Rete 树。
为了确保更好的规则处理性能,Rete 树的理想拓扑是什么?换句话说,我想知道规则集应该更好地对应的树拓扑以获得更好的性能。
【问题讨论】:
标签: performance graph rule-engine rete
简短的回答是,性能受规则和对象的数量、测试的数量、规则中测试的排序方式以及规则之间共享的测试/条件的数量影响。
您应该通过以下方式重写规则以获得最佳性能:
请参阅Adjusting conditionsIBM ODM 文档。
您还应该减少需要通过规则评估的对象的数量,以及测试的数量。
供您参考 Rete 和 IBM ODM:
有关 Rete 树的结构示例,请参阅RetePlus network structureIBM ODM 文档
What affects the performance of a Decision Server application : RetePlus
RetePlus 旨在优化对大量 跨大量对象的规则。 RetePlus 过滤测试,例如 不评估不相关的测试。测试可以在之间共享 使用类似测试的规则,因此它们不需要 重新评估所有规则。
为了获得最佳效果:
不同对象的通用测试是共享的。
执行的测试次数已降至最低。
当单个评估包含太多变量定义和条件时,性能会下降。
测试使用较少的内存。
【讨论】:
简单地说,如果您想在编排中使用RetePlus 算法,请仅使用Decision Trees 业务规则。
以这种方式使用会快得多。尽管您可以与其他算法以及Sequential(在本例中为Action Rules)结合使用。
因此,您的解决方案可能是操作规则的一部分(与Sequential)并与Decision Tables(与RetePlus)部分。
希望这会有所帮助。
【讨论】: