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

时间:2016-03-15 21:39:48

标签: sharding arangodb

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

1 个答案:

答案 0 :(得分:2)

测试您的应用程序可以with a local cluster, were all instances run on one machine - 这是您已经做过的,如果我能正确完成的话?

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

要比较群集和非群集模式之间的性能,请在群集实例和非群集实例上导入数据集,并比较查询结果时间。由于群集设置可以具有比单个服务器情况更多的网络通信(即,如果您进行连接),则性能可能不同。在一个 physically distributed cluster you may achieve higher throughput,因为最后集群节点是自己的机器,并且有自己的IO路径,这些路径以不同的物理硬盘结束。

在群集案例中,您使用numberOfShards参数create collections specifying the number of shards; shardKeys参数可以控制文档在分片中的分布。您应该选择该密钥,以便文档在分片中很好地分布(即不平衡到一个分片)。 numberOfShards可以是任意值,并且不必与dbserver节点的数量相对应 - 它甚至可能更大,因此您可以在扩展时更轻松地将分片从一个dbserver移动到新的dbserver您的集群将来会有更多节点适应更高的负载。

当您在考虑群集时开发AQL查询时,使用the explain command检查查询在群集中的分布方式以及可以部署过滤器的位置至关重要:

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

在这个简单的查询中RETURN& GATHER - 节点在协调员身上;包括REMOTE - 节点在内的节点将部署到DB服务器。

通常较少REMOTE / SCATTER - > GATHER对意味着更少的群集通信。可以将更近的FILTER节点部署到*CollectionNodes以减少通过REMOTE - 节点发送的文档数量,从而提高性能。