Citus og distribueret Postgres
Brug Citus til at omdanne Postgres til en distribueret database med samplacerede tabeller og referencetabeller.
Citus og distribueret Postgres er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad er Citus?
Citus er en PostgreSQL-udvidelse, der omdanner en klynge af PG-servere til en distribueret database. Du udfører SELECT/INSERT mod koordinatoren, og Citus dirigerer gennemsigtigt forespørgslen til de rigtige workershards.
Arkitektur
To roller:
- Koordinator — modtager forespørgsler, indeholder klyngens metadata og dirigerer eller aggregerer
- Workers — indeholder shard-data og udfører de faktiske forespørgsler
Opsætning
Installér udvidelsen på koordinatoren og workers, og registrér derefter workers:
CREATE EXTENSION citus;
-- On the coordinator, add worker nodes:
SELECT * FROM master_add_node('worker1', 5432);
SELECT * FROM master_add_node('worker2', 5432);Distribuerede tabeller
Markér en tabel som distribueret efter en kolonne:
CREATE TABLE orders (
id BIGSERIAL,
user_id BIGINT NOT NULL,
total NUMERIC(10,2),
...
);
SELECT create_distributed_table('orders', 'user_id');
-- Citus splits orders into shards by hash(user_id).Referencetabeller
Små tabeller, der replikeres til hver worker — lokale JOINs:
CREATE TABLE countries (id INT, name TEXT);
SELECT create_reference_table('countries');
-- Every worker has a full copy of countries.Samplacering
Tabeller med den samme distributionskolonne er samplacerede: rækker for et bestemt user_id ligger altid på den samme worker. JOINs på user_id forbliver lokale:
SELECT create_distributed_table('orders', 'user_id');
SELECT create_distributed_table('events', 'user_id', colocate_with => 'orders');Forespørgsler for én tenant
Citus dirigerer forespørgsler filtreret efter user_id til den rigtige worker — hurtigt:
SELECT * FROM orders WHERE user_id = 42;
-- Goes to one worker shard, returns in milliseconds.Distribuerede aggregeringer
Citus paralleliserer COUNT/SUM på tværs af workers:
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Each worker computes locally; coordinator concatenates.Rebalancering
Tilføj en worker, og rebalancér shards:
SELECT * FROM citus_add_node('worker3', 5432);
SELECT * FROM rebalance_table_shards('orders');
-- Citus moves some shards onto the new worker.Begrænsninger
- Transaktioner på tværs af ikke-samplacerede tabeller er begrænsede
- Nogle PostgreSQL-funktioner gælder ikke for distribuerede tabeller
- Skemaændringer distribueres, men kræver koordinering
Citus Cloud / Azure
Citus blev opkøbt af Microsoft — er nu en del af Azure Database for PostgreSQL — Hyperscale (Citus). Det er stadig open source.
Alternativer
- YugabyteDB — distribueret og PG-kompatibel
- CockroachDB — distribueret og kompatibel med Postgres-wireprotokollen
- Pgvector / TimescaleDB — specialiserede løsninger til én node
Hvornår Citus er det bedste valg
Multitenant-SaaS, hvor hver tenants forespørgsler er isoleret. Tidsserier, hvor du opdeler efter tenant og tid. Analyse med parallel aggregering.
Opsummering
Citus gør Postgres distribueret.
- Koordinator og workers
- Distribueret efter kolonne; samplaceret for lokale JOINs
- Referencetabeller til delte dimensioner
- Bedste anvendelse: multitenant-SaaS
Hurtigt tjek
Hvad er fordelen ved at "samplacere" to distribuerede tabeller efter den samme nøgle i Citus?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “Citus og distribueret Postgres” gratis?
Ja — hele teksten til “Citus og distribueret Postgres” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Citus og distribueret Postgres”?
Brug Citus til at omdanne Postgres til en distribueret database med samplacerede tabeller og referencetabeller. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Citus og distribueret Postgres”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Strategier til sharding: Range, hash og directory
- Forespørgsler på tværs af shards: Det svære problem
- Citus og distribueret Postgres
- Hvornår De IKKE skal bruge sharding