Использование Drools в тяжелом пакетном процессе

Мы использовали Drools как часть решения, которое действовало как своего рода фильтр в приложении с очень интенсивной обработкой, возможно, выполняя до 100 правил для более чем 500 000 объектов рабочей памяти. оказывается, что это очень медленно. у кого-нибудь еще есть опыт использования Drools в приложении пакетной обработки?


person bmw0128    schedule 18.09.2008    source источник
comment
Может ли кто-нибудь сказать по вышеуказанному вопросу, действительно ли возможно иметь много фактов в памяти и одновременно вызывать правила с высокой производительностью.   -  person srinivas    schedule 08.05.2018


Ответы (9)


Я не работал с последней версией Drools (последний раз я использовал ее около года назад), но тогда наши тесты с высокой нагрузкой показали, что она очень медленная. Огромное разочарование после того, как на нем была основана большая часть нашей архитектуры.

По крайней мере, что-то хорошее, что я помню о drools, это то, что их команда разработчиков была доступна в IRC и очень помогла, вы можете попробовать, в конце концов, они эксперты: irc.codehaus.org #drools

person Gilles    schedule 18.09.2008

Вид зависит от ваших правил — 500 000 объектов разумно при достаточном объеме памяти (он должен заполнить сеть RETE в памяти, поэтому использование памяти кратно 500 000 объектам — т. е. пространство для объектов + пространство для сетевой структуры, индексов и т. д.) — его возможно, вы выполняете подкачку на диск, что будет очень медленно.

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

person Michael Neale    schedule 07.11.2008
comment
Привет @Michael, не могли бы вы подробнее рассказать о подкачке на диск. Я сталкиваюсь с проблемой медлительности, когда постоянно вставляю факты. Для первых нескольких тысяч фактов это работает нормально. Но позже он перестанет вызывать правила, и редко набор правил будет выполняться через какой-то промежуток времени. В чем проблема с этим? - person srinivas; 01.05.2018

Я использовал Drools с оперативной памятью с отслеживанием состояния, содержащей более 1 миллиона фактов. При некоторой настройке как ваших правил, так и лежащей в их основе JVM производительность может быть довольно хорошей уже через несколько минут при первоначальном запуске. Дайте мне знать, если вы хотите получить более подробную информацию.

person ShabbyDoo    schedule 03.05.2009
comment
Меня интересуют эти подробности, не могли бы вы поделиться ими с нами? Я также запускаю Drools на большом наборе данных, и любая настройка была бы отличной. - person John Manak; 14.02.2011
comment
Поделитесь подробностями, мне интересно. - person srinivas; 01.05.2018
comment
К сожалению, я уже ничего не могу вспомнить! - person ShabbyDoo; 02.05.2018

Я сам только учусь пускать слюни, так что, возможно, я что-то упускаю, но почему вся партия из пятисот тысяч объектов сразу добавляется в рабочую память? Единственная причина, о которой я могу думать, заключается в том, что существуют правила, которые срабатывают только тогда, когда два или более элемента в пакете связаны.

Если это не так, то, возможно, вы могли бы использовать сеанс без сохранения состояния и утверждать один объект за раз. Я предполагаю, что в этом случае правила будут работать в 500 000 раз быстрее.

Даже если это так, нужны ли всем вашим правилам доступ ко всем 500 тыс. объектов? Не могли бы вы ускорить процесс, применяя правила для каждого элемента по одному, а затем на втором этапе обработки применяя правила пакетного уровня, используя другую базу правил и рабочую память? Это не изменило бы объем данных, но сеть RETE стала бы меньше, потому что простые правила были бы удалены.

Альтернативным подходом было бы попытаться идентифицировать связанные группы объектов и утвердить объекты в группах во время второй фазы, еще больше уменьшив объем данных в рабочей памяти, а также разделив сеть RETE.

person Simon Gibbs    schedule 17.12.2008

Drools на самом деле не предназначен для запуска на огромном количестве объектов. Он оптимизирован для запуска сложных правил на нескольких объектах.

Инициализация рабочей памяти для каждого дополнительного объекта слишком медленная, а стратегии кэширования рассчитаны на работу с каждым объектом рабочей памяти.

person Yaba    schedule 30.09.2008

Использовать сеанс без сохранения состояния и добавлять объекты по одному?

person LenW    schedule 29.04.2009

У меня были проблемы с ошибками OutOfMemory после разбора нескольких тысяч объектов. Установка другого оптимизатора по умолчанию решила проблему.

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE);
person Adam B    schedule 20.01.2011

Мы тоже смотрели на слюни, но для нас количество объектов невелико, так что это не проблема. Я помню, как читал, что существуют альтернативные версии одного и того же алгоритма, которые больше учитывают использование памяти и оптимизированы для скорости, но при этом основаны на том же алгоритме. Не уверен, что хоть один из них превратился в настоящую полезную библиотеку.

person Andrew Backer    schedule 30.09.2008

этот оптимизатор также можно установить с помощью параметра -Dmvel2.disable.jit=true

person Andreas Kosmala    schedule 24.05.2016