将 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 次查询更快)。这个查询执行得这么慢是有原因的吗?我怎样才能提高这个查询的性能?
谢谢