2009-06-15 46 views
18

什麼是好辦法,水平碎片PostgreSQL中

1. pgpool 2 
2. gridsql 

這是使用分片什麼是好辦法,水平碎片PostgreSQL中

更好的方法也可以在不改變以paritition客戶端代碼

這將是巨大的,如果有人可以共享一個簡單的教程或食譜舉例如何安裝和使用分片

回答

5

PL /代理(由Skype)是一個很好的溶膠爲此。它需要你通過函數API進行訪問,但一旦你有了它,它可以使它非常透明。

19

PostgreSQL允許以兩種不同的方式進行分區。一個是按範圍,另一個是按列表。兩者都使用表繼承來做分區。
按範圍分區(通常是日期範圍)是最常見的分區方式,但如果作爲分區的變量是靜態的並且沒有傾斜,則按列表分區可能很有用。

分區是通過表繼承完成的,因此首先要做的是設置新的子表。

CREATE TABLE measurement (
    x  int not null, 
    y  date not null, 
    z  int 
); 

CREATE TABLE measurement_y2006 ( 
    CHECK (logdate >= DATE '2006-01-01' AND logdate < DATE '2007-01-01') 
) INHERITS (measurement); 

CREATE TABLE measurement_y2007 (
    CHECK (logdate >= DATE '2007-01-01' AND logdate < DATE '2008-01-01') 
) INHERITS (measurement); 

然後要麼規則或觸發需要使用在正確的要刪除的表中的數據。 規則在批量更新上更快,單個更新觸發器更易於維護。這裏是一個示例觸發器。

CREATE TRIGGER insert_measurement_trigger 
    BEFORE INSERT ON measurement 
    FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger(); 

和觸發功能做插入

CREATE OR REPLACE FUNCTION measurement_insert_trigger() 
RETURNS TRIGGER AS $$ 
BEGIN 
    IF (NEW.logdate >= DATE '2006-01-01' 
     AND NEW.logdate < DATE '2007-01-01') THEN 
     INSERT INTO measurement_y2006 VALUES (NEW.*); 
    ELSIF (NEW.logdate >= DATE '2007-01-01' 
      AND NEW.logdate < DATE '2008-01-01') THEN 
     INSERT INTO measurement_y2006m03 VALUES (NEW.*); 
    ELSE 
     RAISE EXCEPTION 'Date out of range.'; 
    END IF; 
    RETURN NULL; 
END; 
$$ 
LANGUAGE plpgsql; 

這些例子是爲便於閱讀PostgreSQL文檔的精簡版本。

我對pgpool2並不熟悉,但是gridsql是專爲EnterpriseDB設計的商業產品,EnterpriseDB是一個建立在postgresql之上的商業數據庫。他們的產品非常好,但我認爲它不會在標準postgresl上工作。

+0

非常透徹。 +1。 – 2010-01-20 00:30:11

16

那麼,如果問題是關於分片,那麼pgpool和postgresql分區功能是無效的答案。

分區假定分區位於同一臺服務器上。 分片更爲通用,通常在數據庫分離到多個服務器時使用。分區不再可用時使用分片,例如,對於不適合單個磁盤的大型數據庫。

對於真正的分片,Skype的pl/proxy可能是最好的。

0

最佳實踐來實現的PostgreSQL羣集是使用:

  1. PostgreSQL的分區(範圍或列表)。
  2. 在幾個SSD中結合PostgreSQL分區和表空間。
  3. PostgreSQL FDW擴展。

備選:Postgres的-XL

對於拆分(LOADBALANCE),可以使用:

  1. Postgres的-BDR
  2. Postgres的-X2

注意:

集羣目的是包含大數據集並主要用於數據倉庫。

分片的目的是爲負載均衡,主要用於高交易數據庫。

** 警告 **

避免pgpool因爲太多的開銷,這將在未來引發問題。

希望這個答案將幫助你在未來的發展。