Ich habe eine Datenbanktabelle mit ORMlite gemappt, es enthält einige Daten (18 Spalten) und es enthält auch ForeignCollectionField(eager = true)
.Wie beschleunigt man das eifrige Laden ausländischer Sammlungen?
Problem ist, wenn alle Daten aus dieser Tabelle geladen werden ... ORMlite erstellt Abfrage für jedes Element statt Joins. Dies führt zu 67124 Abfragen und dauert ewig, um alle Objekte aus dieser Tabelle zu laden.
Dies könnte jedoch in rechten Join-Abfrage unter wenigen Sekunden getan werden? Warum stattdessen Tausende von Abfragen generieren?
Wie kann ich es beschleunigen? Muss ich rohe Abfrage und dann RawRowMapper schreiben, was die Verwendung von ORM sinnlos macht.
Wie man mit dem Laden von eifrigen Sammlungen in Ormlite umgehen? Weil queryForAll
nicht Art und Weise ist ..
Warum versuchen Sie, alle Daten und wie zu laden? ORMs sind nicht für die Berichterstellung oder ETL gedacht. Dies sind die einzigen gültigen Gründe, "alle Daten zu laden". Verwenden Sie hierfür eine gespeicherte Prozedur oder Ansicht. Was du beschreibst, ist das 'N + 1'-Problem, das durch eifriges Laden behoben werden sollte. Wie machen Sie die Abfrage und wie haben Sie Zuordnungen definiert? –
PS ORMs * wirklich, wirklich * sind nicht für die Berichterstattung oder ETL gedacht. Dies ist nur eine wissenschaftliche Diskussion. Sie erhalten nichts, wenn Sie Zeilen und Werte in Objekte konvertieren, wenn Sie keine Domänenlogik auf sie anwenden möchten. –
In diesem Fall muss ich alle Daten laden, die später alle in 3D-Grafik angezeigt und für die Simulation verwendet werden ... Es gibt große Domain-Logik dahinter. Diese Tabelle hat viel mehr Spalten und ganze Datenbank hat viel mehr Tabellen .. aber dieses Mal muss ich alle laden und es langsam. Wie auch immer, auch wenn es keine große Domain-Logik und Sie laden alle Daten beim Start, Datenbank ist immer noch gut Weg um diese Daten zu speichern, da ihre Spalten zur Laufzeit aktualisiert werden können, anstatt die gesamte XML-Datei neu zu schreiben. –