Мы используем Drools с интерфейсом, где пользователи могут обновлять / редактировать правила. Эти правила затем хранятся (и версии) в базе данных. После этого правила снова извлекаются из базы данных и добавляются одно за другим следующим образом:
for (Rule rule ...) {
knowledgeBuilder.add(ResourceFactory.newByteArrayResource(rule.getRuleContent().getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) { throw Error... }
}
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());
У нас есть несколько сотен правил и пропускная способность проверки правил также несколько сотен правил в секунду (на 2 узла). С увеличением количества правил это обновление базы знаний занимает все больше времени (компиляция всех этих правил), и в течение этого времени ни одно правило не может быть проверено. Таким образом, система стоит на месте с точки зрения пользователя.
Кажется, что нет возможности выборочно обновить правило - верно ли это? Если да, то как лучше всего справиться с такой ситуацией? Первая идея, которая приходит на ум, - это использование двух баз знаний параллельно ...