优化 Redis-Graph 查询性能(匹配)
Optimizing Redis-Graph query performance (match)
我想在 Redis 中保存一个大图,并尝试使用 RedisGraph 来完成此操作。为了对此进行测试,我首先创建了一个测试图来检查性能特征。
就我们需要的目的而言,该图相当小。
- 顶点数:约 350 万
- 边数:约1800万
这对于我们的目的来说非常有限,我们需要能够将其增加到单个数据库中的数百万条边。
在任何情况下,我都在检查 space 并且性能要求在仅加载顶点并看到 a:
的性能后停止
GRAPH.QUERY gid 'MATCH (t:token {token: "some-string"}) RETURN t'
仅仅这次检索就超过了 300 毫秒,这是绝对不能接受的。
我是否错过了提高检索性能的明显方法,或者这是目前 RedisGraph 的限制?
谢谢
添加索引会在匹配时加快很多。
CREATE INDEX ON :token(token)
根据我的调查,我认为必须至少存在一个项目实例才能创建索引,但我没有对提前创建索引然后添加大部分索引的额外开销做任何数字新节点,而不是在所有项目都在树中并且可以对它们进行整体索引之后。
如果所有节点都标记为 "token",则 redisgraph 将必须扫描 350 万个实体,将每个实体的 "token" 属性与您提供的值 ("some-string") 进行比较
为了加快速度,我建议您添加一个索引,或者使用 LIMIT 限制您希望接收的结果数量。
另外值得一提的是,由于内部内存管理,第一个查询可能比后续查询需要更长的时间。
我想在 Redis 中保存一个大图,并尝试使用 RedisGraph 来完成此操作。为了对此进行测试,我首先创建了一个测试图来检查性能特征。 就我们需要的目的而言,该图相当小。
- 顶点数:约 350 万
- 边数:约1800万
这对于我们的目的来说非常有限,我们需要能够将其增加到单个数据库中的数百万条边。 在任何情况下,我都在检查 space 并且性能要求在仅加载顶点并看到 a:
的性能后停止GRAPH.QUERY gid 'MATCH (t:token {token: "some-string"}) RETURN t'
仅仅这次检索就超过了 300 毫秒,这是绝对不能接受的。
我是否错过了提高检索性能的明显方法,或者这是目前 RedisGraph 的限制?
谢谢
添加索引会在匹配时加快很多。
CREATE INDEX ON :token(token)
根据我的调查,我认为必须至少存在一个项目实例才能创建索引,但我没有对提前创建索引然后添加大部分索引的额外开销做任何数字新节点,而不是在所有项目都在树中并且可以对它们进行整体索引之后。
如果所有节点都标记为 "token",则 redisgraph 将必须扫描 350 万个实体,将每个实体的 "token" 属性与您提供的值 ("some-string") 进行比较
为了加快速度,我建议您添加一个索引,或者使用 LIMIT 限制您希望接收的结果数量。
另外值得一提的是,由于内部内存管理,第一个查询可能比后续查询需要更长的时间。