Насколько хорошо работает Rule Engines?

Я просмотрел WF Rules Engine и NxBRE, и это кажется интересным, но я не уверен, насколько хорошо он будет работать в реальных сценариях.

Я имею в виду что-то вроде базы фактов, содержащей от 10 до 100 миллионов фактов и правил, например:

Object.Field ‹ 5000 И Object.Field > 1000 И IsProperty(Object.Field2)

Я использую С# и .NET.

Редактировать: Я не ясно выразился (полностью моя вина) :) У меня есть собственная система оценки правил, которая использует сам алгоритм RETE... она довольно быстра, она может оценить 10 миллионов фактический сценарий примерно за 10 секунд... насколько быстры коммерческие решения в сравнении?


person Jorge Córdoba    schedule 24.09.2009    source источник


Ответы (5)


Короткий ответ: я ожидаю, что механизм правил превзойдет императивное решение, как только количество правил превысит некоторое (точное значение не знаю) пороговое значение.

Часть правил механизма правил представляет собой набор условий и действий. Одно правило (почти) функционально эквивалентно оператору if - then. Реальная мощь механизма правил проявляется благодаря его декларативному характеру.

В традиционной императивной программе вы должны кодировать, как оценивается логика. При использовании механизма правил он определяет, сколько ваших утверждений оценивается. Я использовал только такие механизмы, как Jess или CLIPS, которые используют алгоритм rete, чтобы выяснить, какие правила активировать. Именно эффективность вашего алгоритма запуска правил будет определять, насколько эффективнее будет работать ваш механизм правил по сравнению с традиционным императивным решением.

Алгоритм Rete предназначен для того, чтобы пожертвовать памятью ради увеличения скорости. Он поддерживает сеть узлов, отображающих боковые шаблоны LHS в правила. Чем больше у вас правил и фактов, тем лучше ваша сеть Rete превзойдет императивное решение, потому что производительность Rete теоретически не зависит от количества правил в системе.

Вы планируете много фактов. Если вы планируете иметь много правил, вы можете столкнуться с проблемами памяти.

Взгляните на статью Мартина Фаулера о системах правил. Это хороший и (очень) краткий обзор.

Существует длительное обсуждение Microsoft Business Rules Engine (MS-BRE) и его производительности. по сравнению с Джесс и Друлс. Некоторые из поднятых вопросов подчеркивают, почему эти оценки сложны.

person DaveParillo    schedule 29.09.2009
comment
Хороший ответ, но ... Я не ясно выразился (полностью моя вина) :) У меня есть собственная система оценки правил, которая использует сам алгоритм RETE ... он довольно быстрый, он может оценить сценарий с 10 миллионами фактов за около 10 секунд... насколько быстры коммерческие решения в сравнении? - person Jorge Córdoba; 30.09.2009
comment
Итак, вы хотите знать, как ВАШ механизм правил сравнивается с другими доступными?? - person DaveParillo; 30.09.2009
comment
Более или менее, в основном мы переделываем его на .NET (он был запрограммирован на Delphi), потому что в контракте с клиентом указано, что все должно быть сделано в .NET. Я хочу знать, будет ли третье решение работать так же хорошо, как старое. - person Jorge Córdoba; 30.09.2009
comment
Если вы не предоставите детали своего движка (т.е. исходный код), маловероятно, что кто-либо, кроме вас, сможет ответить на этот вопрос. Кстати, если я отвечу на этот вопрос, буду ли я указан как соавтор вашей диссертации? ;-) - person DaveParillo; 30.09.2009
comment
Jeje, это не диссертация, это реальное приложение, я просто не хочу переделывать работу снова на другом языке, но я боюсь разрабатывать его, скажем, на nxBRe и обнаруживать, что оно работает плохо... - person Jorge Córdoba; 02.10.2009
comment
Я рекомендую хранить ваши правила на независимом от языка носителе (клипы, похожие на клипы или RuleML). Затем вы изолируете себя от изменений в вашем механизме правил. Вы должны сделать это, даже если вы придерживаетесь существующего решения. - person DaveParillo; 02.10.2009
comment
Обычно механизмы правил оцениваются с точки зрения их наборов правил, а не баз данных фактов. Попытка сравнить факты очень скользкая — движок обычно динамически добавляет или удаляет факты по мере запуска правил. База данных фактов редко бывает постоянной. Если у вас есть 10 миллионов правил, все, что я могу сказать, это вау. Удачи с этим. - person DaveParillo; 02.10.2009
comment
Дэйв, вопрос не в том, реализует ли WF Rules точную реализацию rete. Не реализует Rete. Имейте в виду. что Rete — это просто конкретная оптимизация прямой цепочки. Есть и другие оптимизации. - person kreinsch; 13.01.2010
comment
@Dave Почему у этих двигателей всегда есть свой язык? Размышляя о том, чего бы мне хотелось от движка C# Rete, я хотел бы иметь строгую типизацию. Я бы хотел, чтобы факты были моими модельными объектами. Я не хочу создавать сложные слои двухстороннего сопоставления для преобразования объектов модели в некий скрипт, являющийся собственностью механизма правил. Моя первая интуиция заключалась бы в том, что правила должны быть указаны с использованием предикатов/лямбда-выражений/выражений, чтобы все строго типизировалось и проверялось во время компиляции, а не во время выполнения. Что ты думаешь по этому поводу? - person AaronLS; 13.07.2012

