Question

J'ai eu un coup d'oeil à WF Règles moteur et NxBRE et il semble intéressant, mais je ne suis pas sûr de la façon dont il se produira dans les scénarios de la vie réelle .

Celui que j'ai à l'esprit est quelque chose comme une base de fait avec entre 10 et 100 millions de faits et de règles comme:

Object.Field <5000 ET Object.Field> 1000 ET IsProperty (Object.Field2)

J'utilise C # et .NET.

Modifier Je ne me suis pas clairement (totalement ma faute) :) J'ai mon propre système d'évaluation de la règle qui utilise l'algorithme RETE lui-même ... il est assez rapide, il peut évaluer le scénario de 10 millions de fait en 10 secondes environ ... comment sont rapides solutions comercial en comaparison?

Était-ce utile?

La solution

La réponse courte est que je me attends à un moteur de règles à surperformer une solution impérative une fois que le nombre de règles dépasse certains (je ne sais pas la valeur exacte) valeur seuil.

La partie des règles d'un moteur de règles est un ensemble de conditions et d'actions. Une seule règle est (presque) fonctionnellement équivalent à un si - then. La puissance réelle d'un moteur de règles transparaît en raison de la nature déclarative du moteur.

Dans un programme traditionnel impératif, vous devez coder la façon dont la logique est évaluée. Lorsque vous utilisez un moteur de règles, il détermine le nombre de vos déclarations sont évaluées. Je ne l'ai utilisé comme moteurs Jess ou CLIPS , qui utilisent un rete algorithme pour déterminer les règles à feu. Il est l'efficacité de vos règles de tir algorithme qui va conduire combien plus efficace votre moteur de règles fonctionnera sur une solution traditionnelle impératif.

L'algorithme Rete est conçu pour sacrifier la mémoire pour une vitesse accrue. Il dispose d'un réseau de mappage de nœuds motifs latéraux LHS à des règles. Plus des règles et des faits que vous avez, plus votre réseau rete sera surperformer votre solution impératif, car les performances Rete est théoriquement indépendant du nombre de règles dans le système.

Vous prévoyez beaucoup de faits. Si vous envisagez d'avoir beaucoup de règles, vous pouvez rencontrer des problèmes de mémoire.

Jetez un oeil à l'article de Martin Fowler sur moteurs . Il est un bon et (très) bref aperçu.

Il y a une longue discussion sur le Microsoft Business Rules Engine (MS-BRE) adn ses performances par rapport à Jess & Drools. Plusieurs des points soulevés soulignent pourquoi ces évaluations sont difficiles.

Autres conseils

La « rumeur que ce n'est pas une application fidèle rete » fait référence à un problème ancien concernant une allégation selon laquelle le Business Rule Engine inclus avec BizTalk Server ne parvient pas à mettre en œuvre correctement l'algorithme Rete. La demande était incorrecte, par la voie. Le BRE fait certainement mettre en œuvre Rete. Le moteur de règles WF est une technologie totalement différente du BRE. Comme Karl dit, le moteur de règles WF ne met pas en œuvre Rete du tout, que ce soit bien ou mal. Il est un exemple de ce qui peut librement appeler un moteur « séquentielle ». Il met en œuvre une forme de chaînage avant. Cependant, les vrais problèmes sont un peu plus complexe que cela. Le bit « avant » fait référence au type de raisonnement logique qu'un moteur peut faire. Le terme est pas vraiment vous dire quoi que ce soit sur les mécanismes impliqués lors de l'exécution. La vraie question est de savoir comment un bon moteur est au raisonnement. Oui, WF peut transmettre la chaîne, et oui il peut raisonner, mais seulement de façon très limitée. Un moteur Rete offre des capacités de raisonnement plus fort, mais cela est en fait rien à voir avec l'utilisation de l'algorithme Rete qui est vraiment juste une optimisation pour une certaine classe de moteur de règles appelé un système de « production ». Il est à voir avec la façon dont un système de production peut raisonner sur une « base factuelle » alors que tout le moteur de règles WF séquentielle ne peut raisonner directement sur l'équivalent approximatif d'un seul fait. Les problèmes surgissent parfois parce que les gens confondent un mécanisme d'exécution particulier qui permet CHAÎNAGE avant avec le processus logique de l'avant s'enchaînant (et après tout, qui est tout à fait une distinction subtile). Le mécanisme pertinent WF peut certainement être utilisé à la raison dans un « avant » de façon dans une moindre mesure, mais son utilisation principale est de permettre des règles séquentielles à être exprimées de façon semi-déclarative - à savoir, les règles peuvent être exprimées dans une séquence quelles que soient les dépendances de procédure entre ces règles. Cela n'a rien à voir avec le raisonnement avant ou, en effet, le processus loical de chaînage avant.

La question est un peu complexe et obscure, et je sais que quelques-uns des gars de MS ne sont pas d'accord avec moi sur ce (nous avons discuté assez souvent), mais c'est mon avis sur la question.

Une chose à être très conscient est que le moteur de règles WF est qu'il met effectivement en œuvre son propre analyseur et, par conséquent, est quelque peu limitée dans son expressivité et ne dispose des considérations de performance car il est à peu près train de faire l'analyse syntaxique chaîne à interpréter les règles en code (actions exécutables) lors de l'exécution.

Nous avons couru 24 millions de tests par 1500 règles en sept minutes en utilisant JBoss Drools avec deux JVMs courir sur jolie serveurs moyenne sacrément. Ce qui est plus de trente six milliards tests à exécuter si vous exécutiez toutes les combinaisons, et la plupart des tests ont plusieurs choix logiques en eux. (Votre exemple a trois choix, par exemple.)

vous aussi d'examiner comment les données sont transmises dans votre moteur de règles, comme une fois que les règles commencent à tirer, et certaines règles fait appel à un DB, alors sûrement il aura des problèmes de performance. la meilleure pratique est de donner toutes les données nécessaires à l'exécution de la règle au début lui-même, bien que cela a des inconvénients aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top