【问题标题】:Efficient solution for storing many small integers存储许多小整数的有效解决方案
【发布时间】:2018-12-18 14:54:49
【问题描述】:

我将生成一个包含大约 7*10^11 个整数的数据集。每个整数将在 0-1000 之间。未压缩,这将需要大约 14 TB(短整数)的存储空间。

对于此类信息,是否有内置压缩的高效数据库解决方案?最好用二进制存储?

编辑:记录必须按顺序存储。

【问题讨论】:

  • 将这些数据放入数据库后需要做什么?即:您是否需要良好的随机读取性能/良好的切片访问/最佳写入性能,但不一定需要读取性能?
  • 还有一个数量级的数字,7e10 短裤是 1.4TB 而不是 14TB
  • 值是均匀分布在 0 还是 1000 之间,还是某些数字更有可能出现?一个数字是否可能取决于先前的数字?

标签: database storage


【解决方案1】:

你是只存储整数,还是其他?

你为什么不做一个有两列的表格:

  • 数字:0到1000
  • 计数:在集合中出现的次数

您是否有一些未说明的要求,例如必须使它们保持有序?

【讨论】:

  • 对不起,我完全忘记了这个!它们必须按顺序存放。
【解决方案2】:

10 位的存储将涵盖最多 1024 的整数,这大于您预期的最大值 1000。因此,您可以使用宽度仅为 10 的多位列。这将减少您的存储开销仅为 875 GB,而不是 14 TB。

在 Postgres 中,有一个 BIT 类型应该在这里工作。我希望大多数数据库都会有类似的东西。

【讨论】:

  • 谢谢,我会调查的。然而,我现在记得,记录必须按顺序保存(与生成时出现的顺序相同)。 Postgres 会因为这个要求而需要更多空间吗?
  • @Dreuhn SQL 表中通常没有顺序之类的东西。如果你想维持秩序,你需要另一列来做到这一点。例如,您可以存储插入的日期时间。
  • 不幸的是,这会导致使用的存储量不可接受。
猜你喜欢
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
相关资源
最近更新 更多