PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jaki jest dobry sposób na poziomy shard w postgresql

PostgreSQL umożliwia partycjonowanie na dwa różne sposoby. Jeden jest według zakresu, a drugi według listy. Oba używają dziedziczenia tabeli do partycjonowania.
Podział według zakresu, zwykle zakresu dat, jest najbardziej powszechny, ale partycjonowanie według listy może być przydatne, jeśli zmienne stanowiące partycję są statyczne i nie są przekrzywione.

Partycjonowanie odbywa się za pomocą dziedziczenia tabeli, więc pierwszą rzeczą do zrobienia jest skonfigurowanie nowych tabel podrzędnych.

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

Następnie należy użyć reguł lub wyzwalaczy, aby umieścić dane w odpowiednich tabelach. Reguły są szybsze w przypadku aktualizacji zbiorczych, wyzwalacze w przypadku pojedynczych aktualizacji, a także są łatwiejsze w utrzymaniu. Oto przykładowy wyzwalacz.

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

i funkcja wyzwalacza do wstawiania

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;

Te przykłady to uproszczone wersje dokumentacji postgresql dla łatwiejszego czytania.

Nie znam pgpool2, ale gridsql to komercyjny produkt zaprojektowany dla EnterpriseDB, komercyjnej bazy danych zbudowanej na postgresql. Ich produkty są bardzo dobre, ale nie sądzę, że będzie działać na standardowym postgreslu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy sekwencja istnieje w Postgresie (plpgsql)

  2. Funkcje okna lub wspólne wyrażenia tabelowe:policz poprzednie wiersze w zakresie

  3. Wyzwania związane ze skalowaniem bazy danych Moodle PostgreSQL

  4. Porównanie wydajności i cen PostgreSQL DigitalOcean — ScaleGrid i zarządzane bazy danych DigitalOcean

  5. Postgres odpowiednik CROSS APPLY w SQL Server