Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我们与Talend ETL集成并处理数百万条记录时,Drools非常慢_Drools_Drools Guvnor_Drools Fusion_Drools Flow - Fatal编程技术网

当我们与Talend ETL集成并处理数百万条记录时,Drools非常慢

当我们与Talend ETL集成并处理数百万条记录时,Drools非常慢,drools,drools-guvnor,drools-fusion,drools-flow,Drools,Drools Guvnor,Drools Fusion,Drools Flow,我们使用了大约30条规则,其中包含多个条件。我们假设Drools获取一条记录,并将其与记录进行比较,然后给出每一条记录的输出。因此,处理100万条记录所需的时间约为4小时。我们不能分批处理这些记录吗。我的意思是说,大量使用,减少处理时间。请帮我解决这个问题。感谢您的回复。在一个批次中插入100万个事实是一个非常糟糕的策略(除非您需要从批次中找到组合)。文档清楚地表明,所有工作(至少在5.x中)都是在插入和修改期间完成的。(据报道,6.x有所不同,但不必要地用大量对象填满内存仍然是一种不好的做法。

我们使用了大约30条规则,其中包含多个条件。我们假设Drools获取一条记录,并将其与记录进行比较,然后给出每一条记录的输出。因此,处理100万条记录所需的时间约为4小时。我们不能分批处理这些记录吗。我的意思是说,大量使用,减少处理时间。请帮我解决这个问题。感谢您的回复。

在一个批次中插入100万个事实是一个非常糟糕的策略(除非您需要从批次中找到组合)。文档清楚地表明,所有工作(至少在5.x中)都是在插入和修改期间完成的。(据报道,6.x有所不同,但不必要地用大量对象填满内存仍然是一种不好的做法。)


只需插入一个合适的数字,然后调用fireAllRules()并处理(传输,…)结果。确保这样一批产品的工作记忆中没有“死库存”,这也会使您的速度变慢。

您能描述一下您的问题吗?你有没有试着监测口水,看看这是否真的是问题所在?我建议你应该在Drools中添加日志,看看哪些规则比较慢。我有一套大小类似的规则。在测试中,我插入和收回事实,在每次插入后触发所有规则,然后删除插入的事实。每次触发都会触发大量计算和逻辑插入,并根据这些插入触发规则。这个测试可以在我的笔记本电脑上在14秒内完成100万次这样的评估。因此,可以很安全地说,缓慢是由您的规则以及您与知识会话的交互方式造成的。因此,如果您展示了这一点,并询问如何改进,我们可能会帮助您更多。@Steve几天前才有一个线程,结果表明(IIRC)累积导致hashCode()的O(n^2)计算。我提到这一点只是为了强调,看似无辜,甚至良好的实践规则都可能导致严重的延迟,因此,您可以在14秒内处理100万个事实这一事实并不重要。了解插入和触发小集合甚至单个事实所需的时间对于确定瓶颈位置至关重要。我没有说规则一定是“错误的”。只有在不知道规则是什么样子的情况下,没有人能提供一个稍微体面的答案,因为规则本身通常是任何缓慢的原因。通常,优化规则比摆弄批量大小会产生更大的影响。