Drools работает очень медленно, когда мы интегрируемся с Talend ETL и обрабатываем миллионы записей.

мы использовали около 30 правил с несколькими условиями. мы исходим из того, что Drools берет одну запись и сравнивает ее с записями, а затем выдает результат для каждой из них. Таким образом, время, необходимое для обработки 1 миллиона записей, составляет около 4 часов. Мы не можем обрабатывать записи партиями. Я имею в виду в больших количествах и сокращения времени на обработку. Пожалуйста, помогите мне в этом вопросе. Спасибо за ответ.


person user2409470    schedule 10.03.2014    source источник
comment
Можете ли вы описать свою проблему? Вы пытались отслеживать Drools, чтобы убедиться, что это действительно проблема? Я предлагаю вам добавить журналы в Drools, чтобы увидеть, какие правила работают медленно.   -  person zenbeni    schedule 10.03.2014
comment
У меня есть набор правил аналогичного размера. В тесте я вставляю и удаляю факты, запуская все правила после каждой вставки, а затем удаляя вставленный факт. Каждое срабатывание запускает ряд вычислений, логических вставок и правил, основанных на этих вставках. Этот тест может обработать 1 миллион таких оценок за 14 секунд на моем ноутбуке. Таким образом, можно с уверенностью сказать, что медлительность вызвана вашими правилами и тем, как вы взаимодействуете со своими сеансами знаний. Поэтому вполне вероятно, что мы могли бы помочь вам больше, если бы вы показали это и спросили, как это улучшить.   -  person Steve    schedule 10.03.2014
comment
@Steve Всего несколько дней назад была эта ветка, в которой выяснилось, что накопление (IIRC) вызывает O (n ^ 2) оценок hashCode (). Я упоминаю об этом только для того, чтобы подчеркнуть, что невинно выглядящие или даже правила хорошей практики могут вызвать значительные задержки, поэтому тот факт, что вы можете обработать 1 миллион фактов за 14 секунд, не очень актуален. Знание того, сколько времени требуется, чтобы вставить и выстрелить в небольших наборах или даже для отдельных фактов, важно для определения узкого места.   -  person laune    schedule 11.03.2014
comment
Я не говорил, что правила обязательно «неправильные». Только то, что никто не может дать хотя бы отдаленно достойного ответа на этот вопрос, не зная, как выглядят правила, поскольку сами правила обычно являются причиной любой медлительности. И обычно оптимизация правил имеет большее значение, чем возня с размерами пакетов.   -  person Steve    schedule 11.03.2014


Ответы (1)


Вставка 1 млн фактов в один пакет — очень плохая стратегия (если только вам не нужно находить комбинации из множества). В документации четко указано, что вся работа (по крайней мере, в 5.x) делается во время вставок и модификаций. (Сообщается, что 6.x отличается, но по-прежнему является плохой практикой без необходимости заполнять вашу память множеством объектов.)

Просто вставьте и после некоторого подходящего числа вызовите fireAllRules() и обработайте (передайте,...) результаты. Убедитесь, что от такой партии в рабочей памяти не осталось «мертвого запаса» — это также замедлит работу.

person laune    schedule 10.03.2014