【发布时间】: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