2012-04-03 13 views
8

Ich muss eine Anwendung mit drools erreichen, aber es scheint, dass DROOLS kann nicht über eine große Anzahl von Objekten gleichzeitig. Ich möchte wissen, ob es über Daten in einer relationalen Datenbank und nicht in der WorkingMemory Grund haben könnte.könnte Grund über Daten in einer relationalen Datenbank (z. B. mit HIbernate) sabbern

Dank für jede Hilfe :)

+0

Art der verwandten: http://StackOverflow.com/Questions/8509993 –

+0

Vielen Dank für den nützlichen Link – fennou

+0

Möchten Drools Daten beibehalten, anstatt vollständig in-Speicher? Und um eine Persistenzschicht transparent zu überdenken und Ergebnisse zu speichern? – aitchnyu

Antwort

5

Ihre Frage ist sehr breit. Die Antwort besteht darin, Daten zu überdenken, es sei denn, Sie arbeiten mit gespeicherten Prozeduren. Jede Anwendung (Drools oder nicht) muss die Daten in die JVM laden. Die Daten können dann in einer Drools-Anwendung in den Arbeitsspeicher eingefügt werden (bitte beachten Sie, dass dies keine Kopiervorgänge verursacht, da Drools mit Standard-Anwendungs-POJOs als Fakten arbeiten) oder sie können auf Anforderung durch Regeln abgerufen werden, die den " von "bedingtem Element. Hibernate verwendet auch POJOs und Drools hat keine Probleme mit ihnen zu arbeiten.

„geifert nicht eine große Anzahl von Objekten, die Vernunft über gleichzeitig“

nicht sicher, was Sie damit meinen? Wie viel ist eine große Zahl? Ich persönlich habe mit ein paar Drools-Anwendungen gearbeitet, die über eine Million Fakten gleichzeitig in jedem Arbeitsspeicher verwendet haben, mit einer durchschnittlichen Antwortzeit für die Regelausführung in der 100 ms-Reihenfolge. Hier sehen Sie eine Präsentation eines Beraters, der an einem Projekt gearbeitet hat, bei dem Regeln historische Daten von über 30 Millionen Datensätzen in Echtzeit abfragen und begründen mussten: http://vimeo.com/27209589. Er verwendete dafür eine NoSQL-Datenbank.

Große Anwendungen erfordern natürlich mehr Sorgfalt beim Entwurf der Architektur, aber das gilt für Drools ebenso wie für jede andere Technologie. Wenn Sie Ihren Anwendungsfall detailliert beschreiben, können wir Ihnen genauere Ratschläge geben. Empfehlen Sie auch, die Drools-Mailingliste zu überprüfen, da es eine Menge guter Ratschläge für das Anwendungsdesign gibt.

Hoffe es hilft zu klären.

+0

danke für Ihre Antwort. Hier sind einige Details. Ich arbeite an einer Banking-Fraud-Erkennung-Anwendung, und wie Sie für eine bestimmte Bank wissen, Hunderttausende Transaktionen werden jeden Tag (kann Millionen sein). was ich tun möchte ist, am Ende jeden Tages, geben Sie diese Objekte (Transaktionen) Drools (legen Sie sie in das Arbeitsgedächtnis) und einige historische Daten über die Kunden der Bank (Hunderttausende oder Millionen) und warten auf Drools Antwort ., aber was ich bekomme ist: -a sehr langsame Reaktionszeit. -outofmemoryerror Java-Heap-Speicherbereich. danke für deine Hilfe :) :) verzeih mein kaputtes Englisch :) – fennou

+2

Dieser Anwendungsfall ist sehr ähnlich dem in der Video-Präsentation, die ich oben verlinkt habe. Üblicherweise sollten historische Daten nicht eifrig in den Arbeitsspeicher geladen werden, da sie selten als Ganzes verwendet werden. Historische Daten können bei Bedarf abgerufen werden, indem Sie das CE-Zeichen "from" in Ihren Regeln verwenden, sodass Sie nur die Daten abrufen, die Sie benötigen. Die Verwendung eines Caches oder einer NoSQL-Datenbank hilft dabei, Antwortzeiten zu verbessern. –

+0

Vielen Dank für diese sehr nützliche Antwort, ich werde versuchen, diese Schritte zu folgen, und wenn ich Probleme bekomme, werde ich für Sie kommen, um mir zu helfen, sie zu lösen :) Bitte verzeihen Sie mein gebrochenes Englisch :) – fennou