我想在arangoDB.I中使用切分,我已经设置了协调员,如文档2.8.5中提到的DBServers。但是,仍然可以有人解释它的细节,以及我如何能够检查我的查询在切分前后的性能。
发布于 2016-03-16 23:30:51
测试您的应用程序可以完成对于本地集群,是否所有实例都运行在一台计算机上? --如果我得到的是正确的话,这就是您已经做过的吗?
ArangoDB集群由协调器和dbserver节点组成。协调员在磁盘上没有自己的特定于用户的本地集合。它们的作用是与客户机一起处理I/O,解析、优化并将查询和用户数据分发到dbserver节点。Foxx服务也将在协调员上运行。DBServers是此设置中的存储节点,它们保存用户数据。
若要比较群集模式和非群集模式之间的性能,可以在群集实例和非聚集实例上导入数据集,并比较查询结果时间。由于集群设置可以有比单个服务器情况更多的网络通信(即,如果要进行连接),所以性能可能有所不同。在物理分布式集群您可以获得更高的吞吐量。上,因为集群节点最终是自己的机器,并且有自己的IO路径,这些路径在单独的物理硬盘上结束。
在集群情况下,使用创建指定碎片数量的集合参数进行numberOfShards;shardKeys参数可以控制文档在碎片之间的分布。您应该选择该键,这样文档就可以很好地分布在各个碎片之间(也就是说,不对一个碎片进行不平衡)。numberOfShards可以是一个任意值,不需要腐蚀到dbserver节点的数量--它甚至可能更大,因此在将来将集群扩展到更多的节点以适应更高的负载时,可以更容易地将碎片从一个dbserver移动到一个新的dbserver。
在考虑集群使用的情况下开发AQL查询时,必须使用解释命令检查查询是如何在集群中分布的,以及可以在何处部署过滤器:
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-nodes发送的文档数量,性能越好。
https://stackoverflow.com/questions/36022729
复制相似问题