2012-01-23 116 views
2

我正在嘗試重新設計Pg數據庫以獲得更多性能。 Db適用於ERP IS,並且擁有較大的日期(四年)。每年都在單獨的數據庫中,這是一個糟糕的解決方案(建設報告是一個痛苦的??),所以我把所有四個數據庫合併成一個......但是......一些表格只是大到!爲了獲得一些性能,我決定將數據分成表格。我有2種方法來做到這一點。PostgreSQL - 查看或分區?

首先:將表格分成「arch_table」和「working_table」並使用視圖進行報告。第二:使用分區(比如說每一年的單獨分區)。

所以,我的問題是哪個方法更好?分區或一些存檔系統?

回答

8

PostgreSQL的分區實際上是一堆使用檢查約束來驗證每個分區中只有正確數據的視圖。創建一個父表和其他分區創建從主繼承:

CREATE TABLE measurement (
    city_id   int not null, 
    logdate   date not null, 
    peaktemp  int, 
    unitsales  int 
); 

CREATE TABLE measurement_y2006m02 () INHERITS (measurement); 
CREATE TABLE measurement_y2006m03 () INHERITS (measurement); 
... 
CREATE TABLE measurement_y2007m11 () INHERITS (measurement); 
CREATE TABLE measurement_y2007m12 () INHERITS (measurement); 
CREATE TABLE measurement_y2008m01 () INHERITS (measurement); 

很顯然,我省略了一些代碼,但你可以在PostgreSQL table partitioning檢查出的文檔。分區最重要的部分是確保您構建自動腳本以創建未來的新分區以及合併舊分區。

在操作上,當PostgreSQL運行你的查詢時,它看起來好像是SELECT * FROM measurement WHERE logdate BETWEEN '2006-02-13' AND '2006-02-22';優化器會出現「AH HA!我知道這裏有什麼,有一個分區,我只要看看錶measurement_y2006m02並撤回相應的數據。

隨着年齡的增長數據從主分區,你可以只刪除舊錶,否則將它們合併到一個歸檔分區。這些工作大部分都可以通過腳本實現自動化 - 您真正需要做的就是編寫一次腳本並對其進行測試。一個好處是,舊數據往往不會改變 - 許多分區不需要索引維護或抽真空。

請記住,分區主要是數據管理解決方案,可能無法提供您需要的性能優勢。調整查詢,應用索引以及檢查PostgreSQL配置(postgresql.conf,存儲配置和操作系統配置)可能會導致更高的性能提升,從而對數據進行分區。

2

您應該使用任何這些方法進行分區。這正是你需要的。

+1

你能詳細說一下嗎? – EmirZ