Pregunta

He estado echando un vistazo Motor de reglas de WF y NxBRE Y parece interesante, pero no estoy seguro de qué tan bien funcionará en escenarios de la vida real.

El que tengo en mente es algo así como una base de hechos con entre 10 y 100 millones de hechos y reglas como:

Objeto.Campo < 5000 Y Objeto.Campo > 1000 Y IsProperty(Objeto.Campo2)

Estoy usando C# y .NET.

Editar: No lo he dejado claro (totalmente culpa mía) :) Tengo mi propio sistema de evaluación de reglas que utiliza el propio algoritmo RETE...es bastante rápido, puede evaluar el escenario de 10 millones de hechos en unos 10 segundos...¿Qué tan rápidas son las soluciones comerciales en comparación?

¿Fue útil?

Solución

La respuesta corta es que se puede esperar de un motor de reglas para superar a una solución imprescindible una vez que el número de reglas es superior a algunos (no sé el valor exacto) valor umbral.

La parte normativa de un motor de reglas es un conjunto de condiciones y acciones. Una regla simple es (casi) funcionalmente equivalente a un si - entonces comunicado. El poder real de un motor de reglas brilla a través debido a la naturaleza declarativa del motor.

En un programa imprescindible tradicional, usted tiene que codificar cómo se evalúa la lógica. Cuando se utiliza un motor de reglas, que determina cuántos de sus declaraciones son evaluados. Sólo he utilizado motores como Jess o CLIPS , que utilizan un rete algoritmo de averiguar qué reglas fuego. Es la eficiencia de sus reglas de disparo algoritmo que se va a conducir cuánto más eficiente su motor de reglas llevará a cabo a través de una solución imprescindible tradicional.

El algoritmo Rete está diseñado para sacrificar la memoria para aumentar la velocidad. Se mantiene una red de patrones secundarios LHS nodos de mapeo para reglas. Cuantas más reglas y hechos que usted tiene, mejor su red rete superará a su solución imprescindible, ya que el rendimiento de Rete es teóricamente independiente del número de reglas en el sistema.

Se está planeando en una gran cantidad de hechos. Si usted planea tener un montón de reglas, es posible que encuentre problemas de memoria.

Tome un vistazo a el artículo de Martin Fowler en . Es una buena y (muy) Breve visión de conjunto.

Hay una larga discusión sobre la Microsoft Business Rules Engine (MS-BRE) adn su rendimiento en comparación con Jess y Drools. Varios de los puntos planteados ponen de relieve por qué estas evaluaciones son difíciles.

Otros consejos

El "rumor de que no es una implementación fiel de rete" se refiere a un problema antiguo relacionado con una afirmación de que el motor de reglas de negocio incluido con BizTalk Server no implementa el algoritmo Rete correctamente.Por cierto, la afirmación era incorrecta.El BRE ciertamente implementa Rete.El motor de reglas de WF es una tecnología totalmente diferente al BRE.Como dice Karl, el motor de reglas de WF no implementa Rete en absoluto, ni correcta ni incorrectamente.Es un ejemplo de lo que en términos generales se puede denominar motor "secuencial".Implementa una forma de encadenamiento directo.Sin embargo, los problemas reales son un poco más complejos que esto.El bit "adelante" se refiere al tipo de razonamiento lógico que puede realizar un motor.En realidad, el término no dice nada sobre los mecanismos involucrados en el tiempo de ejecución.El verdadero problema es qué tan bueno es un motor para razonar.Sí, WF puede avanzar en cadena, y sí puede razonar, pero sólo de maneras bastante limitadas.Un motor Rete ofrece capacidades de razonamiento más sólidas, PERO esto en realidad no tiene nada que ver con el uso del algoritmo Rete, que en realidad es solo una optimización para una determinada clase de motor de reglas llamado sistema de "producción".Tiene que ver con la forma en que un sistema de producción puede razonar sobre una "base de hechos" completa, mientras que el motor secuencial de reglas WF sólo puede razonar directamente sobre el equivalente aproximado de un hecho único.A veces surgen problemas porque la gente confunde un mecanismo de ejecución particular que permite el encadenamiento directo con el proceso lógico del encadenamiento directo en sí (y después de todo, esa es una distinción bastante sutil).El mecanismo relevante en WF ciertamente puede usarse para razonar de manera "directa" hasta cierto punto, pero su uso principal es permitir que las reglas secuenciales se expresen de una manera semideclarativa, es decir, las reglas se pueden expresar en cualquier secuencia. independientemente de las dependencias procesales entre esas reglas.Eso no tiene nada que ver con el razonamiento directo ni, de hecho, con el proceso local de encadenamiento directo.

El tema es un poco complejo y oscuro, y sé que algunos de los chicos de MS no están de acuerdo conmigo en esto (lo hemos discutido bastante a menudo), pero esa es mi opinión.

Una cosa a tener muy en cuenta es que el WF motor de reglas es que en realidad implementa su propio analizador y, como resultado, es algo limitado en su expresividad y tiene consideraciones de rendimiento, ya que es más o menos que hace la cadena de análisis de interpretar las normas en un código ejecutable (acciones) en tiempo de ejecución.

Nos encontramos con 24 millones de pruebas a través de reglas de 1500 en siete minutos usando JBoss Drools con dos máquinas virtuales de Java que se ejecuta en bastante servidores maldito promedio. Eso es más de treinta seis mil millones de pruebas que se ejecutan si se ejecutó cada combinación, y la mayoría de las pruebas de tener múltiples opciones de lógica en ellos. (Su ejemplo tiene tres opciones, por ejemplo.)

que también habría que considerar cómo se pasa los datos en su motor de reglas, al igual que una vez que las reglas de comenzar a disparar, y algunas reglas hace llamadas a una base de datos, entonces seguramente tendrá problemas de rendimiento. La mejor práctica es dar todos los datos necesarios para la ejecución de la regla en el mismo principio, aunque esto tiene algunas desventajas también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top