Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Dlaczego Redis SortedSet używa listy pomijania zamiast zrównoważonego drzewa?

Antirez powiedział, patrz https://news.ycombinator.com/item?id=1171423

Jest kilka powodów:

  • Nie wymagają dużej ilości pamięci. Zasadniczo zależy to od Ciebie. Zmiana parametrów dotyczących prawdopodobieństwa, że ​​węzeł będzie miał określoną liczbę poziomów, spowoduje, że będzie mniej obciążony pamięcią niż btrees.
  • Posortowany zestaw jest często celem wielu operacji ZRANGE lub ZREVRANGE, to znaczy przechodzenia przez listę pomijania jako listę połączoną. Dzięki tej operacji lokalizacja pamięci podręcznej list pomijania jest co najmniej tak dobra, jak w przypadku innych zrównoważonych drzew.
  • Są prostsze do wdrożenia, debugowania i tak dalej. Na przykład dzięki prostocie listy pominięć otrzymałem łatkę (już w masterze Redis) z rozszerzonymi listami pominięć implementujących ZRANK w O(log(N)). Wymagało to niewielkich zmian w kodzie.

O trwałości i szybkości dołączania tylko, nie sądzę, aby zoptymalizować Redis kosztem większej ilości kodu i większej złożoności w przypadku użycia, w którym IMHO powinien być rzadki dla celu Redis (fsync() przy każdym poleceniu) . Prawie nikt nie używa tej funkcji, nawet w przypadku baz danych ACID SQL, ponieważ wskazówka dotycząca wydajności i tak jest duża.

O wątkach:nasze doświadczenie pokazuje, że Redis jest głównie związany z I/O. Używam wątków do obsługi rzeczy z pamięci wirtualnej. Długoterminowym rozwiązaniem pozwalającym na wykorzystanie wszystkich rdzeni, zakładając, że łącze jest tak szybkie, że można nasycić pojedynczy rdzeń, jest uruchamianie wielu instancji Redis (bez blokad, prawie w pełni skalowalne liniowo z liczbą rdzeni) i korzystanie z „klastra Redis” " rozwiązanie, które planuję opracować w przyszłości.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy istnieje ograniczenie liczby argumentów, które mogą obsłużyć polecenia redis, takie jak ZADD lub HMGET?

  2. Jak korzystać z masowego wstawiania Redis?

  3. serwer spring nie może połączyć się z redis przy użyciu klienta jedis

  4. Heroku Redis — optymalizacja GUI i pamięci

  5. php-redis - Czy istnieje sposób na przechowywanie obiektu PHP w Redis bez jego serializacji?