Inhoudsopgave:
Video: DOM Tapkey 2024
De snelle leesmogelijkheden van sleutelwaardevormen komen voort uit het gebruik van goed gedefinieerde toetsen. Deze sleutels zijn meestal hashed, wat een sleutelwaardevoorraad een zeer voorspelbare manier geeft om te bepalen op welke partitie (en dus server) data zich bevinden. Een bepaalde server beheert een of meer partities.
Met een goede sleutel kunt u de unieke record die een query beantwoordt uniek identificeren zonder dat u naar waarden in die record hoeft te kijken. Een slechte sleutel vereist dat uw toepassingscode uw record interpreteert om te bepalen of deze inderdaad overeenkomt met de vraag.
Als u uw sleutel niet goed ontwerpt, kan het zijn dat één server een onevenredig zwaardere belasting heeft dan de andere, wat leidt tot slechte prestaties. Door bijvoorbeeld de huidige systeemtijd als sleutel te gebruiken, worden alle nieuwe gegevens naar het laatste knooppunt in het cluster geduwd, wat leidt tot een nachtmerriescenario van opnieuw in evenwicht brengen.
Partitioneren
Het ontwerp van partities is belangrijk omdat sommige winkels met sleutelwaardes, zoals Oracle NoSQL, niet toestaan dat het aantal partities wordt gewijzigd nadat een cluster is gemaakt. Hun distributie over servers kan echter worden gewijzigd. Dus begin met een groot aantal partities die u in de toekomst kunt verspreiden.
Een voorbeeld van partitionering is de consistente hashing-benadering van Voldemort, zoals weergegeven. Hier zie je dezelfde partities aanvankelijk verdeeld over drie servers en later over vier servers. Het aantal partities blijft hetzelfde, maar hun toewijzing verschilt per server. Hetzelfde geldt voor hun replica's.
Toegang krijgen tot gegevens op partities
Key-value-stores zijn hoog gedistribueerd, zonder single point of failure. Dit betekent dat er geen hoofdcoördinatornode nodig is om servers binnen een cluster bij te houden. Clusterbeheer wordt automatisch uitgevoerd door een chatprotocol tussen knooppunten op de server.
U kunt een truc in het clientstuurprogramma gebruiken om maximale prestaties te verwijderen uit het ophalen en opslaan van sleutels en waarden - het clientstuurprogramma houdt bij welke servers welk toetsenbereik bevatten. Dus de clientdriver weet altijd met welke server hij moet praten.
De meeste databases, inclusief NoSQL, geven een verzoek door aan alle leden van een cluster. Dat cluster aanvaardt de write intern of geeft deze onder de motorkap door aan de juiste node. Deze setup betekent dat er een extra netwerktrip tussen knooppunten mogelijk is, wat kan toevoegen aan latency.
Om vertragingen in de detectie te voorkomen, onderhouden de meeste clientstuurprogramma's van de belangrijkste waardestores een metadatalijst van de huidige knooppunten in een cluster en van welke partitiebeheertabellen elke knoop beheert.Op deze manier kan de clientdriver contact maken met de juiste server, waardoor de bewerkingen sneller verlopen.
Als een nieuw knooppunt aan een cluster wordt toegevoegd en de metagegevens verouderd zijn, informeert het cluster het clientstuurprogramma, dat vervolgens de nieuwste metagegevens van het cluster downloadt voordat het verzoek opnieuw naar het juiste knooppunt wordt verzonden. Op deze manier wordt maximale doorvoer gehandhaafd met een minimum aan overhead tijdens de ontwikkeling. Een ander bijkomend voordeel is dat een taakverdeler geen query's hoeft door te geven aan de volgende beschikbare of minst drukke server - slechts één server (of gelezen replicaserver) ontvangt ooit een clientverzoek, dus er is geen behoefte aan taakverdeling.