Rasmus Hurup Hansen Freelance systemudvikling
DA EN
Data i skala

Når datamængden i sig selv er opgaven

Et par millioner rækker er ikke noget problem. Det bliver det, når de skal spørges på tværs af seks relationer, opdateres hver nat og svare på under et sekund. Det er der, jeg bliver hentet ind.

FIG. 01 Målestok

Hvad jeg har haft under hænderne

Tallene er fra systemer, jeg selv har bygget og haft driftsansvaret for. Det er ikke tal fra en testdatabase.

ZiiX 13.000.000 nummerplader

I en relationel MySQL-struktur med køretøjer, ejere, værksteder, sager og skader hængt på.

PlantGeekz 2.100.000 plantenavne

Heraf 1,2 millioner synonymer. 1,5 millioner billeder er knyttet til det samme taksonomiske hierarki.

Skorstensgaard / Nic. Christiansen Gruppen 20.000.000 varelinjer

På én salgstype. Tilbud, ordrer, fakturaer og kreditnotaer har hver deres af samme størrelse.

FIG. 02 Relationer

Antallet af rækker er sjældent det svære

En tabel med tyve millioner rækker er ikke i sig selv et problem. Det bliver det, når en helt almindelig forespørgsel skal igennem seks relationer for at give et svar, og når hver af de seks tabeller også er vokset.

Det er den slags, jeg har arbejdet med i årevis. Taksonomiske hierarkier med synonymer på hvert niveau. Køretøjer med stelnumre, nummerplader, ejere, sager og skader. Salgsdata hvor en enkelt linje hænger på kunde, afdeling, vare og økonomi på én gang.

ZiiX
  1. Nummerplade
  2. Køretøj
  3. Bruger
  4. Sag
  5. Skade
PlantGeekz
  1. Billede
  2. Art
  3. Slægt
  4. Familie
  5. Orden
Skorstensgaard
  1. Varelinje
  2. Ordre
  3. Faktura
  4. Kunde
  5. Afdeling

Tre kæder fra systemer, jeg har bygget. Hvert led er en relation, forespørgslen skal igennem, før den kan svare.

FIG. 03 Konsekvenser

Hvad det koster ikke at have styr på det

Det her sker ikke på dag ét. Det sker, når datamængden er vokset stille og roligt i tre år, og ingen har kigget på modellen siden den blev lavet.

01

To tal på det samme

Salg og økonomi regner forskelligt, fordi der er to steder at hente tallet. Møderne går med at blive enige om, hvem der har ret, i stedet for at træffe beslutningen.

02

Dubletter der koster penge

Den samme kunde tre gange, det samme køretøj to gange. Rabatter bliver givet forkert, og rykkere bliver sendt til nogen, der har betalt.

03

Så langsomt at folk holder op

En forespørgsel, der tog 200 millisekunder ved hundrede tusind rækker, tager fyrre sekunder ved ti millioner. Så laver folk deres eget regneark ved siden af, og så er I tilbage, hvor I startede.

04

Natjobbet bliver ikke færdigt

Importen skal være kørt klokken syv. Ved den datamængde tager den ni timer, og så møder man ind til gårsdagens tal uden at vide det.

05

Ingen tør ændre noget

En skemaændring på tyve millioner rækker låser tabellen, mens den kører. Så bliver ændringen udskudt, og udskudt igen, og til sidst er systemet stivnet.

06

I kan ikke slette det, I skal

GDPR kræver, at I kan fjerne en person fra jeres systemer. Når ingen længere ved, hvad der hænger sammen med hvad, er der heller ingen, der tør trykke på knappen.

FIG. 04 Håndværket

Hvad jeg gør ved det

A

Datamodellering

Relationerne lagt rigtigt fra starten og normaliseret præcis så langt, det giver mening. Nogle gange er den rigtige beslutning at duplikere med vilje, og så skal det være et valg og ikke et uheld.

B

Indeksering og forespørgsler

At læse en query plan og se, hvorfor MySQL vælger det forkerte indeks. Det er tit forskellen på fyrre sekunder og fyrre millisekunder.

C

Migrationer uden nedetid

Skemaændringer på tabeller med millioner af rækker, uden at lukke butikken imens.

D

Søgning ved siden af databasen

Meilisearch og Sphinxsearch tager fritekstsøgningen, så databasen kan passe det, den er god til.

E

Jobs der kan genstartes

Batch og baggrundskørsler i bidder med checkpoints, så en fejl klokken tre om natten ikke koster hele importen.

F

Overvågning og gendannelse

Zabbix på det, der betyder noget, så I opdager det, før brugerne gør. Og en backup, nogen har prøvet at rulle tilbage og taget tid på.

Har I noget, der skal bygges ordentligt?

Skriv et par linjer om, hvad I sidder med. Så vender jeg tilbage med, hvad jeg tænker. Også hvis svaret er, at en anden løser det bedre.