Оптимизация производительности запросов Redis-Graph (соответствие) - PullRequest
0 голосов
/ 15 декабря 2018

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

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

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

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

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

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

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

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

0 голосов
/ 15 декабря 2018

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

CREATE INDEX ON :token(token)

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

...