Frage

Wir haben geifert als Teil einer Lösung als eine Art Filter in einer sehr intensiven Verarbeitungsanwendung zu handeln, vielleicht bis 100 Regeln auf 500.000 + Arbeitsspeicher Objekten angerannt. stellt sich heraus, dass es extrem langsam ist. sonst jemand keine Erfahrung geifert in einer Batch-Typ Verarbeitungsanwendung mit?

War es hilfreich?

Lösung

Ich habe nicht mit der neuesten Version von Drools (letzte Mal habe ich es vor etwa einem Jahr war) gearbeitet, aber damals unsere Hochlast-Benchmarks erwies es sich als äußerst langsam. Eine riesige Enttäuschung nach vielen unserer Architektur eines darauf basierenden haben.

Wenigstens etwas Gutes ich über drools erinnern ist, dass ihre Entwickler-Team im IRC verfügbar war und sehr hilfreich, könnte man ihnen eine Chance geben, sie sind die Experten schließlich: irc.codehaus.org #drools

Andere Tipps

Art hängt von Ihren Regeln - 500K Objekte ist angemessen gegeben genug Speicher (es hat ein RETE-Netzwerk im Speicher zu füllen, so die Speichernutzung ein Vielfaches von 500K Objekte ist - also Raum für Objekte + Raum für Netzwerk-Struktur, Indizes usw. ) - seine möglichen Sie auf der Festplatte sind Paging, die wirklich langsam sein würde.

Natürlich, wenn Sie Regeln, die Kombinationen aus der gleichen Art von Tat übereinstimmen, kann das dazu führen, eine Explosion von Kombinationen, um zu versuchen, die, auch wenn Sie 1-Regel haben wirklich sehr langsam. Wenn Sie weitere Informationen über die Analyse mußten Sie tun das wahrscheinlich mit möglichen Lösungen helfen würde.

Ich habe einen geifert mit einem Stateful-Arbeitsspeicher mit über 1 M Tatsachen verwendet. Mit etwas Tuning sowohl Ihre Regeln und dem zugrunde liegenden JVM, kann die Leistung ganz nach wenigen Minuten gut sein für die erste Inbetriebnahme. Lassen Sie uns wissen, wenn Sie mehr Informationen wünschen.

Ich lerne gerade drools mich, vielleicht bin ich etwas fehlt, aber warum wird die gesamte Charge von fünfhunderttausend Objekte hinzugefügt Speicher auf einmal zu arbeiten? Der einzige Grund, warum ich denken kann, ist, dass es Regeln gibt, die in nur treten, wenn zwei oder mehr Gegenstände in der Menge beziehen.

Wenn das nicht der Fall ist, dann vielleicht könnten Sie eine Stateless Session verwenden und ein Objekt zu einer Zeit behaupten. Ich gehe davon aus Regeln 500k mal schneller in diesem Fall ausgeführt werden.

Auch wenn es der Fall ist, tun alle Regeln Zugriff auf alle 500k Objekte benötigen? Könnten Sie die Dinge zu beschleunigen Regeln pro Artikel bis einer nach dem anderen durch die Anwendung, und dann in einer zweiten Phase der Verarbeitung Batch-Ebene Regeln eine andere Regelbasis verwenden und Arbeitsspeicher gelten? Dies wäre nicht das Volumen der Daten ändern, aber das RETE-Netzwerk wäre kleiner, weil die einfachen Regeln entfernt worden wären.

Ein alternativer Ansatz wäre, zu versuchen und die damit verbundenen Gruppen von Objekten zu identifizieren und die Objekte in Gruppen während der zweiten Phase zu behaupten, weitere und Aufteilung des RETE-Netzwerk, das Datenvolumen im Arbeitsspeicher zu reduzieren.

geifert nicht wirklich entworfen, um auf einer großen Anzahl von Objekten ausgeführt werden. Es ist optimiert für komplexe Regeln auf wenige Objekte ausgeführt wird.

Die Arbeitsspeicher Initialisierung für jedes weiteres Objekt ist zu langsam und die Caching-Strategien entwickelt werden pro Arbeitsspeicher Objekt arbeiten.

Ich hatte Probleme mit OutOfMemory Fehler nach einigen tausend Objekten Parsen. Festlegen eines anderen Standardoptimierungsprogramm wurde das Problem behoben.

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE);

Wir waren in drools suchen als gut, aber für uns die Anzahl der Objekte gering ist, so ist dies kein Problem. Ich Lesen erinnern, dass es alternative Versionen des gleichen Algorithmus, der Speichernutzung in Rechnung mehr nehmen, und sind optimiert für die Geschwindigkeit, während immer noch auf dem gleichen Algorithmus basiert. Nicht sicher, ob einer von ihnen in eine reale nutzbare Bibliothek gemacht hat though.

eine Stateless Session verwenden und die Objekte einen nach dem anderen hinzufügen?

Dieses Optimierungsprogramm kann auch durch die Verwendung Parameter eingestellt werden -Dmvel2.disable.jit = true

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