可以测试您的应用程序对于本地集群,所有实例都在一台机器上运行吗 https://docs.arangodb.com/Installing/Cluster.html- 如果我没理解错的话,你已经这么做了?
ArangoDB 集群由协调器节点和数据库服务器节点组成。协调器在磁盘上没有自己的用户特定的本地集合。它们的作用是处理客户端的 I/O,解析、优化查询和用户数据并将其分发到数据库服务器节点。 Foxx 服务也将在协调器上运行。 DBServer 是此设置中的存储节点,它们保存用户数据。
要比较集群模式和非集群模式之间的性能,您可以在集群实例和非集群实例上导入数据集,然后比较查询结果时间。由于集群设置可以比单服务器情况有更多的网络通信(即,如果您进行连接),因此性能可能会有所不同。上一个物理分布式集群您可以获得更高的吞吐量 https://mesosphere.com/blog/2015/11/30/arangodb-benchmark-dcos/,因为最终集群节点是自己的机器,并且有自己的 IO 路径,最终位于单独的物理硬盘上。
在集群情况下你创建指定分片数量的集合 https://docs.arangodb.com/Collections/DatabaseMethods.html#create使用numberOfShards
范围;这shardKeys
参数可以控制文档在分片上的分布。您应该选择该键,以便文档在各个分片之间良好分布(即不会仅在一个分片上不平衡)。这numberOfShards
可以是任意值,并且不必与数据库服务器节点的数量相对应 - 它甚至可以更大,以便将来在将集群扩展到更多节点时可以更轻松地将分片从一个数据库服务器移动到新的数据库服务器以适应更高的负载。
当您在开发 AQL 查询时考虑到集群使用时,必须使用解释命令 https://docs.arangodb.com/Aql/Optimizer.html检查查询如何在集群中分布,以及过滤器可以部署在哪里:
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
-node 部署到数据库服务器。
一般情况下较少REMOTE
/ SCATTER
-> GATHER
对意味着更少的集群通信。越近FILTER
节点可以部署到*CollectionNodes
减少通过以下方式发送的文件数量REMOTE
- 节点越多,性能越好。