Когда следует избегать Redis HyperLogLog и почему?

У меня есть некоторые базовые идеи о том, как работает Redis HyperLogLog и когда его использовать.
Прежде чем использовать его, я провел тест: я pfaddзаписал несколько последовательных чисел в запись HLL (чтобы имитировать идентификаторы пользователей), и Redis вскоре дал ложное срабатывание. результат. Точнее, если вы pfadd введете номер 193 в запись HLL, будет указано, что номер 202 уже существует в этой записи. Вы можете проверить это в redis-cli :

127.0.0.1:6379> del ns
(integer) 0
127.0.0.1:6379> PFADD ns 193
(integer) 1
127.0.0.1:6379> PFADD ns 202
(integer) 0

Я знаю, что HyperLogLog — это вероятностная структура данных, но не слишком ли легко для HLL давать такие ложные срабатывания? Я что-то неправильно понял?


person adamsmith    schedule 04.09.2017    source источник


Ответы (1)


  1. Вы неправильно поняли ответ PFADD - он указывает не на существование, а на то, изменился ли внутренний регистр в структуре данных.
  2. Вы также неправильно понимаете использование HLL - он оценивает количество элементов набора (размер), а не членство в наборе.

Для похожей (в вероятностном смысле) структуры данных, которая устанавливает членство, проверьте фильтры Блума и их реализацию Redis, Rebloom (http://rebloom.io).

person Itamar Haber    schedule 04.09.2017
comment
Здравствуйте @Itamar, извините за поздний ответ. Но я все еще в замешательстве. Если ответ PFADD указывает на внутреннее изменение, а HLL просто используется для оценки кардинальности, то я думаю, что естественно проверить членство с помощью HLL: добавить одну вещь, и кардинальность записи HLL изменится - эта вещь существует, иначе нет. я прав? - person adamsmith; 05.09.2017