【问题标题】:Optimizing Redis-Graph query performance (match)优化 Redis-Graph 查询性能(匹配)
【发布时间】:2018-12-15 10:17:35
【问题描述】:

我想在 Redis 中保存一个大图,并尝试使用 RedisGraph 完成此操作。为了测试这一点,我首先创建了一个测试图来检查性能特征。 对于我们需要的目的,该图相当小。

  • 顶点:约 350 万个
  • 边数:约 1800 万

这对于我们的目的来说非常有限,我们需要能够在单个数据库中将其增加到数以百万计的边缘。 无论如何,我正在检查空间和性能要求,但仅在加载顶点并看到以下性能后就停止了:

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

仅此检索就超过 300 毫秒,这是绝对不可接受的。

我是否缺少提高检索性能的明显方法,还是目前 RedisGraph 的限制?

谢谢

【问题讨论】:

    标签: performance graph redis redisgraph


    【解决方案1】:

    如果所有节点都被标记为“token”,那么 redisgraph 将不得不扫描 350 万个实体,将每个实体的“token”属性与您提供的值(“some-string”)进行比较

    为了加快速度,我建议您添加索引,或使用 LIMIT 限制您希望收到的结果数量。

    另外值得一提的是,由于内部内存管理,第一个查询可能需要比后续查询更长的时间。

    【讨论】:

    • 是否有关于如何建模顶点的文档?类似于说 SQL 中的数据模型设计说(规范化)文档
    【解决方案2】:

    添加索引会在匹配时加快速度很多

    CREATE INDEX ON :token(token)
    

    根据我的调查,我认为该项目的至少一个实例必须存在才能创建索引,但我没有对提前创建索引然后添加大部分新节点的额外开销做任何数字,而不是在所有项目都在树中并且它们可以被整体索引之后。

    【讨论】:

    • 这是有道理的。我还没有尝试创建索引,因为它没有包含在任何地方的 redis-graph 文档中。甚至提到不支持索引。我现在检查了语法,它似乎确实有效,我会在明天在家中对我的大型设备进行测试时报告。
    • 它在那里,只是没有很好的路标 - oss.redislabs.com/redisgraph/commands/#indexing
    • 我不敢相信我错过了。感谢您的答复。我创建了一个包含 350 万个节点和值为“test-number”的简单字符串的测试集,然后在它们上创建了一个索引。该索引将搜索速度从 1400 毫秒提高到了 ~0.2-22 毫秒。内存使用量从 88MB 增加到 342MB。
    • 我有同样的问题,我有 100 个字段,所以为每个人和子集创建一个索引将是巨大的!应该有一种方法可以在没有索引的情况下快速检索它,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2016-12-01
    • 2020-07-05
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多