Mange websteder og applikationer gemmer normalt deres data i en database. Læsning og skrivning af data fra en database kan påvirke en applikations latenstid betydeligt. Det er vigtigt at reducere latenstiden så meget som muligt, da brugerne forventer hurtige og responsive applikationer, og hurtigere websteder fungerer bedre med hensyn til søgemaskineoptimering (SEO).

Skrivning til en database øger latenstiden, fordi databaser generelt skriver data til en disk i stedet for at holde dem i hukommelsen. Det er almindeligt, at databaser anvender komprimering og kryptering, hvilket øger latenstiden ved læsning og skrivning af data. For at overvinde disse udfordringer kan du bruge en in-memory-database til hurtig lagring og hentning af data fra RAM i stedet for en disk.

I denne artikel diskuteres det, hvordan in-memory-databaser fungerer, nogle populære muligheder og nogle af kompromiserne i forhold til en standarddatabase.

Hvad er in-memory databaser?

In-memory-databaser bruger RAM i stedet for harddiske (HDD) eller SSD-drev (Solid State Drives) til at lagre data, hvilket reducerer latenstiden for læsning og skrivning af data drastisk. Reduktionen af latenstiden skyldes to hovedårsager. For det første er adgang til data fra hukommelsen hurtigere end fra en disk, og for det andet er de datastrukturer, der anvendes til lagring af data i hukommelsen, mere enkle end disklagring. Derfor er CPU-overheadet lavere, når der læses og skrives data.

Denne lave latenstid har en pris, fordi de data, der er lagret i hukommelsen, går tabt, hvis en server fejler. I modsætning til disklagring bevarer hukommelsen ikke sit indhold ved strømsvigt, så der er tale om en afvejning af modstandsdygtighed i forhold til hastighed.

In-memory-databaser er en fremragende mulighed for applikationer, der kræver hurtige data eller data i realtid, f.eks. leaderboards eller realtidsanalyser. De er også nyttige til caching af data, som du normalt gemmer i en diskbaseret database for at reducere antallet af læsninger og skrivninger til disken og minimere latenstiden.

Det er især vigtigt at reducere latenstiden for websteder. Brugere, der finder webstedet responsivt, er mere tilbøjelige til at fortsætte med at bruge det. Desuden bruger Google og andre søgemaskiner også websteds indlæsningshastigheder som en faktor i SEO. Hurtige websteder rangerer bedre i søgeresultaterne, hvilket øger chancerne for, at brugerne besøger dit websted.

Forklaringer om in-memory-databaser

Da in-memory-databaser lagrer data i RAM, har de langt lavere latenstid end en harddisk, som bruger mekaniske, bevægelige dele til at få adgang til den korrekte diskplacering. HDD’en skal derefter læse dataene og overføre dem via grænsefladen mellem lagerenheden og computeren. Selv med SSD’er er RAM stadig op til 30 gange hurtigere på grund af de mere effektive hukommelseschips og CPU-interface. Nogle benchmarking-tests har vist, at brugen af MySQL med Redis – en populær in-memory-database – som et caching-lag kan reducere forespørgselslatenstiden med op til 25% i forhold til brugen af en standalone MySQL-database.

En graf, der repræsenterer antallet af anmodninger med kun MySQL og med begge MySQL Redis.
Benchmarks med kun MySQL og med MySQL og Redis. (Billedkilde: DZone)

Der er en anden grund til, at in-memory-databaser er hurtige. Du kan optimere de datastrukturer, der bruges af in-memory-databaser, så de kan hentes hurtigere. For eksempel bruger relationelle databaser ofte B-trees til indekser, hvilket giver mulighed for hurtige søgninger, samtidig med at de understøtter læsning og skrivning af store datablokke til disken. In-memory-databaser behøver ikke at skrive datablokke til disken og kan vælge mere effektive datastrukturer, hvilket yderligere reducerer latenstiden. In-memory-databaser lagrer og bruger ofte data som de er, uden nogen transformation eller parsing i databaselaget. Dette bidrager også til at reducere latenstiden, da det fremskynder både læse- og skrivetiden.

In-memory-databaser er blevet mere populære som følge af teknologiske forbedringer. For det første er prisen pr. gigabyte (GB) RAM blevet væsentligt lavere i de sidste 20 år, hvilket har gjort det mere overkommeligt at bruge hukommelse til datalagring. Forbedringer i in-memory-databaseløsninger og administrerede cloud-tjenester har også været med til at afhjælpe nogle af deres største ulemper.

Desuden kan in-memory-databaser som Redis nu tage snapshots af data fra hukommelsen til disken, hvilket gør det muligt at genskabe data, hvis en server svigter. Cloud-tjenester tilbyder geo-replikation, hvilket betyder, at applikationer kan forblive online ved at gå over i tilfælde af et problem. Denne omkostningsreduktion og forbedring af pålideligheden har gjort in-memory-databaser til en mulig løsning for moderne applikationer og websteder.

Fordele og ulemper ved in-memory-databaser

De vigtigste fordele ved in-memory-databaser er følgende:

  • De forbedrer ydeevnen.
  • De er nemmere at skalere på grund af den måde, de lagrer data på.
  • De forbedrer ofte pålideligheden af en applikation.

In-memory-databaser lagrer normalt data som ustrukturerede eller semistrukturerede i stedet for at være gemt i komplekse relationelle modeller. Ustrukturerede data gør det lettere at skalere databasen, da det er unødvendigt at overføre data via netværket for at samle data, der findes på flere knudepunkter.

