1

我正在对 redisgraph 进行一些测试,如果我有这样的层次结构,我想知道匹配节点的最佳做法是什么:
category => post => comment => reply
我在每个标签 _id 字段上都有索引并且我匹配根据 _id
第一种方法:通过一直匹配到目标节点:

GRAPH.QUERY test "MATCH (:category {_id:1})-[:post]->(:post {_id:1})-[comment_rel_1:comment]->(c1:comment {_id:1}) SET c1.comment = 'changed'"

方法二:直接匹配节点

GRAPH.QUERY test "MATCH (c1:comment {_id:1}) SET c1.comment = 'changed'"

如果一个巨大的数据库有很多节点和边,什么方法被认为是时间高效的?
谢谢

4

1 回答 1

2

以下是每个查询的执行计划

127.0.0.1:6379> graph.explain test "MATCH (:category {_id:1})-[:post]->(:post {_id:1})-[comment_rel_1:comment]->(c1:comment {_id:1}) SET c1.comment = 'changed'"
1) "Update"
2) "    Filter"
3) "        Conditional Traverse | (anon_2:post)->(c1:comment)"
4) "            Filter"
5) "                Conditional Traverse | (anon_0:category)->(anon_2:post)"
6) "                    Index Scan | (anon_0:category)"

127.0.0.1:6379> graph.explain test "MATCH (c1:comment {_id:1}) SET c1.comment = 'changed'"
1) "Update"
2) "    Index Scan | (c1:comment)"

如果您只想更新评论节点,无论其在图中的状态如何,第二个查询更有效。如果您只想更新以您描述的模式连接的评论节点,则第一个查询是两者之间要走的路。

于 2020-04-28T15:07:26.400 回答