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