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