Je souhaite concevoir une structure de données JVM (Java/Scala) pouvant être utilisée pour représenter et stocker le contenu de tables de bases de données relationnelles arbitraires. La structure des données doit être rapide (pas trop gourmande en ressources, compatible avec le cache) et efficace en termes de mémoire, afin que les plus grandes tables puissent entrer dans la RAM. Une solution efficace en mémoire consiste à stocker chaque colonne séparément dans un tableau primitif, mais je suis préoccupé par la convivialité de la mémoire cache car les éléments d'une même ligne ne sont pas stockés ensemble. Une rangée avec N colonnes entraînera N échecs de cache, peu importe la taille des colonnes. Une autre solution consiste à stocker chaque ligne dans un tableau d'objets où chaque élément représente un champ et est transtypé au type correct lors de la récupération, mais cela nécessite de stocker des types numériques sous forme de boîte, donc pas très efficace en mémoire. Et ce n'est probablement pas ce cache efficace non plus.Structure de données pour stocker des tables de base de données arbitraires
Une autre solution consiste à disposer les données de chaque ligne dans un tableau d'octets de la même manière que les bases de données réelles sérialisent leurs lignes, en utilisant seulement autant d'octets que nécessaire. Ceci est facile à mettre en cache et efficace en termes de mémoire, mais je suis préoccupé par le coût de la sérialisation/désérialisation à chaque accès.
Quelle est la meilleure façon?
Il s'agit d'un projet parallèle de base de données de mémoire principale. –