Mi piacerebbe progettare una struttura dati JVM (Java/Scala) che può essere utilizzata per rappresentare e archiviare il contenuto di tabelle di database relazionali arbitrarie. La struttura dei dati dovrebbe essere veloce (non troppo intensiva per il gc, cache-friendly) e efficiente in termini di memoria, quindi le tabelle più grandi possono essere contenute nella RAM.Struttura dati per archiviare tabelle di database arbitrarie
Una soluzione efficiente in termini di memoria è quella di memorizzare ogni colonna separatamente in una matrice primitiva, ma sono preoccupato per la compatibilità della cache perché gli elementi nella stessa riga non vengono memorizzati insieme. Una riga con N colonne incorrerà in N cache miss, non importa quanto siano strette le colonne.
Un'altra soluzione consiste nel memorizzare ogni riga in un array di oggetti in cui ogni elemento rappresenta un campo e viene convertito nel tipo corretto al momento del recupero, ma ciò richiede la memorizzazione di tipi numerici nella loro forma scatolata, quindi non è molto efficiente in termini di memoria. E probabilmente non è nemmeno efficiente.
Un'altra soluzione consiste nel layout dei dati di ogni riga in un array di byte nello stesso modo in cui i database reali serializzano le loro righe, utilizzando solo il numero di byte necessario. Questo è efficiente per la cache e la memoria efficiente, ma sono preoccupato per il costo di serializzazione/de-serializzazione su ogni accesso.
Qual è il modo migliore?
È per un progetto di lato del database di memoria principale. –