sql >> Database teknologi >  >> RDS >> PostgreSQL

hvad er en god måde at horisontal shard i postgresql

PostgreSQL tillader partitionering på to forskellige måder. Den ene er efter rækkevidde, og den anden er efter liste. Begge bruger tabelarv til at udføre partitionering.
Partitionering efter interval, normalt et datointerval, er det mest almindelige, men partitionering efter liste kan være nyttig, hvis de variabler, der er partitionen, er statiske og ikke skæve.

Partitionering udføres med tabelnedarvning, så den første ting at gøre er at oprette nye underordnede tabeller.

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

Så skal enten regler eller triggere bruges til at droppe dataene i de korrekte tabeller.Regler er hurtigere på masseopdateringer, triggere på enkelte opdateringer samt er nemmere at vedligeholde. Her er en prøveudløser.

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

og triggerfunktionen til at udføre indsættelsen

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;

Disse eksempler er forenklede versioner af postgresql-dokumentationen for lettere læsning.

Jeg er ikke bekendt med pgpool2, men gridsql er et kommercielt produkt designet til EnterpriseDB, en kommerciel database, der er bygget oven på postgresql. Deres produkter er meget gode, men jeg tror ikke, at det vil fungere på standard postgresl.




  1. Hvordan bruger man Partition By eller Max?

  2. Tilføj en fremmednøgle til en eksisterende tabel i SQLite

  3. Sådan opdeles forespørgselsvindue i SQL Server Management Studio (SSMS) - SQL Server / TSQL selvstudie del 13

  4. flyt data fra en tabel til en anden, postgresql edition