用于大数据的数据结构

时间:2012-06-19 05:02:45

标签: java algorithm data-structures

我有一张包含一百万行的Excel表格。每行有100列。 每行代表一个具有100个属性的类的实例,列值是这些属性的值。

这里最适合使用哪种数据结构来存储数百万的数据实例?

由于

7 个答案:

答案 0 :(得分:5)

这实际上取决于您需要如何访问此数据以及您希望优化的内容 - 例如,空间与速度。

  • 如果你想优化空间,那么你可以只序列化和压缩数据,但如果你需要读取/操作数据,这可能是没用的。
  • 如果按索引访问,最简单的就是数组数组。
  • 如果您改为使用一个对象数组,其中每个对象包含您的100个属性,您可以更好地构建代码(封装!)
  • 如果您需要查询/搜索数据,它实际上取决于查询的类型。您可能想看看BST数据结构......

答案 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不兼容)。