Veel websites en applicaties slaan hun gegevens op in een database. Het lezen en schrijven van gegevens uit een database kan de vertragingen binnen een applicaties aanzienlijk beïnvloeden. Het is belangrijk deze vertraging, ook wel latency genoemd, zoveel mogelijk te beperken, omdat gebruikers snelle en responsieve applicaties verwachten, en snellere websites beter presteren voor search engine optimization (SEO).

Schrijven naar een database voegt latency toe, omdat databases in het algemeen gegevens naar een schijf schrijven in plaats van ze in het geheugen te bewaren. Het is daarnaast gebruikelijk voor databases om compressie en encryptie toe te passen, waardoor er meer vertraging ontstaat bij het lezen en schrijven van gegevens. Om deze uitdagingen te overwinnen kun je een in-memory database gebruiken voor het snel opslaan en ophalen van gegevens uit RAM in plaats van een schijf.

Dit artikel bespreekt hoe in-memory databases werken, enkele populaire opties, en enkele nadelen ten opzichte van een standaard database.

Wat zijn in-memory databases?

In-memory databases gebruiken RAM in plaats van harde schijven (HDD) of solid-state drives (SSD) om gegevens op te slaan, waardoor de latency van het lezen en schrijven van gegevens drastisch wordt verminderd. De vermindering van de latency heeft twee belangrijke redenen. Ten eerste is toegang tot gegevens vanuit het geheugen sneller dan vanaf een schijf, en ten tweede zijn de gegevensstructuren die gebruikt worden om gegevens in het geheugen op te slaan eenvoudiger dan schijfopslag. Daarom is de CPU overhead lager bij het lezen en schrijven van gegevens.

Deze lage latency heeft een prijs, omdat de in het geheugen opgeslagen gegevens verloren gaan als een server uitvalt. In tegenstelling tot schijfopslag behoudt het geheugen zijn inhoud niet bij stroomuitval, dus is er een afweging tussen veerkracht en snelheid.

In-memory databases zijn een uitstekende optie voor applicaties die snelle of real-time gegevens nodig hebben, zoals leaderboards of real-time analyses. Ze zijn ook nuttig voor het cachen van gegevens die je gewoonlijk in een schijfgebaseerde database opslaat om het aantal lees- en schrijfbewerkingen naar de schijf te verminderen en de latentie te minimaliseren.

Het verminderen van latency is vooral belangrijk voor websites. Gebruikers die de website responsief vinden zullen hem eerder blijven gebruiken. Bovendien gebruiken Google en andere zoekmachines ook de laadsnelheid van websites als een factor in SEO. Snelle websites scoren beter in de zoekresultaten, waardoor de kans toeneemt dat gebruikers je website bezoeken.

In-memory databases uitgelegd

Omdat in-memory databases gegevens in RAM opslaan, hebben ze een veel lagere latency dan een HDD, die mechanische, bewegende onderdelen gebruikt om de juiste schijflocatie te bereiken. De HDD moet dan de gegevens lezen en overbrengen via de interface tussen het opslagapparaat en de computer. Bovendien is RAM, zelfs met SSD’s, nog steeds tot 30 keer sneller vanwege de performantere geheugenchips en CPU interface. Sommige benchmarktests hebben aangetoond dat het gebruik van MySQL met Redis – een populaire in-memory database – als cachinglaag de querylatency tot 25% kan verlagen ten opzichte van het gebruik van een standalone MySQL database.

Een grafiek die het aantal verzoeken weergeeft met alleen MySQL en met beide MySQL Redis.
Benchmarks met alleen MySQL en met MySQL en Redis. (Beeldbron: DZone)

