sql >> Databáze >  >> NoSQL >> Redis

Portování z SQLite do Redis

Myslím, že nejlepší radou je vyhnout se lpění na relačním modelu při portování něčeho z RDBMS do Redis. A kromě modelu je důležitým rozdílem zaměřit se na cesty přístupu k datům a také datové struktury.

Redis neobsahuje dotazovací jazyk (ale spíše příkazy a la memcached), a proto nemůže odpovídat na libovolné dotazy. Pokud přístupová cesta k datům není součástí datové struktury, nelze data efektivně získat.

Redis není nejlepší obchod NoSQL, pokud jde o podporu libovolných dotazů. Například by vám lépe posloužilo něco jako MongoDB.

Nyní, pokud opravdu chcete implementovat své věci pomocí Redis, můžete zkusit použít strategii podobnou tagovacím motorům. Vaše záznamy mohou být uloženy v hash objektech. Pro každou sloupcovou část libovolných dotazů, které potřebujete podporovat, vytvoříte reverzní indexy pomocí sad.

Například:

# 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"

Kombinací sjednocení, průniku, rozdílu lze implementovat složitější dotazy. Pro nediskrétní hodnoty nebo pro dotazy založené na rozsahu je třeba použít uspořádané sady (zset) (a lze je kombinovat s normálními sadami).

Tato metoda je obvykle poměrně rychlá, pokud jsou hodnoty dostatečně diskriminační. Uvědomte si prosím, že nemáte flexibilitu RDBMS (žádné regulární výrazy, žádné vyhledávání s předponou, dotazy na rozsahy, atd...)




  1. Přehled vícedokumentových ACID transakcí v MongoDB a jak je používat

  2. MongoDB Zobrazit veškerý obsah ze všech kolekcí

  3. Sériové iterování přes mongodb kurzor (čekání na zpětná volání před přechodem na další dokument)

  4. MongoDB $toObjectId