什麼是好辦法,水平碎片PostgreSQL中
1. pgpool 2
2. gridsql
這是使用分片什麼是好辦法,水平碎片PostgreSQL中
更好的方法也可以在不改變以paritition客戶端代碼
這將是巨大的,如果有人可以共享一個簡單的教程或食譜舉例如何安裝和使用分片
1. pgpool 2
2. gridsql
這是使用分片什麼是好辦法,水平碎片PostgreSQL中
更好的方法也可以在不改變以paritition客戶端代碼
這將是巨大的,如果有人可以共享一個簡單的教程或食譜舉例如何安裝和使用分片
PL /代理(由Skype)是一個很好的溶膠爲此。它需要你通過函數API進行訪問,但一旦你有了它,它可以使它非常透明。
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上工作。
那麼,如果問題是關於分片,那麼pgpool和postgresql分區功能是無效的答案。
分區假定分區位於同一臺服務器上。 分片更爲通用,通常在數據庫分離到多個服務器時使用。分區不再可用時使用分片,例如,對於不適合單個磁盤的大型數據庫。
對於真正的分片,Skype的pl/proxy可能是最好的。
最佳實踐來實現的PostgreSQL羣集是使用:
備選:Postgres的-XL
對於拆分(LOADBALANCE),可以使用:
注意:
集羣目的是包含大數據集並主要用於數據倉庫。
分片的目的是爲負載均衡,主要用於高交易數據庫。
** 警告 **
避免pgpool因爲太多的開銷,這將在未來引發問題。
希望這個答案將幫助你在未來的發展。
非常透徹。 +1。 – 2010-01-20 00:30:11