【问题标题】:PostgreSQL: Auto-partition a tablePostgreSQL:自动分区表
【发布时间】:2010-03-14 13:52:59
【问题描述】:

我有一个庞大的数据库,其中包含成对的数字 (A,B),每个数字的范围从 0 到 10,000 并存储为浮点数。

例如,

(1, 9984.4), (2143.44, 124.243), (0.55, 0), ...

由于存储这些对的 PostgreSQL 表变得非常大,我决定partition it into inheriting sub-tables。我打算创建 100 个这样的表,每个存储范围为 1000x1000。

问题在于,这些数字往往是附近数字的大块。这意味着在未来,一些表将几乎是空的,而一些表将占据数据库的很大一部分。不幸的是,未来对的分布尚不清楚。

我正在寻找一种自动重新分区表的方法。也就是说,如果某个子表持有的pairs数量超过了特定数量,就会自动划分为4个子子表,以此类推。

我的问题是:

  • 在 PostgreSQL 8.3 中是否可以进行递归分区和继承?索引和查询计划会理解它吗?
  • 一旦子表变得太大,拆分子表的最佳方法是什么?我应该指出,这不是一个实时数据库,因此每周停机几个小时是完全可以接受的。
  • 更新:我可能会将继承表拆分为四个表,以替换原来的表(即直接从主表继承)。我将避免拥有多于一级的继承,但如果表直接从一张表继承,则会有数千个。这种方法的优缺点是什么?

提前致谢,

亚当

【问题讨论】:

  • 什么是“大”,您要解决什么问题?分区很棒,但只有当它对您的 SELECT 语句有意义时。删除完整表中的所有数据也可能很方便,但这不是您每天都要做的事情。
  • 一个。数亿条记录;湾。它确实是为 SELECT 查询而设计的,而且将来在多台计算机之间拆分数据库真的很容易。

标签: algorithm postgresql database-partitioning


【解决方案1】:

首先,如果表格已经很大,您确定分布对于未来的估计不可靠吗?今天做的直方图会没用吗?

我认为即使递归继承是可能的,它也会给模型增加不必要的复杂性,无论是维护还是规划。

当您将其分区为 100 个表时,我希望您会自动生成分区并插入/更新规则/触发器。

最简单的方法可能是将数据从一个分区复制到一个临时表,删除它,在其位置创建 4 个分区,然后将数据复制回来。我认为这个操作不会比递归分区更难。

您也可以通过 PostgreSQL 邮件列表向人们询问。他们是您能找到的最好的专家,包括原始开发人员。

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2012-05-06
    • 2015-08-14
    相关资源
    最近更新 更多