Оптимизация производительности запросов Redis-Graph (соответствие)

Я хочу сохранить большой график в Redis и пытался сделать это с помощью RedisGraph. Чтобы проверить это, я сначала создавал тест-график для проверки характеристик производительности. График довольно мал для тех целей, которые нам нужны.

  • Вершины: около 3,5 миллионов
  • Края: около 18 миллионов

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

GRAPH.QUERY gid 'MATCH (t:token {token: "some-string"}) RETURN t' 

Более 300 миллисекунд только для этого поиска, что абсолютно недопустимо.

Я упускаю очевидный способ улучшить производительность поиска или это ограничение RedisGraph?

Спасибо

2 ответа

Решение

Добавление индекса значительно ускорит процесс сопоставления.

CREATE INDEX ON :token(token)

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

В случае, если все узлы помечены как "токен", тогда redisgraph должен будет сканировать 3,5 миллиона объектов, сравнивая каждый атрибут "токен" объекта со значением, которое вы указали ("some-string")

для ускорения я бы порекомендовал либо добавить индекс, либо ограничить количество результатов, которые вы хотели бы получить с помощью LIMIT.

Также стоит упомянуть, что первый запрос, который должен быть обработан, может занять больше времени, чем последующие, из-за управления внутренней памятью.

Другие вопросы по тегам