Ich möchte eine JVM-Datenstruktur (Java/Scala) entwerfen, die verwendet werden kann, um den Inhalt beliebiger relationaler Datenbanktabellen darzustellen und zu speichern. Die Datenstruktur sollte schnell (nicht zu gc-intensiv, Cache-freundlich) und speichereffizient sein, damit größere Tabellen in den Arbeitsspeicher passen.Datenstruktur zum Speichern von willkürlichen Datenbanktabellen
Eine speichereffiziente Lösung besteht darin, jede Spalte separat in einem primitiven Array zu speichern, aber ich mache mir Sorgen wegen der Cache-Freundlichkeit, da Elemente in derselben Zeile nicht zusammen gespeichert werden. Eine Zeile mit N Spalten führt zu N Cache-Fehlern, egal wie schmal die Spalten sind. Eine andere Lösung besteht darin, jede Zeile in einem Objektarray zu speichern, wobei jedes Element ein Feld darstellt und beim Abrufen in den richtigen Typ umgewandelt wird. Dies erfordert jedoch das Speichern numerischer Typen in der eingerahmten Form, sodass es nicht sehr speichereffizient ist. Und wahrscheinlich ist dieser Cache auch nicht effizient.
Eine andere Lösung besteht darin, die Daten jeder Zeile so in ein Byte-Array einzuordnen, wie es bei echten Datenbanken der Fall ist, wenn nur so viele Bytes wie nötig serialisiert werden. Dies ist Cache-freundlich und Speicher effizient, aber ich bin besorgt über die Kosten der Serialisierung/Deserialisierung bei jedem Zugriff.
Was ist der beste Weg?
Es ist für eine Hauptspeicherdatenbank Nebenprojekt. –