Er is nog een tweede reden waarom in-memory databases snel zijn. Je kunt de gegevensstructuren die door in-memory databases worden gebruikt optimaliseren zodat ze sneller opgehaald worden ophalen. Relationele databases gebruiken bijvoorbeeld vaak B-trees voor indexen, die snelle zoekopdrachten mogelijk maken en tegelijkertijd het lezen en schrijven van grote gegevensblokken naar schijf ondersteunen. In-memory databases hoeven geen gegevensblokken naar de schijf te schrijven en kunnen kiezen voor presterende gegevensstructuren, waardoor de latency nog verder afneemt. In-memory databases bewaren en gebruiken gegevens vaak as-is, zonder transformatie of parsing in de databaselaag. Dit draagt ook bij aan de verlaging van de latency, omdat het zowel lees- als schrijftijden versnelt.

In-memory databases zijn populairder geworden door technologische verbeteringen. Ten eerste is de prijs per gigabyte (GB) RAM de laatste 20 jaar sterk gedaald, waardoor het gebruik van geheugen voor gegevensopslag betaalbaarder is geworden. Verbeteringen in in-memory database oplossingen en beheerde cloud diensten hebben ook geholpen enkele van hun belangrijkste nadelen te verlichten.

Bovendien kunnen in-memory databases zoals Redis nu snapshots maken van gegevens uit het geheugen naar de schijf, waardoor gegevens kunnen worden hersteld als een server uitvalt. Clouddiensten bieden georeplicatie, wat betekent dat applicaties online kunnen blijven door een fail-over te doen in geval van een probleem. Door deze kostenbesparing en verbetering van de betrouwbaarheid zijn in-memory databases haalbare opties geworden voor moderne applicaties en websites.

Voordelen en nadelen van in-memory databases

De belangrijkste voordelen van in-memory databases zijn:

  • Ze verbeteren de prestaties.
  • Ze zijn eenvoudiger te schalen vanwege de manier waarop ze gegevens opslaan.
  • Ze verbeteren vaak de betrouwbaarheid van een applicatie.

In-memory databases slaan gegevens meestal op als ongestructureerde of semi-gestructureerde gegevens in plaats van opgeslagen in complexe relationele modellen. Ongestructureerde gegevens maken het schalen van de database eenvoudiger, omdat de netwerkoverhead van het samenvoegen van gegevens die op meerdere nodes staan niet nodig is.

Het verbeteren van de betrouwbaarheid van een applicatie kan contra-intuïtief lijken vanwege de veranderlijkheid van gegevens die in RAM worden opgeslagen. Maar bij gebruik als cachinglaag verminderen in-memory databases de belasting van de primaire database tijdens verzoekpieken. Een cachinglaag kan ook helpen de kosten te verlagen, omdat het vaak duurder is een traditionele database te schalen dan een in-memory database om frequente verzoeken te versnellen en dan de centrale database te gebruiken voor opslag op langere termijn.

De belangrijkste nadelen van in-memory databases zijn:

  • Hogere kosten bij gebruik als enige database
  • Beperkte opslagruimte
  • Minder beveiligingsfeatures

In-memory databases maken over het algemeen geen gebruik van beveiligingsfeatures zoals encryptie, omdat alles in het geheugen moet staan – inclusief encryptiesleutels. Deze features maken het versleutelen van gegevens ineffectief, omdat elke kwaadwillende met toegang tot het geheugen in theorie ook toegang kan krijgen tot de encryptiesleutel.

In-memory databases kunnen de kosten drukken als ze samen met traditionele databases worden gebruikt. Ze zijn echter vaak duurder als ze als enige database worden gebruikt, vooral als ze grote hoeveelheden gegevens opslaan, vanwege de hogere prijs van geheugen tegenover schijfopslag. Deze kosten beperken ook de hoeveelheid gegevens die je kunt bewaren, omdat het opslaan van grote gegevenssets in het geheugen duur wordt en vaak meerdere servers vereist.

Waarom zijn niet alle databases in-memory?

Het belangrijkste nadeel dat voorkomt dat in-memory databases alomtegenwoordig zijn, zijn de kosten. Hoewel de prijzen van RAM aanzienlijk zijn gedaald, zijn ze per GB nog steeds veel hoger dan HDDs en SSDs. Deze kosten maken in-memory databases te duur voor uitgebreidere applicaties met kolossale datafootprints.

