Cache-aside-patroon

Voltooid

Bij het ontwikkelen van een toepassing wilt u een goede gebruikerservaring bieden. Het snel ophalen van gegevens is hier onderdeel van. Het ophalen van gegevens uit een database is meestal een traag proces. Als deze gegevens vaak worden gelezen, kan dit een slechte gebruikerservaring opleveren. Het cache-aside-patroon beschrijft hoe u een cache in combinatie met een database kunt implementeren om de meestgebruikte gegevens zo snel mogelijk te retourneren.

U leert hier hoe het cache-aside-patroon kan worden gebruikt om ervoor te zorgen dat uw belangrijke gegevens snel toegankelijk zijn.

Wat is het cache-aside-patroon?

Het cache-aside-patroon bepaalt dat wanneer er gegevens moeten worden opgehaald uit een gegevensbron, zoals een relationele database, eerst de gegevens in de cache moeten worden gecontroleerd. Als de gegevens zich in de cache bevinden, gebruikt u deze. Als de gegevens zich niet in de cache bevinden, moet er een query op de database worden uitgevoerd. Wanneer de gegevens naar de gebruiker worden geretourneerd, moeten deze aan de cache worden toegevoegd. Op die manier kunnen de gegevens de volgende keer uit de cache worden opgehaald.

Wanneer moet u het cache-aside-patroon implementeren?

Het lezen van gegevens uit een database is meestal een traag proces. Het omvat het compileren van een complexe query, het voorbereiden van een uitvoeringsplan voor de query, het uitvoeren van de query en het voorbereiden van het resultaat. In sommige gevallen worden tijdens dit proces ook gegevens van de schijf gelezen. Er kunnen optimalisaties worden uitgevoerd op het databaseniveau, zoals het vooraf compileren van de query's en het laden van sommige gegevens in het geheugen. Het uitvoeren van de query en het voorbereiden van het resultaat vinden echter altijd plaats bij het ophalen van gegevens uit een database.

We kunnen dit probleem oplossen door het cache-aside-patroon te gebruiken. Bij het cache-aside-patroon hebben we naast de toepassing en database ook een cache. Een cache slaat de gegevens in het geheugen op, zodat het niet met het bestandssysteem hoeft te communiceren. Caches slaan gegevens bovendien op in zeer eenvoudige gegevensstructuren, zoals sleutel-waardeparen, zodat ze geen complexe query's hoeven uit te voeren om gegevens te verzamelen of indexen te onderhouden bij het schrijven van gegevens. Hierdoor presteert een cache gewoonlijk beter dan een database. Wanneer u een toepassing gebruikt, probeert deze eerst gegevens uit de cache te lezen. Als de aangevraagde gegevens niet in de cache staan, haalt de toepassing deze op uit de database, zoals eerder. Hierna slaat de toepassing de gegevens echter in de cache op voor volgende aanvragen. De volgende keer dat een gebruiker de gegevens aanvraagt, worden deze rechtstreeks vanuit de cache teruggeslagen.

Diagram van het laden van gegevens in de cache.

Het bijwerken van gegevens beheren

Wanneer u het cache-aside-patroon implementeert, kunt u een klein probleem introduceren. Omdat uw gegevens nu worden opgeslagen in een cache en een gegevensopslag, kunt u problemen krijgen wanneer u een update probeert uit te voeren. Voor het bijwerken van uw gegevens moet u bijvoorbeeld zowel de cache als het gegevensarchief bijwerken.

De oplossing voor dit probleem met het cache-aside-patroon is het ongeldig maken van de gegevens in de cache. Wanneer u gegevens in uw toepassing bij werkt, moet u eerst de gegevens in de cache verwijderen en vervolgens de wijzigingen rechtstreeks in de gegevensbron aanbrengen. Door dit te doen, zijn de gegevens de volgende keer dat ze worden aangevraagd niet in de cache aanwezig en wordt het proces herhaald.

Diagram van het ongeldig maken van gegevens in de cache.

Overwegingen voor het gebruik van het cache-aside-patroon

Overweeg zorgvuldig welke gegevens in de cache moeten worden geplaatst. Niet alle gegevens zijn geschikt om in de cache te worden opgeslagen:

  • Levensduur: wil de cache-aside-strategie effectief zijn, dan dient u ervoor te zorgen dat het verloopbeleid overeenkomt met de toegangsfrequentie van de gegevens. Als u de verloopperiode te kort maakt, kan dit ervoor zorgen dat toepassingen voortdurend gegevens uit het gegevensarchief ophalen en aan de cache toevoegen.

  • Onbeschikbaar maken: caches hebben een beperkte grootte vergeleken met gebruikelijke gegevensarchieven, en gegevens worden zo nodig onbeschikbaar gemaakt. Zorg ervoor dat u een toepasselijk verwijderingsbeleid voor uw gegevens kiest.

  • Voorbereiden: om het cache-aside-patroon effectief te maken, zullen veel oplossingen de cache vooraf vullen met gegevens waarvan ze verwachten dat ze vaak worden gebruikt.

  • Consistentie: het implementeren van het cache-aside-patroon biedt geen garantie voor consistentie tussen het gegevensarchief en de cache. Gegevens in een gegevensarchief kunnen worden gewijzigd zonder dat dit aan de cache wordt doorgegeven. Dit kan leiden tot ernstige synchronisatieproblemen.

Het cache-aside-patroon is handig wanneer u vaak toegang tot gegevens nodig hebt vanuit een gegevensbron die van een schijf gebruikmaakt. Met het cache-aside-patroon kunt u belangrijke gegevens in een cache opslaan om het ophalen ervan te versnellen.