use*_*996 3 postgresql database-partitioning
我的软件每30分钟运行一次cronjob,从Google Analytics/Social网络中提取数据并将结果插入到Postgres数据库中.
数据如下所示:
url text NOT NULL,
rangeStart timestamp NOT NULL,
rangeEnd timestamp NOT NULL,
createdAt timestamp DEFAULT now() NOT NULL,
...
(various integer columns)
Run Code Online (Sandbox Code Playgroud)
由于一个查询返回10 000多个项目,因此将这些数据存储在单个表中显然不是一个好主意.按此速度,cronjob每天将产生约48万条记录,每月产生约1450万条记录.
我认为解决方案是使用几个表,例如我可以使用特定的表来存储给定月份生成的数据:stats_2015_09,stats_2015_10,stats_2015_11等.
我知道Postgres支持表分区.但是,我对这个概念不熟悉,所以我不确定最好的方法是什么.在这种情况下我是否需要分区,还是应该手动创建这些表?或者也许有更好的解决方案?
稍后将以各种方式查询数据,并且这些查询预计会快速运行.
编辑:
如果我最终得到12-14个表,每个表存储10-20百万行,Postgres应该仍能快速运行select语句,对吧?插入不必非常快.
这个评论太长了.
在各种情况下,分区是个好主意.想到的两个是:
WHERE子句,可以很容易地映射到一个或少数几个分区.如果不了解您想要运行的查询类型,很难说分区是否是个好主意.
我想我可以说将数据拆分成不同的表是一个坏主意,因为这是一个维护噩梦:
无论如何,开始的地方是Postgres关于分区的文档,就在这里.我应该注意到Postgres的实现比其他数据库更难以实现,因此您可能需要查看MySQL或SQL Server的文档以了解它正在做什么.
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |