sql >> Database >  >> NoSQL >> Redis

Consistente hashing als een manier om schrijfacties te schalen

Er zijn twee redenen om meerdere nodes in een cluster te gebruiken:

  • Sharding om de hoeveelheid gegevens die op elk knooppunt wordt opgeslagen te beperken
  • Duplicatie om de leesbelasting te verminderen en een node te laten verwijderen zonder gegevensverlies.

De twee zijn fundamenteel verschillend, maar je kunt beide implementeren - gebruik consistente hashing om te verwijzen naar een set knooppunten met een standaard master/slave-configuratie in plaats van een enkel knooppunt.

Als het cluster uw primaire gegevensopslag is in plaats van een cache, hebt u een andere herdistributiestrategie nodig, waaronder het kopiëren van de gegevens.

Mijn implementatie is gebaseerd op het feit dat de klant een van 64k-buckets voor een hash kiest en een tabel heeft die die bucket aan een knooppunt toewijst. In eerste instantie worden ze allemaal toegewezen aan knooppunt #1.

Wanneer knooppunt #1 te groot wordt, wordt zijn slave hoofdknooppunt #2 en wordt de tabel bijgewerkt om de helft van de knooppunt #1-sleutels toe te wijzen aan knooppunt #2. Op dit punt werken alle lees- en schrijfbewerkingen met de nieuwe toewijzing en hoeft u alleen de sleutels op te schonen die zich nu op het verkeerde knooppunt bevinden. Afhankelijk van de prestatie-eisen kunt u alle sleutels tegelijk controleren of een willekeurige selectie van sleutels controleren, zoals het vervalsysteem doet.




  1. Is er een equivalent van NOW() in MongoDB?

  2. PyMongo -- cursor iteratie

  3. MongoDB Index op verschillende typen

  4. Objecteigenschappen opslaan in redis