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

Многопараметричен търсач на съвпадения с Redis

Това, което се опитвате да направите тук, е обърнат индекс.

За всяка колона я накарайте да се съпостави с "набор". След това можете да пресечете множествата, за да получите резултата.

И така, APPLE: RED ROUND FRUIT ще се съпостави със следните вложки:

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

След това, да кажем, че искам да направя заявка за * ROUND FRUIT , бих направил:

SINTER p2:ROUND p3:FRUIT

Тази команда заема пресечната точка на елементите в p2:ROUND set и p3:FRUIT комплект. Това ще върне всички елементи, които са ROUND и FRUIT , без да се интересува какво p1 е.

Някои други примери:

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

Отговорът ми по-горе ще използва известна изчислителна мощност, защото операцията за пресичане е O(N*M) . Ето начин да го направите, който е по-интензивен от паметта, но ще има по-бързо извличане, тъй като ефективно предварително изчислява индексите.

За всяка комбинация от свойства направете ключ, който съхранява набор:

И така, APPLE: RED ROUND FRUIT ще се съпостави със следните вложки:

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

След това, за да направите заявка, просто имате достъп до съответния ключ. Например, * ROUND FRUIT просто би било

SMEMBERS :ROUND:FRUIT

Очевидно това изобщо не се мащабира добре по отношение на паметта, когато имате много измерения, но ще бъде изключително бързо да извлечете резултатите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Има ли Redis клиент (предпочитан Java), който поддържа транзакции в Redis клъстер?

  2. Как да използвам клъстери Node.js с моето просто приложение Express?

  3. Времева сложност на zadd, когато стойността има резултат, по-висок от най-високия резултат, присъстващ в целевия сортиран набор

  4. Защо Redis SortedSet използва Skip List вместо Balanced Tree?

  5. Намерете ключ по стойност