sql >> Database teknologi >  >> NoSQL >> Redis

Konsekvent hashing som en måde at skalere skrivninger på

Der er to grunde til at bruge flere noder i en klynge:

  • Sharding for at begrænse mængden af ​​data, der er gemt på hver node
  • Duplikering for at reducere læsebelastningen og tillade, at en node fjernes uden tab af data.

De to er fundamentalt forskellige, men du kan implementere begge - brug konsekvent hashing for at pege på et sæt noder med en standard master/slave-opsætning i stedet for en enkelt node.

Hvis klyngen er dit primære datalager i stedet for en cache, skal du bruge en anden omfordelingsstrategi, der inkluderer kopiering af dataene.

Min implementering er baseret på at få klienten til at vælge en af ​​64k buckets til en hash og have en tabel, der kortlægger den bucket til en node. Indledningsvis er alle kortlagt til node #1.

Når node #1 bliver for stor, bliver dens slave master node #2, og tabellen opdateres til at kortlægge halvdelen af ​​node #1 nøglerne til node #2. På dette tidspunkt vil alle læsninger og skrivninger fungere med den nye kortlægning, og du skal bare rydde op i de nøgler, der nu er på den forkerte node. Afhængigt af ydeevnekravene kan du kontrollere alle nøgler på én gang eller kontrollere et tilfældigt udvalg af nøgler, som udløbssystemet gør.




  1. MongoDB $exp

  2. Mongoengine creation_time attribut i dokument

  3. Oprettelse af multifeltindekser i Mongoose / MongoDB

  4. Navneområder i Redis?