我的软件每30分钟运行一次cronjob,它会从Google Analytics/Social网络中提取数据并将结果插入Postgres数据库。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每天将产生大约48万条记录,每个月大约有1450万条记录。
我认为,解决办法是使用多个表,例如我可以用一个特定的表存储在一个给定月份生成的数据:stats_2015_09,stats_2015_10,stats_2015_11等
我知道Postgres的支持表分区。不过,我对这个概念并不熟悉,所以我不确定最好的办法是什么。在这种情况下,我需要分区吗?还是应该手动创建这些表?或者也许有更好的解决方案?
稍后将以各种方式查询数据,并且这些查询预计将运行得很快。
编辑:
如果我最终12-14表,每个存储10-20百万行,Postgres的应该仍然能够快速运行SELECT语句,对不对?插入不一定要超快。
关于此主题的[官方文档](http://www.postgresql.org/docs/9.4/static/ddl-partitioning.html)精辟,应该足够。 – klin
参见[pg_partman](http://pgxn.org/dist/pg_partman/doc/pg_partman.html),这是一个易于使用的扩展,提供了内置管道缺少的许多细节。 – IMSoP