Forbedring af pålideligheden af et program kan virke kontraintuitivt på grund af volatiliteten af data, der er gemt i RAM. Når de anvendes som et caching-lag, reducerer in-memory-databaser imidlertid byrden på den primære database i forbindelse med spidsbelastninger af forespørgsler. Et cachinglag kan også bidrage til at reducere omkostningerne, fordi det ofte er dyrere at skalere en traditionel database end en in-memory-database for at fremskynde hyppige forespørgsler og derefter bruge den centrale database til længerevarende lagring.

De største ulemper ved in-memory-databaser er:

  • Øgede omkostninger, hvis de anvendes som eneste database
  • Begrænset lagerstørrelse
  • Færre sikkerhedsfunktioner

In-memory-databaser anvender generelt ikke sikkerhedsfunktioner som f.eks. kryptering, da alt skal være i hukommelsen – herunder krypteringsnøgler. Disse funktioner gør det ineffektivt at kryptere data, fordi enhver ondsindet enhed med adgang til hukommelsen i teorien også kan få adgang til krypteringsnøglen.

In-memory-databaser kan reducere omkostningerne, når de anvendes sammen med traditionelle databaser. De er dog ofte dyrere, når de bruges som eneste database, især hvis de lagrer store datamængder, på grund af den højere pris på hukommelse i forhold til disklagring. Denne omkostning forbyder også den mængde data, du kan opbevare, da lagring af store datasæt i hukommelsen bliver dyrt og ofte kræver flere servere.

Hvorfor er alle databaser ikke In-Memory?

Den største ulempe, der forhindrer in-memory-databaser i at blive allestedsnærværende, er omkostningerne. Selv om priserne på RAM er faldet betydeligt, er de stadig meget højere pr. GB end HDD’er og SSD’er. Disse omkostninger gør in-memory-databaser for dyre til mere omfattende applikationer med kolossale datafodaftryk.

Hvis prisen på RAM fortsætter med at falde, kan der komme en tid, hvor in-memory-databaser bliver standard, og diskbaserede databaser kun anvendes under nicheforhold.

Anvendelsesområder for In-Memory-databaser

En af de mest almindelige anvendelser af in-memory-databaser er caching. Du kan bruge in-memory-databasen som et caching-lag sammen med en traditionel database. In-memory-databasen lagrer data, der ofte tilgås, hvilket forhindrer gentagne og dyre opslag i den diskbaserede database og giver en hurtigere brugeroplevelse.

In-memory-databaser er også blevet berømte til e-handelswebsteder, fora og blogs med stor trafik og kommentarsektioner. Det skyldes, at disse er meget dynamiske websteder. E-handelswebsteder ønsker at tilpasse brugeroplevelsen og vise produkttilgængelighed i realtid. Blogs og fora kan have hundredvis eller tusindvis af brugere, der samtidig skriver og kommenterer. Det betyder, at et websted skal kunne håndtere en høj skrivehastighed og være i stand til hurtigt at levere det nyeste indhold og de seneste kommentarer tilbage til brugerne. In-memory-databaser reducerer latenstiden i forbindelse med lagring af brugergenereret indhold og giver en opdateret og personlig oplevelse.

In-memory-databaser er også gode kandidater til leaderboards til spil. De kan opdatere og hente data i realtid og effektivt sortere data for at give en aktuel visning af ranglisten, efterhånden som spillet skrider frem.

Du kan også bruge dem til realtidsanalyser. De giver dig mulighed for at streame data ind i databasen og udføre forespørgsler på den mest opdaterede version af dataene til dashboards i realtid, risikoanalyser og maskinlæringsmodeller.

Eksempler på In-Memory-databaser

Der er mange valgmuligheder, når du skal vælge en in-memory-database. Nogle af de mest populære er Redis, Memgraph og Hazelcast. Redis er den mest udbredte og er tilgængelig som en administreret tjeneste på de fleste cloud-platforme. Memgraph leverer grafberegninger af streaming data, alt sammen i hukommelsen, og Hazelcast tilbyder lignende funktionalitet som Redis, men med andre caching-mønstre.

Redis er almindeligvis et cachinglag mellem websteder og applikationer for at forbedre ydeevnen ved at forhindre dyre databaselæsninger. Denne ydelsesforøgelse er også mulig for WordPress-websteder ved hjælp af Redis-tilføjelsen fra Kinsta. Sammen med dette add-on leverer Kinsta også Kinsta APM-værktøjet til at hjælpe med at fejlfinde eventuelle ydelsesproblemer med Redis-forespørgsler.

Websteder, der kører på Kinsta, bruger caching som standard. Websteder med hyppige databaseforespørgsler vil dog stadig have stor gavn af Redis. Database latenstid er en af de vigtigste faktorer, der gør et websted langsommere, men Redis hjælper med at reducere denne byrde og gør det muligt for webstedet at skalere hurtigt.

Opsummering

Databaseforsinkelse kan påvirke et websted eller en applikations samlede forsinkelse betydeligt. Læsning fra og skrivning til harddiske øger latenstiden. In-memory-databaser reducerer databaseforsinkelsen, fordi de lagrer data i RAM. Selv når der anvendes SSD’er, er RAM stadig hurtigere, fordi der anvendes hurtigere hukommelseschips og en hurtigere grænseflade til CPU’en. Desuden kan du optimere de datastrukturer, der anvendes af in-memory-databaser, så de kan hentes hurtigere.

In-memory-databaser kan fremskynde websteder og applikationer, når de bruges som et caching-lag mellem webstedet og en traditionel database. Dette skyldes, at hukommelse er hurtigere at få adgang til end disk, og dette reducerede overhead resulterer i hurtigere indlæsningstider for websteder og kan bidrage til forbedret SEO.

Redis er en af de mest populære muligheder for in-memory-databaser, og du kan nemt tilføje den til WordPress-websteder ved hjælp af Kinsta-tilføjelsen. Prøv Redis-tilføjelsen til dit Kinsta-hostede websted.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.