sql >> Databasteknik >  >> NoSQL >> Redis

Varför Redis SortedSet använder Skip List istället för Balanced Tree?

Antirez sa, se i https://news.ycombinator.com/item?id=1171423

Det finns några anledningar:

  • De är inte särskilt minneskrävande. Det är upp till dig i princip. Att ändra parametrar om sannolikheten för att en nod har ett givet antal nivåer kommer att göra det mindre minneskrävande än btrees.
  • En sorterad uppsättning är ofta målet för många ZRANGE- eller ZREVRANGE-operationer, det vill säga att korsa överhoppningslistan som en länkad lista. Med denna operation är cacheplatsen för överhoppningslistor minst lika bra som med andra sorters balanserade träd.
  • De är enklare att implementera, felsöka och så vidare. Till exempel tack vare överhoppningslistans enkelhet fick jag en patch (redan i Redis master) med utökade överhoppningslistor som implementerade ZRANK i O(log(N)). Det krävde små ändringar i koden.

Om Append Only hållbarhet och hastighet, jag tror inte att det är en bra idé att optimera Redis till priset av mer kod och mer komplexitet för ett användningsfall som IMHO borde vara sällsynt för Redis-målet (fsync() vid varje kommando) . Nästan ingen använder den här funktionen ens med ACID SQL-databaser, eftersom prestandatipset är stort ändå.

Om trådar:vår erfarenhet visar att Redis mestadels är I/O-bunden. Jag använder trådar för att servera saker från virtuellt minne. Den långsiktiga lösningen för att utnyttja alla kärnor, förutsatt att din länk är så snabb att du kan mätta en enda kärna, kör flera instanser av Redis (inga lås, nästan helt skalbar linjärt med antal kärnor) och använder "Redis Cluster" " lösning som jag planerar att utveckla i framtiden.



  1. Steg för att ansluta MongoDB och Solr med DataImportHandler

  2. PyMongo -- marköriteration

  3. Redis Key upphör med Jedis

  4. En säkerhetschecklista för MongoDB-produktionsinstallationer