Ist eine gute Idee, In-Memory-Indizes und umgehen die DB zu bauen, wenn intensiv an einem kleinen Teil in Betrieb?

StackOverflow https://stackoverflow.com/questions/708898

Frage

Ich arbeite an einem Programm, um automatisch eine optimale Verschiebung Zuweisungen vorbehaltlich viele Einschränkungen zu finden. Ich verwende grails , das heißt, die Daten über Arbeitnehmer, Verschiebungen und Aufgaben werden in einem DBMS gehalten werden.

Für die Optimierung selbst, werde ich auf eine kleine Teilmenge der Daten sehr intensiv arbeiten müssen (ca. 600 Zeilen insgesamt etwa 5 verschiedenen Tabellen). Ich werde über laufen haben und die Suche durch die verschiedenen Unter Subsets Dutzende Male Fitness-Funktionen zu berechnen, einige Werte ändern, berechnen Fitness wieder, Schaum, spülen, wiederholen, vielleicht hunderte Male.

Nun, während der Suche und Iteration ist genau das, was ein DBMS für ist, glaube ich, in diesem Fall, dass der Aufwand für Hunderte von DB-Anfragen der eigentliche Arbeit getan würde Zwerg, auch für einen In-Memory-DBMS wie HSQLDB. Anstatt also, ich plane die gesamte Teilmenge in dem Speicher am Anfang schlürfen, bauen sie meine eigene Indizes (HashMap, vor allem) für die Lookups Ich werde tun müssen, und dann nur funktionieren, mit denen, blieb weg von der DB bis ich bin fertig und schreibe mein Ergebnis zu.

Ist das ein vernünftiger Ansatz? Eine bessere Idee?

War es hilfreich?

Lösung

Ich gehe davon aus Sie Hunderte von Befehlen an die Datenbank ausgeben müssen? Es gibt keine Möglichkeit, den Code innerhalb der DB auszuführen?

Die Hauptsache ich besorgt sein würde, ist Integrität; stellen Sie sicher, korrekt verarbeiten zu verriegeln. Sie würden wahrscheinlich irgendwo eine Versionsnummer gespeichert werden sollen, damit Sie nicht den gesamten Satz von Daten für die Dauer der Bearbeitung sperren müssen. In der Update-Transaktion, würden Sie zuerst sicherstellen, dass die Versionsnummer ist das gleiche wie wenn Sie beginnt zu lesen.

Schließlich Benchmark es? Ich habe einige apps im letzten Jahr getan oder so, die einen ähnlichen sehr intensiven Rechenprozess pro Anfrage hatten. in-Verfahren unter Verwendung von Objekten, die Daten war um Größenordnungen effizienter als Schlagen der Datenbank pro Anfrage zu vertreten. Aber jede App ist anders und es könnte Dinge in Betracht gezogen werden nicht, dass ich es auswirken.

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