2010-12-27 15 views
1

Ich bin an Projekten beteiligt, bei denen wir häufig SQL verwenden, um ein Data Warehouse zu treffen und die Zahlen abhängig von bestimmten Regeln weiter zu knacken. Diese Regeln werden derzeit über gespeicherte Prozeduren oder ähnliches implementiert.Können JBoss-Drools verwendet werden, um Verkäufe in Massen zu kreditieren?

Ich habe Drools nicht verwendet oder ausgesetzt worden.

Ich bin besonders interessiert, wenn es möglich ist, es zu verwenden, um Kredit für Verkaufsgeschäfte in Masse zuzuteilen.

Wenn es Beispiele für diese Verwendung gibt, lassen Sie es mich bitte wissen.

Danke.

Antwort

2

Drools ist eine Rete-Regel-Engine. Ich sehe nicht, was es mit Massenaktualisierungen persistenter Daten zu tun hat.

Es kann die Regeln enthalten, die bestimmen, wenn die Zuweisung dieses Kredits korrekt ist, aber es wäre nicht das Tool zum Durchführen des Updates. Das ist ein Datenbankproblem.

Es ist nicht die einzige Wahl für die Ausführung dieser Regeln. Sie können dies auch mithilfe von Datenbank-Triggern tun, die bei INSERT/UPDATE ausgeführt werden.

UPDATE: Drools und gespeicherte Procs schließen sich gegenseitig aus. Einer ist eine serverseitige Technologie, der andere läuft in der Datenbank. Sie müssen entscheiden, wo Sie Ihre Geschäftslogik ausführen möchten.

Das Problem mit einem gespeicherten Prozess ist, dass es Sie an diesen Datenbankanbieter bindet und bei Datenbankereignissen wie BEFORE oder AFTER INSERT oder UPDATE ausgeführt wird. Es wird nicht über Ihre Geschäftsereignisse informiert, z. B. "Die Regeln sagen mir, dass diese Person für ein Guthaben qualifiziert ist", es sei denn, Sie haben es in den gespeicherten Proc-Code eingebettet.

Wenn Sie das tun, brauchen Sie Drools nicht. Die beiden schließen sich gegenseitig aus oder sind redundant.

+0

Ich bin mir bewusst, dass Drools kein Datenbankserver an sich ist. Was ich mich wundere, ist, wenn Drools beabsichtigt ist, auf mehreren Datensätzen in einem Batch statt auf einem Datensatz pro Lauf wie eine Diagnose-App zu arbeiten. – jetimms

+0

Drools weiß nichts über Charge; Regeln werden einzeln auf den Datensatzdaten ausgeführt. So ist Ihr Stapel - Sie schreiben nacheinander einen Block von Datensätzen auf den Server. Ihr Stapelverarbeitungsprozess wird also jeden Datensatz durchlaufen, Drools aufrufen, um zu bestimmen, ob das Guthaben angewendet werden soll oder nicht, die Datensatzdaten nach Bedarf ändern und dann den Datensatz an die Datenbank senden. – duffymo

+0

Von dem, was Sie sagen, sobald eine Provision Rate bestimmt wird (sagen durch eine Regel), ist die Arithmetik, um die Provision zu berechnen, kein Job für Drools, aber für das System, das diese Provisionsrate von Drools erhält, wie eine gespeicherte Prozedur ausgelöst durch eine aktualisierte Tabelle, die den Provisionssatz erhält? – jetimms

2

Drools wird viel verwendet, um Kredit zu vergeben, daher glaube ich, dass Sie es sehr nützlich finden, Ihre Kreditregeln dort zu schreiben (um sie zwischen Releases zu ändern oder sogar die Kredit-Experten selbst mit Guvnor schreiben).

Wie für die Implementierung in Ihrer Datenbank:

  • entweder die Kreditregeln gelten, bevor Sie den Verkaufsrekord in Ihrem Business-Schicht (serverseitig) speichern . Wenn Sie eine 3-Tier-Architektur (Client - Java-Server - Datenbank) haben, sollte dies einfach genug sein. Sie möchten wahrscheinlich eine StatelessSession verwenden (aber nur Ihre KnowlegdeBase einmalig instanziieren).

  • Entweder den Verkaufsdatensatz mit Boolean alreadyCreditCheckedfalse markieren, ein Signal an einen separaten Prozess senden, der diejenigen extrahiert, die noch nicht überprüft wurden, und prüft sie.

+0

Can Drools verwendet werden, um eine Tabelle zu lesen, um zu bestimmen, wie die Regelbedingung sein wird? Beispielsweise erhält ein bestimmter Verkaufstyp eine bestimmte Obergrenze für eine Förderung, während der andere Verkaufspersonentyp eine wesentlich höhere Obergrenze hat. Können Drools den Verkaufspersonentyp nachschlagen und dann diese Obergrenze in der Regel verwenden? – jetimms

+0

Aus Duffymos Korrespondenz habe ich festgestellt, dass die Antwort auf meine obige Frage nein ist, Drools benötigt alle Daten auf der Hand, um die Regel zu bearbeiten. Vielen Dank! – jetimms

+0

Ja, kann es. Schauen Sie in die Winterschlaf-Integration. –