我的軟件每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