#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 может помочь вам обнаруживать правила, которые запускаются более одного раза, и регистрировать / отслеживать время, затраченное на каждое правило.