Als de prijs van RAM blijft dalen, zou er een tijd kunnen komen dat in-memory databases de standaard zijn, en schijfgebaseerde databases alleen nog in niche omstandigheden worden gebruikt.

Use cases voor in-memory databases

Een van de meest voorkomende gebruiken van in-memory databases is caching. Je kunt de in-memory database gebruiken als cachinglaag in combinatie met een traditionele database. De in-memory database slaat veelgebruikte gegevens op, voorkomt herhaalde en kostbare zoekacties in de schijfgebaseerde database en zorgt voor een snellere gebruikerservaring.

In-memory databases zijn ook populair geworden voor e-commercesites, forums en drukbezochte blogs met commentsecties. Dit komt omdat dit zeer dynamische sites zijn. E-commercesites willen de gebruikerservaring personaliseren en real-time productbeschikbaarheid tonen. Blogs en forums kunnen honderden of duizenden gebruikers tegelijk berichten plaatsen en commentaar geven. Dit betekent dat een site een hoge schrijfdoorvoer moet kunnen verwerken en de nieuwste content en comments snel aan de gebruikers moet kunnen teruggeven. In-memory databases verminderen de latency bij het opslaan van door gebruikers gegenereerde content en het bieden van een actuele en gepersonaliseerde ervaring.

In-memory databases zijn ook uitstekende kandidaten voor gaming leaderboards. Ze kunnen gegevens in real-time bijwerken en opvragen, en gegevens efficiënt sorteren om een actuele weergave van het klassement te bieden naarmate het spel vordert.

Je kunt ze ook gebruiken voor real-time analyses. Ze stellen je in staat om gegevens in de database te streamen en queries uit te voeren op de meest actuele versie van de gegevens voor real-time dashboards, risicoanalyse en machine learning modellen.

Voorbeelden van in-memory databases

Er zijn veel keuzes bij het kiezen van een in-memory database. Enkele van de populairste zijn Redis, Memgraph en Hazelcast. Redis is de meest gebruikte en is beschikbaar als beheerde dienst op de meeste cloudplatforms. Memgraph biedt grafiekberekeningen van streaminggegevens, allemaal in het geheugen, en Hazelcast biedt vergelijkbare functionaliteit als Redis, maar met andere cachingpatronen.

Redis is meestal een cachinglaag tussen websites en applicaties om de prestaties te verbeteren door kostbare databasereads te voorkomen. Deze prestatieverhoging is ook mogelijk voor WordPress sites met behulp van de Redis add-on van Kinsta. Samen met deze add-on levert Kinsta ook de Kinsta APM tool om eventuele prestatieproblemen met Redis queries te helpen oplossen.

Websites die op Kinsta draaien gebruiken standaard caching. Websites met frequente databaseverzoeken zullen echter nog steeds veel baat hebben bij Redis. Databaselatency is een van de belangrijkste factoren die een website vertragen, maar Redis helpt deze last te verminderen en stelt de website in staat snel te schalen.

Samenvatting

Databaselatency kan de totale latency van een website of applicatie aanzienlijk beïnvloeden. Lezen van en schrijven naar harde schijven verhoogt de latency. In-memory databases verminderen de databaselatency omdat ze gegevens opslaan in RAM. Zelfs bij gebruik van SSD’s is RAM nog steeds sneller, omdat het gebruik maakt van snellere geheugenchips en een snellere interface naar de CPU. Bovendien kun je de gegevensstructuren die in-memory databases gebruiken optimaliseren voor sneller ophalen.

In-memory databases kunnen websites en applicaties versnellen als ze gebruikt worden als cachinglaag tussen de website en een traditionele database. Dit komt omdat het geheugen sneller toegankelijk is dan de schijf, en deze verminderde overhead resulteert in snellere laadtijden van de website en kan bijdragen aan een betere SEO.

Redis is een van de meest populaire in-memory database-opties, en je kunt het eenvoudig toevoegen aan WordPress sites met behulp van de Kinsta add-on. Probeer de Redis add-on voor je door Kinsta gehoste site.

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.