Tabelpartitie

Databaseontwerp

Lis Sulmont

Curriculum Manager

Waarom partitioneren?

Tabellen groeien (100en GB / TB)

Probleem: queries/updates worden trager

Waarom: bv. indexen passen niet in geheugen

Oplossing: splits tabel in kleinere delen (= partitionering)

Afbeelding van archieven per datum

Databaseontwerp

Opfrisser datamodellering

 

1. Conceptueel datamodel

2. Logisch datamodel

Voor partitioneren is het logisch model hetzelfde

3. Fysiek datamodel

Partitioneren hoort bij het fysieke datamodel

Databaseontwerp

Verticale partitie

Verticale partitie

Splits tabel ook als die volledig genormaliseerd is

Databaseontwerp

Verticale partitie: een voorbeeld

Voorbeeld verticale partitie

Bv. sla long_description op op een trager medium

Databaseontwerp

Horizontale partitie

Horizontale partitie

Databaseontwerp

Horizontale partitie: een voorbeeld

Horizontale partitie: voorbeeldtabel

Databaseontwerp

Horizontale partitie: een voorbeeld

 

Horizontale partitie: voorbeeld

 

CREATE TABLE sales (
    ...
    timestamp DATE NOT NULL
)
PARTITION BY RANGE (timestamp);

CREATE TABLE sales_2019_q1 PARTITION OF sales FOR VALUES FROM ('2019-01-01') TO ('2019-03-31'); ... CREATE TABLE sales_2019_q4 PARTITION OF sales FOR VALUES FROM ('2019-10-01') TO ('2020-01-31');
CREATE INDEX ON sales ('timestamp');
Databaseontwerp

Voor-/nadelen van horizontale partitie

Voordelen

  • Indexen van drukgebruikte partities passen in het geheugen
  • Verplaats naar specifiek medium: trager vs. sneller
  • Geschikt voor OLAP én OLTP

Nadelen

  • Een bestaande tabel partitioneren is gedoe
  • Sommige constraints kun je niet zetten
Databaseontwerp

Relatie met sharding

Sharding

Databaseontwerp

Laten we oefenen!

Databaseontwerp

Preparing Video For Download...