Innehållsförteckning:
Video: Web Programming - Computer Science for Business Leaders 2016 2024
Viktiga butiks snabbläsare beror på användningen av väldefinierade tangenter. Dessa nycklar är vanligtvis hashed, vilket ger en nyckelvärdesbutik ett mycket förutsägbart sätt att bestämma vilken delning (och därmed server) data finns på. En viss server hanterar en eller flera partitioner.
Med en bra nyckel kan du unikt identifiera den enskilda posten som svarar på en fråga utan att behöva titta på några värden inom den här posten. En dålig nyckel kommer att kräva att din ansökningskod tolkar din post för att avgöra om det faktiskt matchar frågan.
Om du inte utformar din nyckel bra kan du sluta med en server som har en oproportionerligt tungare belastning än de andra, vilket leder till dålig prestanda. Med den aktuella systemtiden som en nyckel trycker du till exempel all ny data på sista noden i klustret, vilket leder till ett mardrömscenario för ombalansering.
Partitionering
Partition design är viktigt eftersom vissa viktiga butiker, till exempel Oracle NoSQL, inte tillåter att antalet partitioner ändras när ett kluster skapats. Deras distribution över servrar kan dock ändras. Så börja med ett stort antal partitioner som du kan sprida ut i framtiden.
Ett exempel på partitionering är Voldemorts konsekventa hashing-strategi, som visat. Här ser du samma partitioner spridas över tre servrar i början och sedan över fyra servrar senare. Antalet partitioner är desamma, men deras fördelning är annorlunda över servrar. Detsamma gäller för deras replikor.
Åtkomst till data på partitioner
Viktiga butiker är mycket distribuerade utan någon enda felpunkt. Det betyder att det inte finns något behov av en masterkoordineringskod för att hålla reda på servrar inom ett kluster. Klusterhantering görs automatiskt av ett chattprotokoll mellan noder i servern.
Du kan använda ett knep i klientdrivrutinen för att klara maximal prestanda utifrån att hämta och lagra nycklar och värden. Klientdrivrutinen håller reda på vilka servrar som håller några olika knappar. Så klientdrivrutinen vet alltid vilken server som ska prata med.
De flesta databaser, inklusive NoSQL, skickar en förfrågan till alla medlemmar i ett kluster. Det klustret accepterar antingen skrivet internt eller skickar det ett under huven till rätt nod. Denna inställning innebär en extra nätverksresa mellan noder är möjlig, vilket kan lägga till latens.
För att undvika upptäckt latens, behåller de flesta viktiga butiks klientdrivrutiner en metadatarlista över nuvarande noder i ett kluster och vilken partitionsnyckel som varierar mellan varje nodhantering.På så sätt kan klientdrivrutinen kontakta den korrekta servern, vilket gör operationerna snabbare.
Om en ny nod läggs till i ett kluster och metadata är föråldrade informerar klustret klientdrivrutinen, som sedan hämtar de senaste klustermetadataen innan den skickas tillbaka till önskad nod. På så sätt upprätthålls maximal genomströmning med ett minimum av overhead under utveckling. En annan fördel är att det inte finns något behov av en lastbalansering för att skicka frågor till nästa tillgängliga eller minst upptagna server - endast en server (eller läs repliksserver) får någonsin en kundförfrågan, så det finns inget behov av belastningsbalansering.