我想设计一个 JVM 数据结构(Java/Scala),可以用来表示和存储任意关系数据库表的内容。数据结构应该是快速的(不是太多 gc 密集型,缓存友好)和内存效率,因此更大的表可以容纳在 RAM 中。
一种节省内存的解决方案是将每一列分别存储在一个原始数组中,但我担心缓存的友好性,因为同一行中的项目没有存储在一起。无论列有多窄,具有 N 列的行都会导致 N 次缓存未命中。
另一种解决方案是将每一行存储在一个对象数组中,其中每个元素代表一个字段,并在检索时转换为正确的类型,但这需要以盒装形式存储数字类型,因此内存效率不是很高。而且它的缓存效率也可能不高。
另一种解决方案是将每一行的数据布局到一个字节数组中,就像真实数据库序列化它们的行一样,只使用必要的字节数。这是缓存友好且内存高效的,但我担心每次访问的序列化/反序列化成本。
最好的方法是什么?