Использование Drools в тяжелом пакетном процессе - PullRequest
13 голосов
/ 18 сентября 2008

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

Ответы [ 9 ]

4 голосов
/ 07 ноября 2008

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

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

4 голосов
/ 03 мая 2009

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

3 голосов
/ 19 сентября 2008

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

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

2 голосов
/ 17 декабря 2008

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

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

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

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

1 голос
/ 20 января 2011

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

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE);
1 голос
/ 30 сентября 2008

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

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

0 голосов
/ 24 мая 2016

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

0 голосов
/ 29 апреля 2009

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

0 голосов
/ 30 сентября 2008

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

...