Вычислить разницу между двумя наборами (отсортированный и простой) - PullRequest
11 голосов
/ 16 апреля 2011

Есть ли способ вычислить разницу между двумя отсортированными наборами (zset) или мне нужно использовать простые наборы для этого?

Проблема:

  1. Set F содержит список отсортированных идентификаторов (отсортированный набор, полный список)
  2. Set K содержит список идентификаторов (простой набор, подмножество F)

Я хочу получить все записи в F , по порядку, которых нет в K .

Возможно ли это использовать только Redis или мне нужно выполнить вычисления в приложении? Если да, какой путь лучше?

РЕДАКТИРОВАТЬ: SDIFF не подходит для этой цели, так как не позволяет сортировать наборы.

1 Ответ

5 голосов
/ 21 апреля 2011

Сделайте копию F как простой набор.Давайте назовем это G. Теперь выполните SDIFF.

Или ...

Сделайте копию F как отсортированный набор.Давайте назовем это G. Итерация по K и удаление каждого элемента из G.

SDIFF действительно должен работать с отсортированными наборами, обычными наборами или комбинациями.Но в настоящее время это не так.

Кроме того, если F очень большое, вы можете увидеть некоторые падения производительности, когда будете делать его копию.В этом случае создайте набор G в своей базе данных Redis, который будет обновляться при обновлении K.То есть F и G изначально равны.Когда вы добавляете элементы в K, удаляйте элемент из G.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...