本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon DocumentDB 彈性集群:它是如何工作的
本節中的主題提供支援 Amazon DocumentDB 彈性叢集的機制和功能的相關資訊。
Amazon DocumentDB 彈性集群分片
Amazon DocumentDB 彈性叢集使用雜湊式分割,跨分散式儲存系統分割資料。分片 (又稱為分割) 會將大型資料集分割成跨多個節點的小型資料集,讓您能夠在垂直擴展限制之外擴充資料庫。彈性叢集在 Amazon DocumentDB 中使用運算和儲存的分離 (或「解耦」),讓您能夠彼此獨立擴展。彈性叢集不會透過在計算節點之間移動小塊資料來重新分割集合,而是在分散式儲存系統中有效地複製資料。
碎片定義
碎片命名法的定義:
碎片-碎片為彈性集群提供計算。分片默認情況下將有兩個節點。您最多可以配置 32 個碎片,並且每個碎片最多可以有 64 個。vCPUs
碎片索引鍵 — 碎片索引鍵是分割集合中JSON文件中的必填欄位,彈性叢集用來將讀取和寫入流量分配給相符的碎片。
碎片集合-碎片集合是一個集合,其數據分佈在數據分區中的彈性集群中。
分區 — 分區是分片數據的邏輯部分。當您建立分割集合時,資料會根據碎片索引鍵自動組織成每個碎片內的分割區。每個碎片都有多個分區。
在配置的碎片之間分配數據
創建一個具有許多唯一值的分片鍵。良好的碎片金鑰會在基礎碎片之間平均分割資料,為您的工作負載提供最佳的輸送量和效能。下列範例是使用名為「user_id」的碎片索引鍵的員工姓名資料:
DocumentDB 使用散列分片在基礎碎片中對數據進行分區。其他數據的插入和分佈方式相同:
當您透過新增其他碎片來擴展資料庫時,Amazon DocumentDB 會自動重新分配資料:
彈性叢集移轉
Amazon DocumentDB 支持將 MongoDB 的分片數據遷移到彈性集群。支援離線、線上和混合式移轉方法。如需詳細資訊,請參閱遷移到 Amazon DocumentDB。
彈性叢集擴展
Amazon DocumentDB 彈性叢集可增加彈性叢集中的碎片數量 (向外擴充),以及 vCPUs 套用至每個碎片的數量 (擴展)。您還可以根據需要減少碎片數量和計算容量(vCPUs)。
如需縮放最佳作法,請參閱擴展彈性叢集。
注意
也可以使用叢集層級調整。如需詳細資訊,請參閱擴展 Amazon DocumentDB 叢集。
彈性群集可靠性
Amazon DocumentDB 的設計是為了可靠、耐用和容錯。為了提高可用性,彈性叢集會在不同可用區域中的每個碎片部署兩個節點。Amazon DocumentDB 包含數種自動功能,使其成為可靠的資料庫解決方案。如需詳細資訊,請參閱Amazon DocumentDB 可靠性。
彈性叢集儲存與可用性
Amazon DocumentDB 資料存放在叢集磁碟區中,叢集磁碟區是使用固態硬碟 () SSDs 的單一虛擬磁碟區。叢集磁碟區由六份資料副本組成,這些副本會在單 AWS 一區域中跨多個可用區域自動複寫。此複寫有助於確保您的資料具有高耐用性,同時降低資料遺失的機率。它也有助於確保您的叢集在容錯移轉時提供更高的可用性,因為資料副本已存在於其他可用區域。如需儲存、高可用性和複寫的詳細資訊,請參閱Amazon DocumentDB運作方式。
Amazon DocumentDB 4.0 和彈性集群之間的功能差異
Amazon DocumentDB 4.0 和彈性叢集之間存在下列功能差異。
來自
top
和collStats
由碎片分區的結果。對於分片集合,數據分配在多個分區和collScans
從分區匯總的collStats
報告。叢集碎片計數變更時,會重設來自
top
和collStats
分片集合的集合統計資料。備份內建角色現在支援
serverStatus
。動作-具備備份角色的開發人員和應用程式可以收集有關 Amazon DocumentDB 叢集狀態的統計資料。SecondaryDelaySecs
欄位會slaveDelay
在replSetGetConfig
輸出中取代。該
hello
命令替換isMaster
-hello
返回描述彈性集群的作用的文檔。彈性叢集中的
$elemMatch
運算子只會比對陣列第一個巢狀層級中的文件。在 Amazon DocumentDB 4.0 中,運營商在返回匹配的文檔之前遍歷所有級別。例如:
db.foo.insert( [ {a: {b: 5}}, {a: {b: [5]}}, {a: {b: [3, 7]}}, {a: [{b: 5}]}, {a: [{b: 3}, {b: 7}]}, {a: [{b: [5]}]}, {a: [{b: [3, 7]}]}, {a: [[{b: 5}]]}, {a: [[{b: 3}, {b: 7}]]}, {a: [[{b: [5]}]]}, {a: [[{b: [3, 7]}]]} ]); // Elastic Clusters > db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0}) { "a" : [ { "b" : [ 5 ] } ] } // Docdb 4.0: traverse more than one level deep > db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0}) { "a" : [ { "b" : [ 5 ] } ] } { "a" : [ [ { "b" : [ 5 ] } ] ] }
Amazon DocumentDB 4.0 中的「$」投影返回所有字段的所有文檔。使用彈性叢集時,具有「$」投影的
find
命令會傳回符合僅包含符合「$」投影之欄位的查詢參數的文件。在彈性集群中,具有
$regex
和$options
查詢參數的find
命令返回錯誤:「無法在 $ 正則表達式和 $ 選項中設置選項」。
使用彈性叢集,
$indexOfCP
現在會在下列情況傳回「-1」:在中找不到子字串
string expression
,或start
是一個大於end
,或start
是大於字串位元組長度的數字。
在 Amazon DocumentDB 4.0,當
start
位置是一個大於end
或字符串的字節長度的數字$indexOfCP
返回「0」。使用彈性叢集時
_id fields
,中的投影作業 (例如:{"_id.nestedField" : 1}
) 會傳回僅包含投影欄位的文件。而在 Amazon DocumentDB 4.0 中,嵌套的字段投影命令不會過濾掉任何文檔。