sql >> Databáze >  >> NoSQL >> Redis

Proč Redis SortedSet používá Přeskočit seznam místo Balanced Tree?

Antirez řekl, viz https://news.ycombinator.com/item?id=1171423

Existuje několik důvodů:

  • Nejsou příliš náročné na paměť. Je to v podstatě na vás. Změna parametrů pravděpodobnosti, že uzel bude mít daný počet úrovní, pak bude méně náročný na paměť než u btrees.
  • Setříděná sada je často cílem mnoha operací ZRANGE nebo ZREVRANGE, to znamená procházení seznamu přeskočení jako propojeného seznamu. S touto operací je lokalita cache skip listů přinejmenším stejně dobrá jako u jiných druhů vyvážených stromů.
  • Jsou jednodušší na implementaci, ladění atd. Například díky jednoduchosti skip list jsem obdržel patch (již v Redis masteru) s rozšířenými skip seznamy implementujícími ZRANK v O(log(N)). Vyžadovalo to malé změny v kódu.

Pokud jde o odolnost a rychlost Append Only, nemyslím si, že je dobrý nápad optimalizovat Redis za cenu většího kódu a složitosti pro případ použití, který by IMHO měl být pro cíl Redis vzácný (fsync() při každém příkazu) . Téměř nikdo tuto funkci nepoužívá ani u ACID SQL databází, protože výkonnostní nápověda je každopádně velká.

O vláknech:naše zkušenosti ukazují, že Redis je většinou I/O vázán. Používám vlákna k poskytování věcí z virtuální paměti. Dlouhodobé řešení pro využití všech jader za předpokladu, že vaše propojení je tak rychlé, že můžete nasytit jedno jádro, běží na více instancích Redis (žádné zámky, téměř plně škálovatelné lineárně s počtem jader) a pomocí „Redis Cluster " řešení, které plánuji v budoucnu vyvinout.



  1. Migrace socket.io z 0.9.x na 1.x, problémy s konfigurací RedisStore

  2. MongoDB Agregation Framework - Dynamic Field Rename

  3. Nejlepší praxe pro udržení mgo sezení

  4. Jaký je nejlepší způsob ukládání dat v MongoDB?