我有一张包含一百万行的Excel表格。每行有100列。 每行代表一个具有100个属性的类的实例,列值是这些属性的值。
这里最适合使用哪种数据结构来存储数百万的数据实例?
由于
答案 0 :(得分:5)
这实际上取决于您需要如何访问此数据以及您希望优化的内容 - 例如,空间与速度。
答案 1 :(得分:3)
如果要将所有数据存储在内存中,可以使用Guava的Table
实现之一,对于密集表通常为ArrayTable
,如果预期大多数单元,则为HashBasedTable
是空的。否则,数据库(可能带有一些缓存系统,如ehcache或terracota)将是一个更好的镜头。
答案 2 :(得分:3)
一百万行有100个值,其中每个值使用8个字节的内存只有800 MB,如果它们是64位,很容易适应大多数PC esp的内存。尽量使每列的类型尽可能紧凑。
更有效的存储数据的方法是按列。即,每个列都有一个具有基本数据类型的数组。我怀疑你甚至不需要这样做。
如果您还有更多行,例如数十亿,你可以使用off堆内存,即内存映射文件和直接内存。这可以有效地存储比您拥有主内存更多的数据,同时保持堆相对较小。 (例如,堆栈中有100 GB的GB堆,堆中有1 GB)
答案 3 :(得分:1)
您最好的选择是将它们存储在实际数据库的表中,例如Postgres等。这些经过优化以适合您所讨论的内容!
答案 4 :(得分:0)
在那种数据中,我更喜欢使用MYSQL数据库,因为它更快,可以累积像这样的大文件。
答案 5 :(得分:0)
最好的选择是使用一个可以存储大量数据的数据库,并且速度足够快,以便更快地访问,如ORACLE,MSSQL,MYSQL以及任何其他快速且可以存储大量数据的数据库。
答案 6 :(得分:0)
如果你真的拥有一百万行或更多,每行有100个值,我怀疑它是否都适合你的记忆......或者它有特殊原因吗?例如,使用数据库的性能不佳?
由于你想要随机访问,我会使用像hibernate这样的持久性提供程序和你喜欢的某个数据库(例如mysql)。
但请注意,使用持久性提供程序的方式对性能有很大影响。例如,您应该使用批量插入(与自动生成的ID不兼容)。