gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:10:22 28 4
gpt4 key购买 nike

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

最佳答案

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

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

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

在集群情况下,您 create collections specifying the number of shards使用 numberOfShards范围; shardKeys参数可以控制您的文档在分片中的分布。您应该选择该 key ,以便文档在分片中分布良好(即不会不平衡到只有一个分片)。 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 -node 部署到数据库服务器。

一般少 REMOTE/ SCATTER -> GATHER对意味着更少的集群通信。越近 FILTER节点可以部署到 *CollectionNodes减少通过 REMOTE 发送的文件数量-nodes 性能越好。

关于sharding - 如何在 ArangoDB 中设置集群和分片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022729/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com