Geavanceerd PostgreSQL: indexering, partitionering en replicatie · Les

Praktijkgerichte casestudy's

Bestudeer praktische voorbeelden en leer van succesvolle implementaties van indexering en partitionering in grootschalige systemen.

Les 3 van 411 stappen

Praktijkgerichte casestudy's is een gratis Geavanceerd PostgreSQL: indexering, partitionering en replicatie-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Geavanceerd PostgreSQL: indexering, partitionering en replicatie. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat in totaal 4 lessen.

Indexering en partitionering in de praktijk

Welkom bij onze laatste les! We hebben indexen en partitionering afzonderlijk geleerd. Nu bekijken we hoe deze krachtige functies worden gecombineerd in grootschalige systemen uit de praktijk.

We bestuderen praktische casestudy's om te zien hoe databasearchitecten deze strategieën toepassen om complexe uitdagingen op het gebied van prestaties en beheer op te lossen.

Casestudy 1: bestellingen in e-commerce

Stel u een populair e-commerceplatform voor dat dagelijks miljoenen bestellingen verwerkt. De tabel orders groeit snel en bevat een transactiegeschiedenis van meerdere jaren.

  • Uitdaging: Query's voor recente bestellingen zijn snel, maar historische rapporten of zoekopdrachten van de klantenservice naar oude bestellingen zijn erg traag.
  • Probleem: De ene enorme tabel orders is moeilijk te onderhouden en te back-uppen, en de indexen worden onbeheersbaar groot.

Oplossing: bereikpartitionering op datum

Om de uitdaging van de e-commerceomgeving aan te pakken, besluit het team bereikpartitionering op de kolom order_date te implementeren. Hierdoor wordt de grote tabel opgesplitst in kleinere, beter beheersbare partities, meestal per maand of per jaar.

Query's voor recente gegevens scannen alleen de nieuwste partities, waardoor veelgebruikte bewerkingen aanzienlijk sneller worden. Oudere partities kunnen worden gearchiveerd of minder vaak worden geraadpleegd.

CREATE TABLE orders (
    order_id BIGINT NOT NULL,
    customer_id INT NOT NULL,
    order_date DATE NOT NULL,
    total_amount NUMERIC(10, 2)
) PARTITION BY RANGE (order_date);

CREATE TABLE orders_y2023m01 PARTITION OF orders
    FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');

Oplossing: lokale indexen voor bestellingen

Na het instellen van de partitionering worden indexen lokaal op elke partitie aangemaakt. Dit betekent dat elke partitie een eigen kleinere index heeft in plaats van één enorme index voor de hele tabel.

  • Voordeel: Kleinere indexen zijn sneller te doorzoeken en bij te werken.
  • Voordeel: Query's die op een specifieke partitie gericht zijn, bijvoorbeeld op klant-ID binnen een maand, gebruiken alleen de index van die partitie.
CREATE INDEX idx_orders_y2023m01_customer_id
ON orders_y2023m01 (customer_id);

CREATE INDEX idx_orders_y2023m01_order_id
ON orders_y2023m01 (order_id);

Resultaat van de e-commercecasestudy

De combinatie van bereikpartitionering en lokale indexen verbeterde de prestaties van het e-commerceplatform aanzienlijk:

  • De querytijden voor recente gegevens daalden met 80%.
  • Databaseonderhoudstaken, zoals VACUUM, werden veel sneller uitgevoerd op kleinere partities.
  • Oude gegevens konden efficiënt worden gearchiveerd of verwijderd door oude partities eenvoudig los te koppelen en te verwijderen.

Casestudy 2: IoT-sensorgegevens

Vervolgens bekijken we een Internet of Things-platform (IoT) dat sensorgegevens van miljoenen apparaten verzamelt. Elk apparaat stuurt om de paar seconden metingen, wat leidt tot petabytes aan tijdreeksgegevens.

  • Uitdaging: Gegevens met zeer hoge snelheden opnemen en uiteenlopende analytische query's uitvoeren, zoals 'alle apparaten vinden die in regio Y gedurende de afgelopen week een temperatuur > X rapporteerden'.
  • Probleem: Standaard B-tree-indexen op tijdstempels zijn voor zulke hoeveelheden te groot en te traag om bij te werken.

Oplossing: hybride partitionering

Voor IoT-gegevens is een hybride partitioneringsstrategie vaak ideaal. Het team implementeerde het volgende:

  1. Bereikpartitionering op tijd: De primaire partitiesleutel is timestamp, waarbij gegevens per dag of uur worden verdeeld.
  2. Lijstpartitionering op apparaattype: Binnen elke tijdsgebonden partitie worden de gegevens verder gepartitioneerd op device_type, bijvoorbeeld 'sensor', 'actuator' en 'gateway'.

