sql >> Databasteknik >  >> RDS >> PostgreSQL

vad är ett bra sätt att horisontell shard i postgresql

PostgreSQL tillåter partitionering på två olika sätt. En är efter intervall och den andra är efter lista. Båda använder tabellarv för att göra partition.
Partitionering efter intervall, vanligtvis ett datumintervall, är det vanligaste, men partitionering efter lista kan vara användbart om variablerna som är partitionen är statiska och inte skeva.

Partitionering görs med tabellärvning så det första du ska göra är att skapa nya underordnade 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);

Då måste antingen regler eller utlösare användas för att släppa data i rätt tabeller. Reglerna är snabbare vid massuppdateringar, utlöser på enstaka uppdateringar samt är lättare att underhålla. Här är ett exempel på trigger.

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

och triggerfunktionen för att infoga

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;

Dessa exempel är förenklade versioner av postgresql-dokumentationen för enklare läsning.

Jag är inte bekant med pgpool2, men gridsql är en kommersiell produkt designad för EnterpriseDB, en kommersiell databas som är byggd ovanpå postgresql. Deras produkter är väldigt bra, men jag tror inte att det kommer att fungera på standard postgresl.




  1. Hur LOG10() fungerar i MariaDB

  2. MySQL Jämför databaser

  3. Slinga över resultatuppsättningar i MySQL

  4. Skillnaden mellan en användare och en inloggning i SQL Server