Frage

Ich habe einen Blick wurde mit unter WF Rules Engine und NxBRE und es scheint interessant, aber ich bin nicht sicher, wie gut es in realen Situationen durchführen wird .

Der, den ich im Sinne habe, ist so etwas wie ein Faktenbasis mit zwischen 10 und 100 Millionen Fakten und Regeln wie:

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

Ich bin mit C # und .NET.

Edit: Ich habe mich nicht klar (total meine Schuld) machen :) ich meine eigene Regel Bewertungssystem haben, das die RETE-Algorithmus selbst verwendet ... es recht schnell ist, kann es bewerten das 10 Millionen Tatsache Szenario in etwa 10 Sekunden ... wie schnell sind comercial Lösungen in comaparison?

War es hilfreich?

Lösung

Die kurze Antwort ist, würde ich eine Regel-Engine erwartet eine dringend notwendige Lösung zu entwickeln, sobald die Anzahl der Regeln einige überschreitet (ich weiß nicht, die genauen Wert) Schwellenwert ist.

Die Regeln Teil einer Regelmaschine ist von Bedingungen und Aktionen gesetzt. Eine einzige Regel ist (fast) funktional äquivalent zu einer if - then Anweisung. Die wirkliche Macht eines Regel-Engine scheint aufgrund des deklarativen Charakter des Motors durch.

In einem traditionellen Imperativ Programm, müssen Sie codieren, wie die Logik ausgewertet wird. Wenn eine Regel-Engine verwendet wird, bestimmt sie, wie viele Ihrer Aussagen ausgewertet werden. Ich habe gebrauchte Motoren nur wie Jess oder CLIPS , die ein Rete Algorithmus was zu Feuer Regeln herauszufinden. Es ist die Effizienz Ihrer Regeln Algorithmus Brennen, das geht zu fahren, wie viel effizienter Ihre Regeln Motor eine traditionelle Imperativ Lösung führt über wird.

Der Rete-Algorithmus ist so konzipiert, Speicher für höhere Geschwindigkeit zu opfern. Es unterhält ein Netzwerk von Knoten Mapping LHS Seite Mustern Regeln. Je mehr Regeln und Fakten, die Sie, desto besser ist Ihre Rete Netzwerk haben Ihre zwingend notwendig Lösung übertreffen, da Rete Leistung theoretisch unabhängig von der Anzahl der Regeln im System vorhanden ist.

Sie planen auf eine Menge von Fakten. Wenn Sie eine Menge von Regeln haben möchten, können Sie in den Speicher Probleme ausgeführt werden.

Werfen Sie einen Blick auf Martin Fowler Artikel über Rules Engines . Es ist ein guter und (sehr) kurzer Überblick.

Es gibt eine längere Diskussion auf dem Microsoft Business Rules Engine (MS-BRE) adn seine Leistung im Vergleich zu Jess & geifert. Einige der angesprochenen Punkte unterstreichen, warum diese Auswertungen hart sind.

Andere Tipps

Das „Gerücht, dass es nicht eine getreue Rete Umsetzung“ bezieht sich auf ein altes Problem über eine Forderung, dass die Business-Rule-Engine mit BizTalk Server enthalten nicht ordnungsgemäß den Rete-Algorithmus zu implementieren. Die Behauptung falsch war, nebenbei bemerkt. Die BRE hat sicherlich Rete implementieren. Die WF-Rules-Engine ist eine völlig andere Technologie auf die BRE. Wie Karl sagt, implementieren die WF Rules Engine Rete gar nicht, entweder richtig oder falsch. Es ist ein Beispiel dafür, was lost einen ‚sequenziellen‘ Motor bezeichnet werden. Es implementiert eine Form der Vorwärtsverkettung. Allerdings sind die wirklichen Probleme ein wenig komplexer als das. Die ‚Vorwärts‘ Bit bezieht sich auf die Art der logischen Argumentation, dass ein Motor tun. Der Begriff ist nicht wirklich sagen Sie etwas über die zur Laufzeit beteiligten Mechanismen. Die eigentliche Frage ist, wie gut ein Motor bei Argumentation ist. Ja, kann WF zuzukunftsKette und kann es ja die Vernunft, sondern nur in ganz begrenzten Möglichkeiten. Ein Rete Motor bietet stärkere Argumentation Fähigkeiten, aber das ist eigentlich nichts mit der Verwendung des Rete-Algorithmus zu tun, die wirklich genannt nur eine Optimierung für eine bestimmte Klasse von Regel-Engine ist ein ‚Produktion‘ System. Es ist die Art und Weise ein Produktionssystem zu tun, kann eine ganze ‚Faktenbasis‘ Vernunft über, während die sequentielle WF Regelmaschine nur direkt die grobe Äquivalent einer einzigen Tatsache Vernunft über. Probleme manchmal auftreten, weil die Menschen einen bestimmten Laufzeitmechanismus verwirren, die nach vorne ermöglicht mich mit dem logischen Prozess des Vorwärtsverkettungs Chaining (und schließlich, das ist ein ganz feiner Unterschied). Der relevante Mechanismus in WF kann sicher in eine ‚Vorwärts‘ Weise in begrenztem Ausmaß zu Grunde verwendet werden, aber ihre primäre Verwendung sequentielle Regeln zu ermöglichen, in einer semi-deklarativer Weise exprimiert werden - dh Regeln können in beliebiger Reihenfolge ausgedrückt werden unabhängig von der Verfahren Abhängigkeiten zwischen diesen Regeln. Das hat nichts mit nach vorn Argumentation zu tun oder, in der Tat, der loical Prozess der Vorwärtsverkettung.

Das Problem ist ein wenig komplex und undurchsichtig, und ich weiß, einige der Jungs bei MS nicht mit mir einig, dies (wir haben es diskutiert oft genug), aber das ist mein nehmen auf sie.

Eine Sache sehr bewusst zu sein, dass die WF Regel-Engine ist, dass es tatsächlich implementiert einen eigenen Parser und als Ergebnis wird etwas in seiner Aussagekraft begrenzt und tut Leistungsüberlegungen haben, da es ziemlich String tut, ist das Parsen zu interpretiert die Regeln in Code (ausführbare Aktionen) zur Laufzeit.

Wir liefen 24 Millionen Tests durch 1500 Regeln in sieben Minuten unter Verwendung von JBoss Drools mit zwei JVMs laufen auf ziemlich darn durchschnittlicher Server. Das ist mehr als 36 Milliarden Tests durchgeführt werden, wenn Sie jede Kombination laufen, und die meisten Tests haben mehr logischen Entscheidungen in ihnen. (Ihr Beispiel hat drei Möglichkeiten zur Auswahl, zum Beispiel.)

Sie müßten auch prüfen, wie die Daten in der Regelmaschine übergeben wird, wie einst die Regeln zu feuern beginnen, und einige Regeln machen Anrufe auf eine DB, dann sicherlich wird es Performance-Probleme hat. die beste Praxis ist es, alle Daten für die Regelausführung beim Start selbst, benötigt zu geben, obwohl dies einige Nachteile hat auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top