PostgreSQL:自动分区表

时间:2010-03-14 13:52:59

标签: algorithm postgresql database-partitioning

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

如,

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

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

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

我正在寻找一种自动重新分区的方法。这意味着如果某个子表保存的对数超过特定数量,则会自动将其分为四个子表,依此类推。

我的问题是:

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

提前致谢,

亚当

1 个答案:

答案 0 :(得分:2)

首先,如果表格已经很大,您确定分配对于未来的估算是不可靠的吗?今天完成的直方图会无用吗?

我认为即使递归继承是可能的,它也会为维护和规划者增加不必要的复杂性。

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

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

你也可以在PostgreSQL邮件列表上询问人们。他们是您可能获得的最好的专家,包括原创开发人员。