Фильтрация Redis Hash Записи

Я использую redis для хранения хэшей с ~ 100 тыс. Записей на хеш. Я хочу реализовать фильтрацию (фасетирование) записей в заданном хэше. Обратите внимание, что хеш-запись может принадлежать n фильтрам.

После прочтения this и this похоже, что я должен:

  1. Реализовать отсортированный набор для каждого фильтра. Значения в SET соответствуют ключам в HASH.
  2. Получить ключи HASH из данного набора фильтров.
  3. Как только я получу ключи HASH от SET, извлеките соответствующие записи из HASH. Это должно дать мне все записи, которые принадлежат фильтру.

Во-первых, верен ли вышеупомянутый подход на высоком уровне?

Предполагая, что подход в порядке, бит, который мне не хватает, - это наиболее эффективная реализация для получения HASH записи? Правильно ли я думаю, что, получив ключи HASH, я должен использовать PIPELINE для постановки в очередь нескольких команд HGETALL, проходящих через каждый ключ HASH? Есть ли лучший подход?

Меня беспокоит использование PIPELINE, потому что я считаю, что он заблокирует всех других клиентов во время обслуживания команды. Я буду листать отфильтрованные результаты с 500 результатами на страницу. Когда несколько клиентов на основе браузера выполняют фильтрацию, не говоря уже о внутренних процессах, которые заполняют SET и HASH, похоже, что существует вероятность большого конфликта, если PIPELINE действительно блокируется. Может ли кто-нибудь высказать свое мнение по этому поводу?

Если это поможет, я использую 2.2.4 redis, predis для веб-клиентов и servicestack для серверной части.

Спасибо, Paul

12
задан Paul 15 April 2011 в 10:03
поделиться