![](/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.