【发布时间】:2014-03-10 13:33:26
【问题描述】:
我们使用了大约 30 条包含多个条件的规则。我们假设 Drools 获取一条记录并将其与记录进行比较,然后将给出每条记录的输出。因此处理 100 万条记录所需的时间约为 4 小时。我们不能批量处理记录吗?我的意思是说大量并减少处理时间。请帮我解决这个问题。感谢您的回复。
【问题讨论】:
-
您能描述一下您的问题吗?您是否尝试监视 Drools 以查看它是否确实是问题所在?我建议你应该在 Drools 中添加日志,看看哪些规则比较慢。
-
我有一套类似大小的规则。在测试中,我插入和收回事实,每次插入后触发所有规则,然后删除插入的事实。每次触发都会触发一些计算和逻辑插入,并且基于这些插入触发规则。这个测试可以在我的笔记本电脑上在 14 秒内处理 1M 次这样的评估。因此,可以相当肯定地说,缓慢是由您的规则以及您与知识会话的交互方式造成的。因此,如果您展示了这一点,并询问如何改进它,我们可能会为您提供更多帮助。
-
@Steve 几天前有这个线程,结果证明 (IIRC) 累积会导致对 hashCode() 的 O(n^2) 评估。我提到这一点只是为了强调看似无辜甚至良好实践的规则可能会导致严重的延迟,因此您可以在 14 秒内处理 1M 事实的事实并不是很重要。了解在小集合甚至单个事实中插入和触发需要多长时间对于确定瓶颈在哪里至关重要。
-
我没有说这些规则一定是“错误的”。只是没有人可以在不知道规则是什么样子的情况下对此提供远程体面的答案,因为规则本身通常是任何缓慢的原因。而且通常,优化规则比搞乱批量大小更重要。
标签: drools drools-guvnor drools-fusion drools-flow