ArangoDB图形遍历查询如何在集群中执行?

ArangoDB图形遍历查询如何在集群中执行?,arangodb,Arangodb,在SmartGraphs的描述中,似乎暗示图形遍历查询实际上沿着机器之间的边进行,直到查询完成。这就是它的实际工作原理吗?例如,假设您有以下查询,从id为12345的人开始检索1-hop、2-hop和3-hop好友: FOR p IN Person FILTER p._key == 12345 FOR friend IN 1..3 OUTBOUND p knows RETURN friend 有人能告诉我这个查询的整个生命周期,从客户端开始,到客户端的结果结束吗?与我们网站上的

在SmartGraphs的描述中,似乎暗示图形遍历查询实际上沿着机器之间的边进行,直到查询完成。这就是它的实际工作原理吗?例如,假设您有以下查询,从id为12345的人开始检索1-hop、2-hop和3-hop好友:

FOR p IN Person
  FILTER p._key == 12345
  FOR friend IN 1..3 OUTBOUND p knows
    RETURN friend

有人能告诉我这个查询的整个生命周期,从客户端开始,到客户端的结果结束吗?

与我们网站上的模式相比,实际发生的情况可能有点不同。我们所展示的是一种“最坏的情况”,数据不能被完美分割(只是为了让它更有趣)。但是让我们先回顾一下ARANGODB集群中的不同角色。如果您已经了解我们的集群术语/架构,请跳过下一段

您有一个协调器,顾名思义,它协调查询的执行,同时也是构建最终结果集并将其发送回客户机的地方。协调员是无状态的,主机是查询引擎,是Foxx服务所在的地方。实际数据以有状态的方式存储在数据库服务器上,但数据库服务器也有一个分布式查询引擎,它在所有分布式查询处理中起着至关重要的作用。集群的大脑是至少有三个代理运行RAFT共识协议的机构

当您将图形数据集分割为SmartGraph时,将查询发送给协调器时会发生以下情况。 -协调器知道查询所需的数据驻留在哪台机器上 并相应地将查询分发到相应的数据库服务器。 -每个DBserver都有自己的查询引擎,在本地处理来自协调器的传入查询,然后将中间结果发送回协调器,最终结果集在协调器中组合在一起。这是并行的。 -协调器随后将结果发送回客户端

如果您有一个完全可共享的图(例如,分支为碎片的层次结构//用例可以是物料清单或网络分析),那么您可以实现接近单个实例的性能,因为查询可以发送到正确的数据库服务器,而无需网络跳。 如果您有一个更“非结构化”的图(如社交网络),其中任意两个给定顶点之间都可以发生连接,则切分将成为一个优化问题,并且根据查询的不同,服务器之间更可能发生网络跳变。后一种情况显示在我们网站上的模式中。在他的例子中,SmartGraph功能可以将所需的网络跳数最小化,但不能完全最小化


希望这有点帮助

与我们网站上的模式相比,实际发生的情况可能有点不同。我们所展示的是一种“最坏的情况”,数据不能被完美分割(只是为了让它更有趣)。但是让我们先回顾一下ARANGODB集群中的不同角色。如果您已经了解我们的集群术语/架构,请跳过下一段

您有一个协调器,顾名思义,它协调查询的执行,同时也是构建最终结果集并将其发送回客户机的地方。协调器是无状态的,承载一个查询引擎,并且是Foxx服务的所在地。实际数据以有状态的方式存储在数据库服务器上,但数据库服务器也有一个分布式查询引擎,它在所有分布式查询处理中起着至关重要的作用。集群的大脑是至少有三个代理运行RAFT共识协议的机构

当您将图形数据集分割为SmartGraph时,将查询发送给协调器时会发生以下情况。 -协调器知道查询所需的数据驻留在哪台机器上 并相应地将查询分发到相应的数据库服务器。 -每个DBserver都有自己的查询引擎,在本地处理来自协调器的传入查询,然后将中间结果发送回协调器,最终结果集在协调器中组合在一起。这是并行的。 -协调器随后将结果发送回客户端

如果您有一个完全可共享的图(例如,分支为碎片的层次结构//用例可以是物料清单或网络分析),那么您可以实现接近单个实例的性能,因为查询可以发送到正确的数据库服务器,而无需网络跳。 如果您有一个更“非结构化”的图(如社交网络),其中任意两个给定顶点之间都可以发生连接,则切分将成为一个优化问题,并且根据查询的不同,服务器之间更可能发生网络跳变。后一种情况显示在我们网站上的模式中。在他的例子中,SmartGraph功能可以将所需的网络跳数最小化,但不能完全最小化


希望这有点帮助

谢谢你的回答!我对非结构化情况(例如社交网络)以及遍历从源顶点遍历(比如)3跳朋友的情况感到好奇。在这种情况下,三级好友不能在二级好友之前提取,二级好友只能在一级之前提取。在这种情况下,协调器是否多次往返到数据库服务器以执行查询?谢谢您的回答!我对非结构化情况(例如社交网络)以及遍历从源顶点遍历(比如)3跳朋友的情况感到好奇。在这种情况下,三级好友不能在二级好友之前提取,二级好友只能在一级之前提取。在这种情况下,协调器是否多次往返到数据库服务器以执行查询?