代码之家  ›  专栏  ›  技术社区  ›  punkish

Postgresql表中的最大(可用)行数

  •  43
  • punkish  · 技术社区  · 14 年前

    http://www.postgresql.org/about/ ),可以在表中存储无限行。但是,对于可用的行数(如果有的话),什么是“经验法则”?

    背景:我想为1300万个细胞存储几十年的每日读数。结果是13m*(366 | 365)*20~9.5e10,或者95b行(实际上,大约120b行)。

    所以,使用表分区,我建立了一个主表,然后逐年继承表。将每个表的行数分成约5.2 B行。

    每行是9个小整数,两个整数,所以,26字节。再加上每行23字节的Pg开销,我们得到每行49字节。因此,每一张桌子,没有任何PK或其他指标,重量约为0.25tb。

    首先,我只创建了上述数据的一个子集,也就是说,仅为大约250000个单元格创建了这些数据。我需要做很多调整(创建适当的索引等),但是现在的性能真的很糟糕。此外,每次我需要添加更多的数据时,我将不得不删除这些键并重新创建它们。另一个好处是,一旦加载了所有内容,它将是一个只读数据库。

    有什么建议吗?还有其他分区策略吗?

    1 回复  |  直到 14 年前
        1
  •  51
  •   Konrad Garus    14 年前

    这不仅仅是“一堆调整(索引等)”。这是至关重要的,也是必须做的。

    你发布了一些细节,但我们试试看。

    您的表有多大(以GB为单位)?与总内存相比如何?你的PG设置是什么,包括共享缓冲区和有效缓存大小?这是专用服务器吗?如果您有一个250千兆的表和大约10 GB的RAM,这意味着您只能容纳4%的表。

    如果不适合RAM,请避免不惜一切代价扫描表。如果您真的需要绝对随机访问,那么它唯一可用的方法就是非常复杂的硬件。您需要一个持久的存储/RAM配置,它可以在合理的时间内读取250gb。