![](/img/trans.png)
[英]ArangoDB - How to set sharding key of a vertex collection with python-arango driver?
[英]How to set clusters and sharding in ArangoDB?
我想在arangoDB中使用分片。我已经制作了协调员,DBServers,如文档2.8.5所述。 但仍然可以有人仍然详细解释它,以及如何在分片之前和之前检查我的查询的性能。
测试您的应用程序可以使用本地群集完成,所有实例都在一台计算机上运行 - 如果我能正确完成,您已经这样做了吗?
ArangoDB集群由协调器和dbserver节点组成。 协调器在磁盘上没有自己的特定于用户的本地集合。 它们的作用是处理客户端的I / O,解析,优化和分发查询以及用户数据到dbserver节点。 Foxx服务也将在协调员上运行。 DBServers是此设置中的存储节点,它们保留用户数据。
要比较群集模式和非群集模式之间的性能,请在群集实例和非群集实例上导入数据集,并比较查询结果时间。 由于群集设置可以具有比单个服务器情况更多的网络通信(即,如果您进行连接),因此性能可能不同。 在物理分布式群集上,您可以实现更高的吞吐量 ,因为最终群集节点是自己的计算机,并且拥有自己的IO路径,这些路径以不同的物理硬盘结束。
在集群案例中,您使用numberOfShards
参数创建指定分片数的集合 ; shardKeys
参数可以控制跨分片的文档分发。 您应该选择该密钥,以便文档在分片中很好地分布(即不平衡到一个分片)。 numberOfShards
可以是任意值,并且不必与dbserver节点的数量相对应 - 它甚至可能更大,因此在将群集扩展到更多节点时,您可以更轻松地将分片从一个dbserver移动到新的dbserver未来适应更高的负荷。
当您在考虑集群时开发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
在这个简单的查询中, RETURN
& GATHER
-nodes位于协调器上; 包括REMOTE
-node在内的节点向上部署到DB服务器。
通常,较少的REMOTE
/ SCATTER
- > GATHER
对意味着较少的群集通信。 可以将更接近的FILTER
节点部署到*CollectionNodes
以减少通过REMOTE
node发送的文档量,性能越好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.