Me gustaría diseñar una estructura de datos JVM (Java/Scala) que pueda usarse para representar y almacenar los contenidos de tablas de bases de datos relacionales arbitrarias. La estructura de datos debe ser rápida (no demasiado intensiva en gc, compatible con caché) y eficiente desde el punto de vista de la memoria, por lo que las tablas más grandes pueden caber en la memoria RAM.Estructura de datos para almacenar tablas de bases de datos arbitrarias
Una solución que ahorra memoria es almacenar cada columna por separado en una matriz primitiva, pero me preocupa la compatibilidad con la memoria caché porque los elementos en la misma fila no se almacenan juntos. Una fila con N columnas incurrirá en N fallas de caché, sin importar cuán estrechas sean las columnas.
Otra solución es almacenar cada fila en una matriz de objetos donde cada elemento representa un campo y se convierte al tipo correcto en la recuperación, pero esto requiere almacenar tipos numéricos en su forma encuadrada, por lo que no es muy eficiente en la memoria. Y probablemente tampoco sea ese caché eficiente.
Otra solución es diseñar los datos de cada fila en una matriz de bytes de la misma forma que las bases de datos reales serializan sus filas, usando solo tantos bytes como sea necesario. Es amigable con la memoria caché y eficiente en la memoria, pero me preocupa el costo de la serialización/deserialización en cada acceso.
¿Cuál es la mejor manera?
Es para un proyecto lateral de la base de datos de memoria principal. –