«Слух о том, что это неточная реализация Rete» относится к давней проблеме, касающейся заявления о том, что механизм бизнес-правил, включенный в BizTalk Server, не может правильно реализовать алгоритм Rete. Утверждение, кстати, было неверным. BRE, безусловно, реализует Rete. Механизм правил WF — это совершенно другая технология, отличная от BRE. Как говорит Карл, движок правил WF вообще не реализует Rete ни правильно, ни неправильно. Это пример того, что можно условно назвать «последовательным» двигателем. Он реализует форму прямой цепочки. Однако настоящие проблемы немного сложнее, чем это. Бит «вперед» относится к типу логических рассуждений, которые может выполнять движок. Этот термин на самом деле ничего не говорит вам о механизмах, задействованных во время выполнения. Настоящая проблема заключается в том, насколько хорош двигатель в рассуждениях. Да, WF может пересылать цепочки и да, он может рассуждать, но только весьма ограниченными способами. Механизм Rete предлагает более сильные возможности рассуждения, НО на самом деле это не имеет ничего общего с использованием алгоритма Rete, который на самом деле представляет собой просто оптимизацию для определенного класса механизма правил, называемого «производственной» системой. Это связано с тем, как производственная система может рассуждать над всей «базой фактов», тогда как последовательный механизм правил WF может напрямую рассуждать только о приблизительном эквиваленте одного факта. Проблемы иногда возникают из-за того, что люди путают конкретный механизм времени выполнения, обеспечивающий прямую цепочку, с логическим процессом самой прямой цепочки (в конце концов, это довольно тонкое различие). Соответствующий механизм в WF, безусловно, можно использовать для «прямого» рассуждения в ограниченной степени, но его основное применение состоит в том, чтобы позволить последовательным правилам выражаться полудекларативным способом, т. е. правила могут быть выражены в любой последовательности. независимо от процедурных зависимостей между этими правилами. Это не имеет ничего общего с опережающими рассуждениями или даже с логическим процессом прямой цепочки.

Проблема немного сложная и неясная, и я знаю, что некоторые ребята из MS не согласны со мной в этом (мы обсуждали это достаточно часто), но это мое мнение.

person Charles Young    schedule 19.05.2011

Мы выполнили 24 миллиона тестов по 1500 правилам за семь минут, используя JBoss Drools с двумя JVM, работающими на довольно посредственных серверах. . Это более тридцати шести миллиардов тестов, которые нужно выполнить, если вы запустите каждую комбинацию, и в большинстве тестов есть несколько логических вариантов. (В вашем примере, например, есть три варианта.)

person Dean J    schedule 01.10.2009

Одна вещь, о которой следует помнить, заключается в том, что механизм правил WF фактически реализует свой собственный синтаксический анализатор и, как результат, несколько ограничен в своей выразительности и имеет соображения производительности, поскольку он в значительной степени выполняет синтаксический анализ строк для интерпретации правил. в код (исполняемые действия) во время выполнения.

person Scott Dorman    schedule 30.09.2009
comment
+1, и ходят слухи, что это не верная реализация rete, но это может быть в основном анти-MS FUD. - person DaveParillo; 02.10.2009
comment
Дэйв, вопрос не в том, реализует ли WF Rules точную реализацию rete. Он не реализует Rete. Имейте в виду, что Rete — это просто конкретная оптимизация прямой цепочки. Есть и другие оптимизации. - person kreinsch; 14.11.2014

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

person teon    schedule 17.02.2012