TinkerPop Gremlin 查询使用多个条件执行非常慢

问题描述 投票:0回答:0

将 Amazon Neptune 与 TinkerPop Gremlin 3.5.2 结合使用

我有几个不同的节点在我的图表中共享相同的字段名称/值。

例如:

人 --> 首选项 <-- Phone

Person 和 Preferences 共享字段名称“personId”(值也匹配)。 Phone 和 Preferences 共享字段名称“phoneId”(同样这两个值也匹配)。

现在,当我尝试查询这些偏好时,我有 personId 和 phoneId。

对于这个特定的查询,我试图在图中找到两个不同的首选项。一份给 A 人和他们的电话 A,一份给 B 人和他们的电话 B。

我正在尝试通过以下方式查询:(具有“personAId”和“phoneAId”的节点或具有“personBId”和“phoneBId”的节点)

g.V().filter(
    __.and(
        __.or(
            __.and(
                has("personId", personAId),
                has("phoneId", phoneAId)
            ),
            __.and(
                has("personId", personBId),
                has("phoneId", phoneBId)
            )
        )
    )
).elementMap().dedup().fold().next();

我知道不需要第一个

__.and()
,但我正在使用我们已经设置的遍历,它需要多次遍历才能使用
__.and()
进行查询,我认为只有一个不会影响太大。

然而,对于具有大约 5M 个节点的图形,执行此查询需要将近 2 分钟。它还会返回我预期的节点,但它需要永远。

我可以单独以不同的方式查询它们,但是我必须对数据库进行 2 次查询(在这种情况下,实际上仍然比这里的 1 次查询更快)。这个查询执行得这么慢是有原因的吗?我怎样才能提高这个查询的性能?

谢谢

java gremlin tinkerpop amazon-neptune neptune
© www.soinside.com 2019 - 2024. All rights reserved.