Hierdoor kunnen partities efficiënt worden uitgesloten op basis van zowel tijd als apparaateigenschappen.

CREATE TABLE sensor_data (
    timestamp TIMESTAMPTZ NOT NULL,
    device_id INT NOT NULL,
    device_type TEXT NOT NULL,
    reading_value NUMERIC(10, 2)
) PARTITION BY RANGE (timestamp);

CREATE TABLE sensor_data_2024_01_01 PARTITION OF sensor_data
    FOR VALUES FROM ('2024-01-01 00:00:00') TO ('2024-01-02 00:00:00')
    PARTITION BY LIST (device_type);

Oplossing: gespecialiseerde indexen

Om de uiteenlopende IoT-query's te verwerken, werd een combinatie van gespecialiseerde indexen gebruikt:

  • BRIN-index op tijdstempel: Voor bereikquery's op tijd is BRIN (Block Range Index) zeer effectief bij natuurlijk geordende gegevens en neemt deze weinig ruimte in beslag.
  • B-Tree-index op apparaat-ID: Lokale B-tree-indexen op device_id binnen elke subpartitie zorgen voor snelle zoekopdrachten naar specifieke apparaten.
  • GIN-index voor tags: Als apparaten bijbehorende tags hebben, bijvoorbeeld tags JSONB, kan een GIN-index query's versnellen die binnen deze JSONB-velden zoeken.
CREATE INDEX brin_idx_sensor_data_time
ON sensor_data USING BRIN (timestamp);

CREATE INDEX btree_idx_sensor_data_device_id
ON sensor_data_2024_01_01_sensor (device_id);

-- Example for a JSONB column
-- CREATE INDEX gin_idx_sensor_data_tags
-- ON sensor_data USING GIN (tags jsonb_path_ops);

Resultaat van de IoT-casestudy

De gecombineerde strategie voor IoT-gegevens leverde aanzienlijke verbeteringen op:

  • De gegevensopnamesnelheid bleef tijdens piekbelasting op niveau zonder prestatieverlies.
  • Analytische query's over grote tijdsbereiken werden geoptimaliseerd door partitiepruning en BRIN-indexen.
  • Zoekopdrachten naar specifieke apparaten of op tags gebaseerde zoekopdrachten werden zeer efficiënt dankzij lokale B-tree- en GIN-indexen.

Deze aanpak bood zowel een hoge schrijfcapaciteit als flexibele leesprestaties.

Pas je kennis toe

Welke aspecten zijn op basis van de casestudy's van doorslaggevend belang bij het ontwerpen van een indexerings- en partitioneringsstrategie voor grootschalige PostgreSQL-databases?

Terugblik: lessen uit de casestudy's

In deze les hebben we twee praktijkvoorbeelden bekeken die de kracht laten zien van het combineren van PostgreSQL-indexering en partitionering:

  • E-commerce: Er is range-partitionering op basis van datum gebruikt, met lokale B-tree-indexen voor historische ordergegevens. Dit verbeterde de querysnelheid en het beheer.
  • IoT-gegevens: Er is hybride partitionering toegepast (range op basis van tijd, list op basis van apparaattype), in combinatie met gespecialiseerde indexen zoals BRIN, B-tree en GIN voor omvangrijke, uiteenlopende query's.

Deze voorbeelden laten zien dat de beste strategie vaak bestaat uit een doordachte combinatie van technieken, afgestemd op je specifieke gegevens en werklast.

Gratis beginnen

Leer Geavanceerd PostgreSQL: indexering, partitionering en replicatie met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
11
Lessen
44

Veelgestelde vragen

Is de les “Praktijkgerichte casestudy's” gratis?

Ja — de volledige tekst van “Praktijkgerichte casestudy's” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat in totaal 4 lessen.

Wat leer ik in “Praktijkgerichte casestudy's”?

Bestudeer praktische voorbeelden en leer van succesvolle implementaties van indexering en partitionering in grootschalige systemen. Je oefent met Geavanceerd PostgreSQL: indexering, partitionering en replicatie door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Geavanceerd PostgreSQL: indexering, partitionering en replicatie te beginnen?

Ervaring vooraf is niet nodig. Geavanceerd PostgreSQL: indexering, partitionering en replicatie op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Praktijkgerichte casestudy's”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Geavanceerd PostgreSQL: indexering, partitionering en replicatie?

Ja. Elke les over Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Indexen schalen met partitionering
  2. Index- en partitioneringsstrategieën kiezen
  3. Praktijkgerichte casestudy's
  4. BRIN-indexen voor grote gepartitioneerde tabellen
← Terug naar Geavanceerd PostgreSQL: indexering, partitionering en replicatie