Redis :Как пересечь «нормальный» набор с отсортированным набором?

Предположим, у меня есть набор (или отсортированный набор или список, если это было бы лучше)A от 100 до 1000 строк.

Затем у меня есть отсортированный набор B многих других строк, скажем, один миллион.

Теперь C должно быть пересечением A и B(строк конечно ).

Я хочу иметь каждый кортеж (X, SCORE _OF _X _IN _B ), где X находится в C .

Есть идеи?

У меня две идеи:

  1. Interstore
    • сохранить A в отсортированном наборе, где все оценки равны 0
    • промежуточное сохранение в D
    • получить каждый элемент D
    • удалить D
  2. Простой цикл в клиенте
    • зациклиться на A в моей клиентской программе
    • получить zscore для каждой строки

Хотя 1. имеет слишком много накладных расходов на стороне redis (Например, приходится писать. На странице Redis также указывается довольно высокая временная сложностьhttp://redis.io/commands/zinterstore), 2. будет иметь |A| подключения к базе данных и не будет хорошим выбором.

Возможно, я мог бы написать скрипт redis/lua, который будет работать как zscore, но с произвольным количеством строк, но я не уверен, что мой хостер разрешает скрипты...

Поэтому я просто хотел спросить ТАК, если есть элегантное и быстрое решение без сценариев!

19
задан user562529 8 May 2012 в 14:41
поделиться