Распределенный поиск Redis с использованием индекса Redis
В настоящее время мы используем поиск Redis в качестве базы данных векторов. Мы развернули кластер стека Redis с 6 узлами: 3 главными и 3 ведомыми. Наши данные разделены на несколько групп, для каждой группы мы создали индекс для быстрого поиска, и для каждой группы данных может быть несколько индексов.
Теперь проблема в том, что индекс создается на одном узле, а соответствующие данные перемещаются на все узлы. И можно искать только те данные, которые доступны в узле индекса.
Мы использовали синтаксис {}, чтобы заставить данные перемещаться к отдельным узлам, как это предложено Redis, следующим образом.
HSET key_{abc}_doc <value>
здесь все данные с ключом abc будут поступать в один и тот же узел, поскольку они будут использовать один и тот же хэш-слот.
Теперь мы хотим, чтобы этот индекс и соответствующие данные направлялись в один и тот же узел, чтобы его можно было снова найти. Кинлди предлагает жизнеспособное решение.
Версия поиска Redis: 2.0+
1 ответ
Когда вы запускаете кластер, ключи распределяются по узлам. Чтобы выполнить поиск по всем узлам, вам нужно что-то, что:
- Создайте индексы на всех узлах.
- Найдите все узлы и агрегируйте результаты.
Redis Cloud и Redis Enterprise позаботятся об этом за вас, но если вы выполняете развертывание, RSCoordinator — это инструмент, на который вам стоит обратить внимание.
Заметьте, я сам им не пользовался, но он создан для решения именно этой проблемы.