2009-06-15 27 views
18

gì là một cách tốt để mảnh ngang trong postgresql

1. pgpool 2 
2. gridsql 

mà là một cách tốt hơn để sử dụng shardinggì là một cách tốt để mảnh ngang trong postgresql

cũng là nó có thể paritition mà không thay đổi mã khách hàng

Nó sẽ là tuyệt vời nếu một số ai có thể chia sẻ một hướng dẫn đơn giản hoặc Cookbook ví dụ về cách cài đặt và sử dụng sharding

Trả lời

5

pl/proxy (bằng Skype) là một sol tốt ution cho việc này. Nó đòi hỏi quyền truy cập của bạn để được thông qua một API chức năng, nhưng một khi bạn có nó có thể làm cho nó khá minh bạch.

19

PostgreSQL cho phép phân vùng theo hai cách khác nhau. Một là phạm vi và khác là theo danh sách. Cả hai sử dụng bảng kế thừa để làm phân vùng.
Phân vùng theo phạm vi, thường là phạm vi ngày, là phổ biến nhất, nhưng phân vùng theo danh sách có thể hữu ích nếu các biến là phân vùng tĩnh và không bị lệch.

Phân vùng được thực hiện với kế thừa bảng nên điều đầu tiên cần làm là thiết lập bảng con mới.

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); 

Sau đó, quy tắc hoặc trình kích hoạt cần được sử dụng để xóa dữ liệu trong bảng chính xác. Quy tắc nhanh hơn về cập nhật hàng loạt, trình kích hoạt trên các bản cập nhật đơn lẻ cũng như dễ bảo trì hơn. Đây là trình kích hoạt mẫu.

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

và chức năng kích hoạt để làm các việc chèn

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; 

Những ví dụ này là phiên bản đơn giản hóa của các tài liệu postgresql cho việc đọc dễ dàng hơn.

Tôi không quen thuộc với pgpool2, nhưng gridsql là một sản phẩm thương mại được thiết kế cho EnterpriseDB, một cơ sở dữ liệu thương mại được xây dựng trên đầu trang của postgresql. Sản phẩm của họ rất tốt, nhưng tôi không nghĩ rằng nó sẽ hoạt động trên postgresl tiêu chuẩn.

+0

Rất kỹ lưỡng. +1. –

+2

GridSQL là GPL và nó hoạt động theo tiêu chuẩn postgres. – David

16

Vâng, nếu câu hỏi là về sharding, thì tính năng phân vùng pgpool và postgresql không phải là câu trả lời hợp lệ.

Phân vùng giả định các phân vùng nằm trên cùng một máy chủ. Sharding là tổng quát hơn và thường được sử dụng khi cơ sở dữ liệu được phân chia trên một số máy chủ. Sharding được sử dụng khi không thể phân vùng nữa, ví dụ: đối với cơ sở dữ liệu lớn không thể vừa với một đĩa đơn.

Để có sự cố thực sự thì pl/proxy của Skype có lẽ là tốt nhất.

0

thực hành tốt nhất để đạt được PostgreSQL cụm đang sử dụng:

  1. PostgreSQL phân vùng (phạm vi hoặc danh sách).
  2. Kết hợp phân vùng và vùng bảng PostgreSQL trong một số SSD.
  3. Tiện ích mở rộng PostgreSQL FDW.

Alternative: Postgres-XL

Đối với sharding (loadbalance), bạn có thể sử dụng:

  1. Postgres-BDR
  2. Postgres-X2

Lưu ý:

Mục đích cụm có chứa tập dữ liệu lớn và chủ yếu cho kho dữ liệu.

Mục đích mục đích là để cân bằng tải và chủ yếu được sử dụng cho giao dịch cao cơ sở dữ liệu.

** CẢNH BÁO **

tránh pgpool bởi vì quá nhiều chi phí đó sẽ dẫn vấn đề trong tương lai.

Hy vọng câu trả lời này sẽ giúp bạn phát triển trong tương lai.

Các vấn đề liên quan