Avancerad PostgreSQL: indexering, partitionering och replikering · Lektion

Hashpartitionering för distribution

Implementera hashpartitionering för att fördela data jämnt över partitionerna, vilket är användbart för att undvika hotspots.

Lektion 1 av 411 steg

Hashpartitionering för distribution är en gratis lektion i Avancerad PostgreSQL: indexering, partitionering och replikering på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Avancerad PostgreSQL: indexering, partitionering och replikering, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Avancerad PostgreSQL: indexering, partitionering och replikering innehåller totalt 4 lektioner.

Vad är hashpartitionering?

Välkommen till hashpartitionering! Den här strategin hjälper till att fördela data jämnt över flera partitioner. I stället för att dela upp data efter intervall eller specifika värden använder den en hashfunktion.

Metoden är särskilt användbar när du vill undvika ”hot spots”, där en partition får betydligt mer data eller fler frågor än de andra.

Varför använda hashpartitionering?

Hashpartitionering passar bra för:

  • Jämn fördelning: Data sprids jämnt över partitionerna, så att ingen enskild partition blir för stor eller långsam.
  • Undvika hot spots: Användbart när partitioneringsnyckeln saknar naturlig ordning eller förutsägbar fördelning, till skillnad från tidsseriedata för intervallpartitionering.
  • Förbättrad samtidighet: Frågor kan ofta köras parallellt på olika partitioner, vilket förbättrar prestandan.

Syntax för hashpartitionering

För att använda hashpartitionering definierar du en överordnad tabell med PARTITION BY HASH (column_name). Sedan skapar du underordnade partitioner med FOR VALUES WITH (MODULUS n, REMAINDER r).

  • MODULUS (n): Det totala antalet partitioner du planerar att ha.
  • REMAINDER (r): Ett unikt tal från 0 till n-1 som anger vilken ”hink” av hashade värden partitionen ska innehålla.

Skapa en hashpartitionerad tabell

Nu skapar vi en tabell för aktivitetsloggar för användare, partitionerad efter user_id. Vi börjar med en överordnad tabell och två partitioner. Observera hur värdena för REMAINDER täcker hela MODULUS.

CREATE TABLE user_activity (
  activity_id SERIAL,
  user_id INT NOT NULL,
  activity_type VARCHAR(50),
  activity_time TIMESTAMP DEFAULT NOW()
) PARTITION BY HASH (user_id);

CREATE TABLE user_activity_0
PARTITION OF user_activity
FOR VALUES WITH (MODULUS 2, REMAINDER 0);

CREATE TABLE user_activity_1
PARTITION OF user_activity
FOR VALUES WITH (MODULUS 2, REMAINDER 1);

Så fördelas data

När du infogar data beräknar PostgreSQL ett hashvärde för user_id. Därefter utförs en modulooperation (hash_value % MODULUS). Resultatet avgör vilken partition raden tillhör.

Om MODULUS till exempel är 2:

  • Om hash_value % 2 = 0 hamnar raden i user_activity_0.
  • Om hash_value % 2 = 1 hamnar raden i user_activity_1.

Exempel på infogning av data

Nu infogar vi data i tabellen user_activity. PostgreSQL dirigerar automatiskt varje rad till rätt hashpartition baserat på user_id.

Försök att infoga olika värden för user_id och observera fördelningen!

INSERT INTO user_activity (user_id, activity_type) VALUES
(101, 'login'),
(202, 'logout'),
(303, 'view_item'),
(404, 'add_to_cart'),
(101, 'browse_category'),
(505, 'purchase');

SELECT tableoid::regclass as partition_name, *
FROM user_activity
ORDER BY user_id;

Fråga hashpartitioner

Att fråga en hashpartitionerad tabell fungerar precis som att fråga en vanlig tabell. PostgreSQLs frågeplanerare är tillräckligt smart för att använda partition pruning.

Om frågan innehåller partitioneringsnyckeln (t.ex. WHERE user_id = 101) genomsöker planeraren endast den relevanta partitionen, vilket gör frågorna betydligt snabbare.

SELECT * FROM user_activity WHERE user_id = 101;

-- To see pruning in action:
EXPLAIN SELECT * FROM user_activity WHERE user_id = 101;

Hash jämfört med andra partitionstyper

Till skillnad från intervallpartitionering (baserad på intervall) och listpartitionering (baserad på specifika värden) grupperar hashpartitionering inte data på ett logiskt sätt.

Styrkan ligger i att sprida data jämnt, vilket gör den lämplig för nycklar utan naturliga intervall (som UUID:n eller godtyckliga ID:n) och för att förhindra att vissa delar av data blir flaskhalsar.

Överväganden och underhåll

När du använder hashpartitionering:

  • Välj nyckel med omsorg: Partitioneringsnyckeln bör ge en god fördelning av hashvärden.
  • Modulus och rest: Säkerställ att alla värden för REMAINDER från 0 till MODULUS - 1 täcks av partitioner.
  • Lägga till eller ta bort partitioner: Om du ändrar MODULUS senare måste alla data hashberäknas på nytt, vilket kan vara komplicerat. Planera antalet partitioner noggrant.

Frågesport om hashpartitionering

I vilket scenario passar PostgreSQLs hashpartitionering bäst?

Sammanfattning av hashpartitionering

I den här lektionen har du lärt dig om PostgreSQLs hashpartitionering:

  • Data fördelas jämnt baserat på en hashfunktion av partitioneringsnyckeln.
  • MODULUS och REMAINDER används för att definiera partitioner.
  • Metoden är utmärkt för att undvika hot spots och förbättra prestandan för icke-sekventiella eller godtyckliga nycklar.
  • Frågor drar nytta av partition pruning när partitioneringsnyckeln används.

Hashpartitionering är ett kraftfullt verktyg för att skala databasen när en jämn datafördelning är avgörande.

Gratis att börja

Lär dig Avancerad PostgreSQL: indexering, partitionering och replikering med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
11
Lektioner
44

Vanliga frågor

Är lektionen ”Hashpartitionering för distribution” gratis?

Ja – hela texten till ”Hashpartitionering för distribution” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Avancerad PostgreSQL: indexering, partitionering och replikering, kan Ni uppgradera till CoddyKit PRO. Kursen i Avancerad PostgreSQL: indexering, partitionering och replikering innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hashpartitionering för distribution”?

Implementera hashpartitionering för att fördela data jämnt över partitionerna, vilket är användbart för att undvika hotspots. Ni övar på Avancerad PostgreSQL: indexering, partitionering och replikering med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Avancerad PostgreSQL: indexering, partitionering och replikering?

Du behöver inga förkunskaper. Utbildningen i Avancerad PostgreSQL: indexering, partitionering och replikering på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Hashpartitionering för distribution”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Avancerad PostgreSQL: indexering, partitionering och replikering-lektionen?

Ja. Varje Avancerad PostgreSQL: indexering, partitionering och replikering-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Hashpartitionering för distribution
  2. Tekniker för underpartitionering
  3. Hantera partitionerade tabeller
  4. Intervallpartitionering efter tid
← Tillbaka till Avancerad PostgreSQL: indexering, partitionering och replikering