2012-06-06 12 views

Odpowiedz

27

W przypadku Redis relacje są zazwyczaj reprezentowane przez zestawy. Zestaw może być używany do reprezentowania relacji jednokierunkowej, więc potrzebny jest jeden zestaw na obiekt do reprezentowania relacji wiele do wielu.

Nie ma sensu próbować porównywać relacyjny model bazy danych ze strukturami danych Redis. Dzięki Redis wszystko jest przechowywane w sposób zdenormalizowany.

Przykład:

# Here are my categories 
> hmset category:1 name cinema ... more fields ... 
> hmset category:2 name music ... more fields ... 
> hmset category:3 name sports ... more fields ... 
> hmset category:4 name nature ... more fields ... 

# Here are my users 
> hmset user:1 name Jack ... more fields ... 
> hmset user:2 name John ... more fields ... 
> hmset user:3 name Julia ... more fields ... 

# Let's establish the many-to-many relationship 
# Jack likes cinema and sports 
# John likes music and nature 
# Julia likes cinema, music and nature 

# For each category, we keep a set of reference on the users 
> sadd category:1:users 1 3 
> sadd category:2:users 2 3 
> sadd category:3:users 1 
> sadd category:4:users 2 3 

# For each user, we keep a set of reference on the categories 
> sadd user:1:categories 1 3 
> sadd user:2:categories 2 4 
> sadd user:3:categories 1 2 4 

Kiedy już mamy tę strukturę danych, jest łatwy do kwerendy go przy użyciu zestaw algebry:

# Categories of Julia 
> smembers user:3:categories 
1) "1" 
2) "2" 
3) "4" 

# Users interested by music 
> smembers category:2:users 
1) "2" 
2) "3" 

# Users interested by both music and cinema 
> sinter category:1:users category:2:users 
1) "3" 
+0

Dziękujemy! Jestem nowy w Redis i to jest bardzo interesujące :) – starikovs

+0

Jak otrzymamy nazwę kategorii kategoria smembers: 2: użytkownicy z tym, ponieważ daje numer kategorii – vaibhav

4

IMHO Redis nie służy do tworzenia kwerend strukturalnych (SQL), ale do szybkiego dostępu do danych, co można zrobić: utworzyć "tabelę" z identyfikatorem użytkownika jako kluczem, a dane to lista z przyjaciółmi, na przykład . Następnie wyszukujesz identyfikator użytkownika i przetwarzasz to, czego potrzebujesz. To przeciwieństwo normalizacji. Jeśli kolejność danych jest ważna, na przykład aktualizacje statusu, to, co robisz, to pchanie i przesyłanie danych do list. Na przykład tabela "status" ma identyfikator użytkownika jako klucz, a dane to lista. Przesyłasz dane, a następnie przesyłasz zapytanie do ostatnich 20 elementów, na przykład.

Powiązane problemy