Слюни: Как обновить только определенные правила? - PullRequest
0 голосов
/ 17 марта 2011

Мы используем 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 узла). С увеличением количества правил это обновление базы знаний занимает все больше времени (компиляция всех этих правил), и в течение этого времени ни одно правило не может быть проверено. Таким образом, система стоит на месте с точки зрения пользователя.

Кажется, что нет возможности выборочно обновить правило - верно ли это? Если да, то как лучше всего справиться с такой ситуацией? Первая идея, которая приходит на ум, - это использование двух баз знаний параллельно ...

1 Ответ

0 голосов
/ 25 мая 2011

В базе знаний API есть методы для удаления правил / пакетов, а также для добавления пакетов. Таким образом, для этого вы можете удалить правило, которое хотите обновить, и затем вставить обновленную версию в базу знаний. Если у вас есть какие-либо statefull-сессии, метод dispose () которых не был вызван, то изменения в базе знаний также должны быть переданы им.

...