与从内存中检索 KieBase 实例相比,执行 Kiebase(从缓存检索的实例)需要更多时间来触发所有规则
Executing Kiebase (instance retrieved from cache) takes more time to fire all rules as compared to when KieBase instance is retrieved from in-memory
第一次构建知识库KieBase
,我们将其实例存储在缓存中,这样我们就可以通过使用这个缓存实例来节省构建时间。我注意到当这个实例直接使用 x 时没有。有时,触发所有规则所需的时间非常少,但是当我们使用缓存实例时触发所有规则需要更多时间。
这里是kieSession.fireAllRules()
从内存中获取KieBase
实例所用的时间(即直接使用KieBase
实例)
min: 0 ms, max: 184 ms, avg: 7 ms
Individual execution time: [184, 2, 15, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 2, 5, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1]
这是 kieSession.fireAllRules()
每次执行 KieBase
实例从缓存 (Redis) 中获取所花费的时间
min: 35 ms, max: 152 ms, avg: 51 ms
Individual execution time: [152, 42, 45, 51, 40, 79, 56, 42, 48, 42, 44, 44, 69, 38, 40, 39, 57, 40, 61, 53, 35, 41, 43, 45, 51, 43, 48, 41, 43, 60]
//NOTE: This does not include cache fetch time. It only reflects the time taken (in ms) by function `fireAllRules` of class `KieSession`.
在上面的例子中,我拿的非常少。规则,但实际上我有数千条规则。
如果您注意到,当 KieBase
使用的实例是从缓存中检索的实例时,花费的时间会更多。
出现这种行为的原因是什么?我如何确保从缓存中检索到的 KieBase
实例花费更少的时间来触发所有规则?
KieSession kieSession = kbase.newKieSession();
kieSession.insert(...);
kieSession.fireAllRules();
kieSession.dispose();
很遗憾,不支持 KieBase 序列化。除了性能之外,您可能会遇到意想不到的问题,所以请不要这样做(所以我不会深入了解为什么它很慢)。您可以将 KieBase 存储在内存中。如果集群中有多个节点,请为每个 JVM 构建 KieBase 并将其存储在每个 JVM 的内存中。
第一次构建知识库KieBase
,我们将其实例存储在缓存中,这样我们就可以通过使用这个缓存实例来节省构建时间。我注意到当这个实例直接使用 x 时没有。有时,触发所有规则所需的时间非常少,但是当我们使用缓存实例时触发所有规则需要更多时间。
这里是kieSession.fireAllRules()
从内存中获取KieBase
实例所用的时间(即直接使用KieBase
实例)
min: 0 ms, max: 184 ms, avg: 7 ms
Individual execution time: [184, 2, 15, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 2, 5, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1]
这是 kieSession.fireAllRules()
每次执行 KieBase
实例从缓存 (Redis) 中获取所花费的时间
min: 35 ms, max: 152 ms, avg: 51 ms
Individual execution time: [152, 42, 45, 51, 40, 79, 56, 42, 48, 42, 44, 44, 69, 38, 40, 39, 57, 40, 61, 53, 35, 41, 43, 45, 51, 43, 48, 41, 43, 60]
//NOTE: This does not include cache fetch time. It only reflects the time taken (in ms) by function `fireAllRules` of class `KieSession`.
在上面的例子中,我拿的非常少。规则,但实际上我有数千条规则。
如果您注意到,当 KieBase
使用的实例是从缓存中检索的实例时,花费的时间会更多。
出现这种行为的原因是什么?我如何确保从缓存中检索到的 KieBase
实例花费更少的时间来触发所有规则?
KieSession kieSession = kbase.newKieSession();
kieSession.insert(...);
kieSession.fireAllRules();
kieSession.dispose();
很遗憾,不支持 KieBase 序列化。除了性能之外,您可能会遇到意想不到的问题,所以请不要这样做(所以我不会深入了解为什么它很慢)。您可以将 KieBase 存储在内存中。如果集群中有多个节点,请为每个 JVM 构建 KieBase 并将其存储在每个 JVM 的内存中。