PostgreSQL:自动分区表

3
我有一个巨大的数据库,其中保存了一对数值(A,B),每个数值范围从0到10000,以浮点数存储。

e.g.,

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

由于存储这些键值对的PostgreSQL表已经变得非常大,我决定将其分割成继承子表。我打算创建100个这样的表,每个表存储一个1000x1000的范围。
问题在于,这些数字往往以附近的大块出现。这意味着在未来,有些表将几乎为空,而有些表将占据数据库的很大一部分。不幸的是,未来键值对的分布尚不确定。
我正在寻找一种自动重新分割表的方法。这意味着如果某个子表保存的键值对超过特定数量,它将自动分割成四个子子表,依此类推。
我的问题是:
  • 在PostgreSQL 8.3中是否支持递归分区和继承?索引和查询计划能否理解它?
  • 当子表增长过大时,最好的拆分方式是什么?需要指出的是,这不是一个实时数据库,因此每周几个小时的停机时间完全可以接受。
  • 更新:我可能会将继承表拆分成四个表,以替换原始表(即直接从主表继承)。我将避免有多层继承,但会有数千个表直接从一个表继承。这种方法的优缺点是什么?

提前感谢您,

亚当


“大”是什么,你想解决什么问题?分区在SELECT语句有意义时非常好用。它也可能对于删除完整表中的所有数据很方便,但这不是你每天都要做的事情。 - Frank Heikens
a. 数亿条记录; b. 它确实是为SELECT查询而设计的,未来将数据库分割到多台计算机上会非常方便。 - Adam Matan
1个回答

2
首先,如果表已经很大了,你确定分布对未来的估计不可靠吗?今天做的直方图会不会无用?
我认为即使递归继承是可能的,它也会给模型增加不必要的复杂性,对于维护和规划者来说都是如此。
当你将其分区到100个表时,我预计你将自动生成分区和插入/更新规则/触发器。
最简单的方法可能是将数据从一个分区复制到临时表中,删除它,在其位置创建4个分区,并将数据复制回去。我认为这个操作不会比递归分区更困难。
你还可以在PostgreSQL邮件列表上询问人们。他们是你可能得到的最好的专家,包括原始开发人员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接