Как улучшить производительность drools?

#performance #drools

#Производительность #drools

Вопрос:

Есть ли способ регистрировать / отслеживать время, затраченное на правило, в наборе правил Drools?

Есть ли способ убедиться, что одно правило не выполняется более одного раза (похоже, это происходит в моем случае)

Каковы общие рекомендации по повышению производительности Drools?

В настоящее время я использую один файл DRL с 100 нечетными правилами.

Любая дополнительная информация, которая вам нужна, будет предоставлена.

Комментарии:

1. Каково время выполнения вашего набора правил? Можете ли вы сказать?

2. Извините за задержку с ответом, я изучал какую-то другую проблему, теперь вернемся к проблеме производительности. В настоящее время для 1000 записей основной записи, которую я проверяю, требуется около 60 секунд на правило. Это слишком много. Если я уменьшу набор правил до нескольких правил, это займет 10 секунд для 1000 записей. Похоже, что некоторые правила занимают слишком много времени (есть вызовы DB), поэтому я пытаюсь получить некоторое представление о том, что происходит в наборе правил, что занимает больше времени, что вызывает утечки памяти, если таковые имеются и т.д. Спасибо.

Ответ №1:

Если ваша цель — регистрировать / отслеживать выполнение правил, вы можете использовать прослушиватели событий, например AgendaEventListener (http://docs.jboss.org/drools/release/5.3.0.CR1/drools-expert-docs/html_single/index.html#d0e2003 ) или активируйте Drools MBeans для мониторинга приложения Drools с помощью любой консоли JMX по вашему выбору. MBeans предоставит вам статистику по правилу и обобщенную статистику.

Как повысить производительность — это очень широкий вопрос, и ответ будет намного длиннее, чем я могу ответить здесь, но короткая версия такова: механизм правил, такой как Drools, — это реляционный механизм, похожий на реляционные базы данных, но с другими целями и оптимизациями. Тем не менее, применяются многие из тех же принципов, и вы можете повысить производительность, сначала написав правила с более жесткими ограничениями, разделив ограничения между несколькими правилами и правильно используя вывод / цепочку.

К вашему сведению, если вы находитесь в районе Сан-Франциско, у нас будет бесплатный буткемп Drools (но вам все равно нужно зарегистрироваться) на следующей неделе во время фестиваля правил (http://rulesfest.org/html/home.html ), где мы представим многие смежные темы.

Комментарии:

1. Спасибо. Я изучаю возможность включения Drools JMX. Можете ли вы предоставить информацию о том, как это включить?

2. Либо используйте конфигурацию базы знаний MBeansOption. ВКЛЮЧЕНО или задайте системное свойство: drools.mbeans=включено.

Ответ №2:

Единственная ошибка, которую я нашел фундаментальной при работе с drools, касается создания блоков. Не используйте вычисления в блоках when. Это то, что drools говорит даже о геттерах!:

 Person( age == 50 )

// this is the same as:
Person( getAge() == 50 )
  

Примечание
Мы рекомендуем использовать доступ к свойству (возраст) вместо явного использования геттеров (getAge()) из-за повышения производительности за счет индексации полей. (источник)

Библиотека тестирования Droolsassert может помочь вам обнаруживать правила, которые запускаются более одного раза, и регистрировать / отслеживать время, затраченное на каждое правило.