3

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

例如,

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

由于存储这些对的 PostgreSQL 表变得非常大,我决定将其划分为继承子表。我打算创建 100 个这样的表,每个表存储 1000x1000 的范围。

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

我正在寻找一种自动重新分区我的表的方法。这意味着如果某个子表包含的pairs超过特定数量,它将自动划分为四个子子表,依此类推。

我的问题是:

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

提前致谢,

亚当

4

1 回答 1

2

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

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

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

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

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

于 2010-03-14T15:11:30.723 回答