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

MurmurHash - co to jest?

Murmur to rodzina dobrych funkcji mieszających ogólnego przeznaczenia, nadających się do zastosowań niekryptograficznych. Jak stwierdził Austin Appleby, MurmurHash zapewnia następujące korzyści:

  • proste (pod względem liczby wygenerowanych instrukcji montażu).
  • dobry rozkład (zdanie testów chi-kwadrat dla praktycznie wszystkich zestawów kluczy i rozmiarów wiader).
  • dobre zachowanie lawinowe (maksymalne odchylenie 0,5%).
  • dobra odporność na kolizje (przechodzi test tortur Boba Jenkina frog.c. Brak możliwych kolizji dla 4-bajtowych kluczy, brak małych (1- do 7-bitowych) różnic).
  • świetna wydajność na sprzęcie Intel/AMD, dobry kompromis między jakością skrótu a zużyciem procesora.

Z pewnością można go użyć do haszowania identyfikatorów UUID (tak jak inne zaawansowane funkcje haszowania:CityHash, Jenkins, Paul Hsieh's itp.). Teraz zestaw bitów Redis jest ograniczony do 4 GB bitów (512 MB). Musisz więc zredukować 128 bitów danych (UUID) do 32 bitów (wartość haszowana). Bez względu na jakość funkcji haszującej wystąpią kolizje.

Korzystanie z zaprojektowanej funkcji skrótu, takiej jak Szmer, zmaksymalizuje jakość dystrybucji i zminimalizuje liczbę kolizji, ale nie daje żadnej innej gwarancji.

Oto kilka linków porównujących jakość funkcji skrótu ogólnego przeznaczenia:

http://www.azillionmonkeys.com/qed/hash.html

http://www.strchr.com/hash_functions

http://blog.aggregateknowledge.com/2011/12/05/choosing-a-good-hash-function-part-1/

http://blog.aggregateknowledge.com/2011/12/29/choosing-a-good-hash-function-part-2/

http://blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3/



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zaimplementować serwer push we frameworku Flask?

  2. Jak uruchomić Redis na platformie Azure?

  3. Czy Spring Data Redis (1.3.2.RELEASE) obsługuje JedisSentinelPool z jedis?

  4. Jak skonfigurować JedisConnectionFactory do korzystania z SSL, aby nie otrzymywał błędu:JedisDataException:ERR nieszyfrowane połączenie jest zabronione?

  5. Relacyjna baza danych w pamięci?