При создании базы знаний KieBase
мы впервые храним ее экземпляр в кэше, чтобы сэкономить время сборки, используя этот кэшированный экземпляр. Я заметил, что при прямом использовании этого экземпляра х нет. раз для запуска всех правил требуется очень очень мало времени, НО, когда мы используем кэшированный экземпляр, тогда запуск всех правил занимает больше времени.
Вот время, которое 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
используется экземпляр, полученный из Cache.
Что может быть причиной такого поведения? Как сделать так, чтобы экземпляр KieBase
, полученный из кэша, занимал меньше времени для запуска всех правил?
KieSession kieSession = kbase.newKieSession();
kieSession.insert(...);
kieSession.fireAllRules();
kieSession.dispose();