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

Przenoszenie z SQLite do Redis

Myślę, że najlepszą radą jest unikanie trzymania się modelu relacyjnego podczas przenoszenia czegoś z RDBMS do Redis. Poza modelem ważną różnicą jest skupienie się na ścieżkach dostępu do danych oraz strukturach danych.

Redis nie zawiera języka zapytań (ale raczej polecenia a la memcached) i dlatego nie może odpowiadać na dowolne zapytania. Jeśli ścieżka dostępu do danych nie jest częścią struktury danych, dane nie mogą być skutecznie pobierane.

Redis nie jest najlepszym sklepem NoSQL, jeśli chodzi o obsługę dowolnych zapytań. Na przykład lepiej obsługiwałbyś coś takiego jak MongoDB.

Teraz, jeśli naprawdę chcesz wdrożyć swoje rzeczy za pomocą Redis, możesz spróbować użyć strategii podobnej do tagowania silników. Twoje rekordy mogą być przechowywane w obiektach haszujących. Dla każdej części kolumny arbitralnych zapytań, które musisz obsłużyć, budujesz indeksy odwrotne za pomocą zestawów.

Na przykład:

# Set up the records: one hash object per record
hmset user:1 name Bilbo type Hobbit job None
hmset user:2 name Frodo type Hobbit job None
hmset user:3 name Gandalf type Maiar job Wizard
hmset user:4 name Aragorn type Human job King
hmset user:5 name Boromir type Human job Warrior

# Set up the indexes: one set per value per field
sadd name:Bilbo 1
sadd name:Frodo 2
sadd name:Gandalf 3
sadd name:Aragorn 4
sadd name:Boromir 5
sadd type:Hobbit 1 2
sadd type:Maiar 3
sadd type:Human 4 5
sadd job:None 1 2
sadd job:Wizard 3
sadd job:King 4
sadd job:Warrior 5

# Perform a query: we want the humans who happen to be a king
# We just have to calculate the intersection of the corresponding sets
sinterstore tmp type:Human job:King
sort tmp by nosort get user:*->name get user:*->job get user:*->type
1) "Aragorn"
2) "King"
3) "Human"

Łącząc sumę, przecięcie, różnicę, można zaimplementować bardziej złożone zapytania. W przypadku wartości niedyskretnych lub zapytań opartych na zakresach należy użyć uporządkowanych zestawów (zset) (i można je łączyć z normalnymi zestawami).

Ta metoda jest zwykle dość szybka, jeśli wartości są wystarczająco dyskryminujące. Pamiętaj, że nie masz elastyczności RDBMS (brak wyrażeń regularnych, brak wyszukiwania z prefiksem, zapytania o zakres są trudne do pokonania itp.)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak niszczyć miejsca pracy z kolejek pracowników resque?

  2. problem z połączeniem z redis, aby przejść z wieloma pracownikami kues

  3. Node.js i Redis; Czekam na zakończenie pętli

  4. Przełączanie awaryjne klastra

  5. Spring Data Redis:Redis Pipeline zwraca zawsze wartość null