3

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

什么数据结构最适合在这里使用,存储数百万个数据实例?

谢谢

4

7 回答 7

5

这实际上取决于您需要如何访问这些数据以及您想要优化什么——比如空间与速度。

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

一百万行有 100 个值,其中每个值使用 8 个字节的内存只有 800 MB,如果它们是 64 位,它将很容易适合大多数 PC esp 的内存。尽量使每列的类型尽可能紧凑。

一种更有效的数据存储方式是按列。即每个列都有一个原始数据类型的数组。我怀疑你甚至不需要这样做。

如果您有更多行,例如数十亿行,您可以使用堆外内存,即内存映射文件和直接内存。这可以有效地存储比主内存更多的数据,同时保持堆相对较小。(例如,100 GB 的堆外空间和 1 GB 的堆空间)

于 2012-06-19T07:19:41.943 回答
3

如果要将所有数据存储在内存中,则可以使用TableGuava 的一种实现,通常ArrayTable用于密集表或HashBasedTable大多数单元格预计为空的情况。否则,数据库(可能带有一些缓存系统,如 ehcache 或 terracota)将是更好的选择。

于 2012-06-19T05:20:54.707 回答
1

您最好的选择是将它们存储在实际数据库中的表中,例如 Postgres 等。这些已针对您正在谈论的内容进行了优化!

于 2020-07-10T17:33:12.253 回答
0

最好的选择是使用可以存储大量数据且速度足够快以实现更快访问的数据库,例如 ORACLE、MSSQL、MYSQL 和任何其他快速且可以存储大量数据的数据库。

于 2012-06-19T07:03:33.493 回答
0

如果你真的有一百万行或更多行,每行有 100 个值,我怀疑它会全部适合你的记忆......或者有什么特殊原因吗?例如使用数据库性能不佳?

由于您希望进行随机访问,因此我会使用像 hibernate 这样的持久性提供程序和您喜欢的一些数据库(例如 mysql)。

但请注意,使用持久性提供程序的方式对性能有很大影响。例如,您应该使用批量插入(与自动生成的 ID 不兼容)。

于 2012-06-19T07:14:43.287 回答
0

在那种数据中,我更喜欢使用 MYSQL 数据库,因为它更快并且可以积累这样的大文件。

于 2012-06-19T06:19:14.093 回答