Indholdsfortegnelse:
Video: Web Programming - Computer Science for Business Leaders 2016 2025
Nøgleværdisternes hurtige læsefunktioner stammer fra deres brug af veldefinerede nøgler. Disse nøgler er typisk hashed, hvilket giver en nøgleværdi butik en meget forudsigelig måde at bestemme, hvilke partition (og dermed server) data ligger på. En bestemt server administrerer en eller flere partitioner.
Med en god nøgle kan du unikt identificere den enkelt post, der svarer til en forespørgsel uden at skulle se på nogen værdier i den pågældende post. En dårlig nøgle vil kræve, at din ansøgningskode fortolker din post for at afgøre, om den faktisk svarer til forespørgslen.
Hvis du ikke designer din nøgle godt, kan du ende med en server, der har en uforholdsmæssigt tungere belastning end de andre, hvilket fører til dårlig ydelse. Ved at bruge den aktuelle systemtid som en nøgle, skubber du for eksempel alle nye data til den sidste knude i klyngen, hvilket fører til et mareridtscenario for genbalancering.
Partitionering
Partition design er vigtigt, fordi nogle nøgleværdier, som f.eks. Oracle NoSQL, ikke tillader, at antallet af partitioner ændres, når en klynge er oprettet. Deres distribution på tværs af servere kan dog ændres. Så start med et stort antal partitioner, som du kan sprede i fremtiden.
Et eksempel på partitionering er Voldemorts konsekvente hashing-tilgang, som vist. Her ser du de samme partitioner spredt over tre servere i begyndelsen og derefter på tværs af fire servere senere. Antallet af partitioner forbliver det samme, men deres tildeling er forskellig på tværs af servere. Det samme gælder for deres replikaer.
Adgang til data på partitioner
Nøgleværdisbutikker er meget distribuerede uden et enkelt fejlfelt. Det betyder, at der ikke er behov for en masterkoordineringsknude til at holde styr på servere inden for en klynge. Klientstyring udføres automatisk af en chatprotokol mellem noder i serveren.
Du kan bruge et trick i klientdriveren til at presse maksimal ydeevne ud af at hente og gemme nøgler og værdier - klientdriveren holder styr på, hvilke servere der holder, hvilken række nøgler. Så klientdriveren ved altid, hvilken server der skal snakke med.
De fleste databaser, inkluderet NoSQL, sender en anmodning til alle medlemmer af en klynge. Denne klynge accepterer enten skrivningen internt eller sender den ene under hætten til den korrekte knude. Denne opsætning betyder en ekstra netværksrejse mellem noder er mulig, hvilket kan tilføje til latens.
For at undgå opdagelseslatens opretholder de fleste nøgleværdiernes klientdrivere en metadatarliste over de nuværende noder i en klynge, og hvilken partitionstast spænder hver nitsstyring.På denne måde kan klientdriveren kontakte den korrekte server, hvilket gør operationer hurtigere.
Hvis der tilføjes en ny knude til en klynge, og metadataene er forældede, informerer klyngen klientdriveren, som derefter overfører de nyeste klyngemetadata, inden der sendes en ny forespørgsel til den korrekte knude. På denne måde opretholdes maksimal gennemstrømning med et minimum af overhead under udvikling. En anden fordel ved siden af er, at der ikke er behov for en belastningsbalancer til at sende forespørgsler til den næste ledige eller mindst travle server - kun én server (eller læs repliksserver) nogensinde modtager en klientanmodning, så der er ikke behov for belastningsbalancering.