如何在ArangoDB中设置集群和分片?

Has*_*ari 5 sharding arangodb

我想在arangoDB中使用分片.我已经制作了协调员,DBServers,如文档2.8.5所述.但仍然可以有人仍然详细解释它,以及如何在分片之前和之前检查我的查询的性能.

dot*_*art 2

测试您的应用程序可以使用本地集群来完成,所有实例是否都在一台机器上运行- 如果我理解正确的话,您已经这样做了?

ArangoDB 集群由协调器节点和数据库服务器节点组成。协调器在磁盘上没有自己的用户特定的本地集合。它们的作用是处理客户端的 I/O,解析、优化查询和用户数据并将其分发到数据库服务器节点。Foxx 服务也将在协调器上运行。DBServer 是此设置中的存储节点,它们保存用户数据。

要比较集群模式和非集群模式之间的性能,您可以在集群实例和非集群实例上导入数据集,然后比较查询结果时间。由于集群设置可以比单服务器情况有更多的网络通信(即,如果您进行连接),因此性能可能会有所不同。在 物理分布式集群上,您可以实现更高的吞吐量,因为最终集群节点是自己的机器,并且有自己的 IO 路径,这些路径结束于单独的物理硬盘。

在集群情况下,您可以使用参数创建指定分片数量的集合numberOfShards;该shardKeys参数可以控制文档在分片上的分布。您应该选择该密钥,以便文档在各个分片之间良好分布(即不会仅对一个分片不平衡)。它numberOfShards可以是任意值,并且不必与数据库服务器节点的数量相对应 - 它甚至可以更大,这样当您将集群扩展到更多节点时,您可以更轻松地将分片从一个数据库服务器移动到新的数据库服务器。未来适应更高的负载。

当您在开发 AQL 查询时考虑到集群使用时,必须使用explain 命令来检查查询在集群中的分布情况以及可以部署过滤器的位置:

db._create("sharded", {numberOfShards: 2})
db._explain("FOR x IN sharded RETURN x")
Query string:
 FOR x IN sharded RETURN x

Execution plan:
 Id   NodeType                  Est.   Comment
  1   SingletonNode                1   * ROOT
  2   EnumerateCollectionNode      1     - FOR x IN sharded /* full collection scan */
  6   RemoteNode                   1       - REMOTE
  7   GatherNode                   1       - GATHER
  3   ReturnNode                   1       - RETURN x

Indexes used:
 none

Optimization rules applied:
 Id   RuleName
  1   scatter-in-cluster
  2   remove-unnecessary-remote-scatter
Run Code Online (Sandbox Code Playgroud)

在这个简单的查询中,RETURN&GATHER节点位于协调器上;包括-node在内的节点向上REMOTE部署到DB-server。

一般来说,较少的REMOTE/ SCATTER->GATHER对意味着较少的集群通信。FILTER可以部署的节点越近*CollectionNodes,以减少通过节点发送的文档量,REMOTE性能就越好。