Redis GEORADIUS с одним ZSET против множества ZSET определенного размера - PullRequest
0 голосов
/ 16 мая 2018

Что будет работать быстрее, один большой ZSET с геоданными, где я буду запрашивать радиус 100 м с GEORADIUS

OR

много ZSET, где каждый ZSET отвечает за площадь 100 х 100 м, покрывающую весь мир? и назван в честь этого 100м квадратов, таких как:

left_corner1_49_2440000_28_5010000

left_corner2_49_2450000_28_5010000

.......

и все 100 метров справа и снизу внутри комплектов. Поэтому при поиске ближайшей точки я просто опущу лишние цифры в gps: 49.2440408, 28.5011694 станет 49.2440000, 28.5010000, поэтому таким образом я узнаю имя ZSETS, где просто получить все точные значения с точностью до 100 метров.

ИЛИ задать вопрос в общем виде: как имена ZSET хранятся и доступны в redis? Если у меня будет слишком много ZSETS, это повлияет на производительность при доступе к ним?

1 Ответ

0 голосов
/ 18 мая 2018

Точное сравнение этих подходов может быть выполнено только через эталонный тест, и это будет зависеть от вашего набора данных и конфигурации.Но с архитектурной точки зрения ваши плюсы и минусы:

  • BIG ZSET : меньше пропускная способность и меньше операций (циклов ЦП), выполняемых для выполнения, никаких проблем на границах (возможно дублирование со многимиZSETS), может получить пропускную способность с помощью шардинга;
  • MANY ZSETS : меньшая задержка для других операций (когда идет большой ZSET, ожидают другие команды), может получить пропускную способность с использованием шардинга и задержки скластеризация.

Что касается нижнего вопроса, я не видел код реализации, но имена наборов должны быть такими же, как и любые другие ключи, которые вы используете.Вот что FAQ Redis говорит о количестве клавиш:

Какое максимальное количество ключей может содержать один экземпляр Redis?<...>

Redis может обрабатывать до 2 ^ 32 ключей, и был протестирован на практике для обработки не менее 250 миллионов ключей на экземпляр.

ОБНОВЛЕНИЕ:

Посмотрите, что Redis docs говорит о GEORADIUS:

Сложность времени: O (N + log (M)), где N - количество элементов внутриограничивающий прямоугольник круглой области, ограниченный центром и радиусом, а M - количество элементов в индексе.

Это означает, что элементы вне вашего запроса оказывают влияние O (log (M)) наВаш запрос.Итак, 17 прыжков для 10-метровых предметов или 21 прыжок для 1б предметов, что вполне доступно.Остался вопрос, будете ли вы делать разбиение между узлами?

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