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

Wieloparametrowa wyszukiwarka meczów z Redis

To, co próbujesz tutaj zrobić, to odwrócony indeks.

Dla każdej kolumny zmapuj ją na „zestaw”. Następnie możesz przecinać zbiory, aby uzyskać wynik.

A więc APPLE: RED ROUND FRUIT odwzoruje następujące wstawki:

SADD p1:RED APPLE
SADD p2:ROUND APPLE
SADD p3:FRUIT APPLE

Następnie powiedzmy, że chcę zapytać o * ROUND FRUIT , zrobiłbym:

SINTER p2:ROUND p3:FRUIT

To polecenie pobiera przecięcie elementów w p2:ROUND zestaw i p3:FRUIT ustawić. Zwróci to wszystkie elementy, które są ROUND i FRUIT , nie dbając o to, co p1 jest.

Kilka innych przykładów:

SMEMBERS p1:GREEN
SINTER p1:RED p2:ROUND p3:FRUIT
SUNION p1:RED p1:GREEN

Moja powyższa odpowiedź będzie zużywać trochę mocy obliczeniowej, ponieważ operacja przecięcia to O(N*M) . Oto sposób na zrobienie tego, który wymaga większej ilości pamięci, ale będzie miał szybsze pobieranie, ponieważ skutecznie wstępnie oblicza indeksy.

Dla każdej kombinacji właściwości utwórz klucz przechowujący zestaw:

A więc APPLE: RED ROUND FRUIT odwzoruje następujące wstawki:

SADD RED:ROUND:FRUIT APPLE
SADD :ROUND:FRUIT APPLE
SADD RED::FRUIT APPLE
SADD RED:ROUND: APPLE
SADD RED:: APPLE
SADD :ROUND: APPLE
SADD ::FRUIT APPLE
SADD ::: APPLE

Następnie, aby wykonać zapytanie, wystarczy uzyskać dostęp do odpowiedniego klucza. Na przykład * ROUND FRUIT byłoby po prostu

SMEMBERS :ROUND:FRUIT

Oczywiście w przypadku wielu wymiarów nie skaluje się to dobrze pod względem pamięci, ale pobieranie wyników będzie niezwykle szybkie.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Opcja dopasowania polecenia skanowania Redis nie działa w Pythonie

  2. nie można połączyć się z kontenerem redis z kontenera aplikacji

  3. Dekodowanie Go JSON jest bardzo powolne. Jaki byłby lepszy sposób na zrobienie tego?

  4. socket.io redis i wyciek pamięci

  5. Wprowadzenie do struktur danych Redis:skróty