我的软件每30分钟运行一个cronjob,从Google Analytics / 社交网络中获取数据并将结果插入到Postgres DB中。
数据看起来像这样:
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语句,对吗?插入操作不必非常快。