【发布时间】:2015-12-24 03:50:16
【问题描述】:
我的软件每 30 分钟运行一次 cronjob,它从 Google Analytics(分析)/社交网络中提取数据并将结果插入 Postgres 数据库。
数据如下:
url text NOT NULL,
rangeStart timestamp NOT NULL,
rangeEnd timestamp NOT NULL,
createdAt timestamp DEFAULT now() NOT NULL,
...
(various integer columns)
由于一个查询返回 10 000 多个项目,因此将这些数据存储在单个表中显然不是一个好主意。按照这个速度,cronjob 每天将生成约 480 000 条记录,每月将生成约 1450 万条记录。
我认为解决方案是使用多个表,例如我可以使用特定表来存储给定月份生成的数据:stats_2015_09、stats_2015_10、stats_2015_11 等。
我知道 Postgres 支持表分区。但是,我对这个概念很陌生,所以我不确定最好的方法是什么。在这种情况下我需要分区,还是应该手动创建这些表?或者也许有更好的解决方案?
稍后将通过各种方式查询数据,并且这些查询预计会运行得很快。
编辑:
如果我最终得到 12-14 个表,每个表存储 10-20 百万行,Postgres 应该仍然能够快速运行 select 语句,对吧?插入不必非常快。
【问题讨论】:
-
The official documentation 在这个问题上很精辟,应该足够了。
-
另见pg_partman,这是一个易于使用的扩展,提供了许多内置管道所缺乏的细节。
标签: postgresql database-partitioning