PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

какъв е добър начин за хоризонтален шард в postgresql

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, търговска база данни, която е изградена върху postgresql. Продуктите им са много добри, но не мисля, че ще работи на стандартен postgresl.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на pt-pg-summary Percona Toolkit за PostgreSQL

  2. Как да инсталирам само клиентските инструменти за PostgreSQL на Windows?

  3. Как да инсталирате Python пакет на Linux, така че да бъде намерен от вече работещото разширение на PostgreSQL 13 plpython3u?

  4. [Видео] Интегриране на данни с PostgreSQL

  5. Как да изчислим разликата между две времеви марки в PostgreSQL