Redis
 sql >> база данни >  >> NoSQL >> Redis

Пренасяне от SQLite към Redis

Мисля, че най-добрият съвет е да избягвате да се придържате към релационния модел, когато пренасяте нещо от RDBMS към Redis. И извън модела, важна разлика е да се съсредоточи върху пътищата за достъп до данни, както и върху структурите на данните.

Redis не включва език за заявки (а по-скоро командва a la memcached) и следователно не може да отговаря на произволни заявки. Ако път за достъп до данните не е част от структурата на данните, тогава данните не могат да бъдат ефективно извлечени.

Redis не е най-добрият магазин за NoSQL, когато става въпрос за поддръжка на произволни заявки. Например, по-добре ще бъдете обслужени от нещо като MongoDB.

Сега, ако наистина искате да внедрите вашите неща с Redis, можете да опитате да използвате стратегия, подобна на маркиращите машини. Вашите записи могат да се съхраняват в хеш обекти. За всяка колонна част от произволните заявки, които трябва да поддържате, изграждате обратни индекси с помощта на набори.

Например:

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

Чрез комбиниране на обединение, пресичане, разлика могат да се реализират по-сложни заявки. За недискретни стойности или за заявки, базирани на диапазон, трябва да се използват подредени набори (zset) (и могат да се комбинират с нормални набори).

Този метод обикновено е доста бърз, ако стойностите са достатъчно дискриминантни. Моля, имайте предвид, че нямате гъвкавостта на RDBMS (без регулярни изрази, без търсене с префикс, заявките за диапазон са трудност за справяне и т.н. ...)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Извадете атомно множество стойности от структурата на данните на Redis?

  2. Състояние на сесията с Azure Redis Cache не работи на множество екземпляри

  3. Как да избегнем обажданията на Redis в ограниченията на скриптовете на Lua?

  4. как да получите достъп до сесия на сокет във всички клъстери

  5. Данни за пролетната сесия Redis - Вземете валидни сесии, текущ потребител от Redis Store