本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理 Amazon DocumentDB 索引
Amazon DocumentDB 索引創建
在 Amazon DocumentDB 中構建索引需要做出一些決策:
它需要多快完成?
在構建發生時,集合是否無法訪問?
可以將多少執行個體運算能力分配給組建?
應該創建什麼類型的索引?
本節可協助您回答這些問題,並提供在執行個體型叢集集上建立 Amazon DocumentDB 索引的命令和監控範例。
指導方針
下列準則包括建立新索引時的基本限制和組態權衡:
Amazon DocumentDB 版本支援-雖然所有 Amazon DocumentDB 版本都支援單一工作者索引,但只有 Amazon DocumentDB 版本 4.0 和 5.0 版本才支援多個工作者索引。
效能權衡-增加索引建立程序中的工作者數量會增加CPU使用率,並讀取 Amazon DocumentDB 資料庫主要執行個體上的 IO。建立新索引所需的資源不適用於執行中的工作負載。
彈性叢集-Amazon DocumentDB 彈性叢集不支援並行索引。
Worker 數目上限-您可以設定的 Worker 數目上限取決於資料庫叢集中主要執行個體的大小。它是資料庫叢集主要執行個體總數的一半。 vCPUs 例如,您可以在具有 64 個的資料庫 .r6g.16xlarge 執行個體上執行最多 32 個工作程式。vCPUs
注意
2xlarge 執行個體類別及更低版本不支援並行工作程式。
最少工作人數-您可以配置的最少工作者數量為 1。在執行個體型叢集上建立索引的預設設定為兩個 Worker。但是,您可以通過使用「工作線程」選項將 Worker 數量減少為一個。這將使用單個 Worker 運行該進程。
索引壓縮-Amazon DocumentDB 不支持索引壓縮。索引的資料大小可能會比您使用其他選項時大。
索引多個集合-資料庫叢集主要執行個體的一半可用於在多個集合上執行索引建立的已配置 Worker。 vCPUs
索引類型-如需 Amazon DocumentDB 上支援索引類型的完整說明,請參閱此部落格文章
。
開始使用
若要在集合上開始建立索引,請使用指createIndexes
令。根據預設,命令會執行兩個 parallel Worker,將索引建立程序的速度提高兩倍。
例如,下列命令程序示範如何為文件中的「user_name」欄位建立索引,並將索引程序速度提高至四個 Worker:
使用叢集上的兩個 parallel Worker 建立索引:
db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx"}]})
若要最佳化索引建立程序的速度,您可以使用指
db.runCommand createIndexes
令中的「Worker thread」選項 ("workers":<number>
) 來指定 Worker 數目。將流程的速度提高到四個 parallel 工作者:
db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
注意
Worker 的數目越多,索引建立的進度就越快。不過,Worker 數目增加越多,主要執行個體的 IO vCPUs 和讀取 IO 上的負載就越高。確保您的叢集已充分佈建,以處理增加的負擔,而不會降低其他工作負載。
索引進度狀態
索引建立程序的運作方式是初始化、掃描集合、排序索引鍵,以及最後透過索引產生器插入索引鍵。當您在前台執行程序時,處理序最多有六個階段,以及最多 9 個階段,當您在背景執行。您可以逐階段檢視狀態指標,例如完成百分比、已掃描儲存區塊的總數、已排序的金鑰,以及插入的金鑰。
通過使用 mongo shell 中的db.currentOp()
命令監視索引過程的進度。最後一個階段的 100% 完成表明所有索引都已成功創建:
db.currentOp({"command.createIndexes": { $exists : true } })
索引構建類型
索引建置的四種類型為:
前景-前景索引構建塊所有其他數據庫操作,直到創建索引。Amazon DocumentDB 前台構建由五個階段組成。
前景(唯一)-單個文檔(唯一)前景索引構建阻止其他數據庫操作,如常規前台構建。與基本的前景構建不同,唯一構建使用額外的階段(排序鍵 2)來查找重複的鍵。前景 (唯一) 組建由六個階段組成。
背景-背景索引構建允許在創建索引時在前台運行其他數據庫操作。Amazon DocumentDB 背景構建由八個階段組成。
背景(唯一)-單個文檔(唯一)背景索引構建允許在創建索引時在前台運行其他數據庫操作。與基本的背景構建不同,獨特的構建使用額外的階段(排序鍵 2)來查找重複的鍵。背景(唯一)構建由九個階段組成。
索引構建階段
階段 | 前景 | 前景 (唯一) | 背景介紹 | 背景(獨特) |
---|---|---|---|---|
初始化 |
1 |
1 |
1 |
1 |
建築索引:初始化 |
2 |
2 |
2 |
2 |
建築索引:掃描收藏 |
3 |
3 |
3 |
3 |
建築索引:排序鍵 1 |
4 |
4 |
4 |
4 |
建築索引:排序鍵 2 |
5 |
5 |
||
建築索引:插入鍵 |
5 |
6 |
5 |
6 |
驗證:掃描索引 |
6 |
7 |
||
驗證:排序元組 |
7 |
8 |
||
驗證:掃描收集 |
8 |
9 |
初始化- createIndex 正在準備索引生成器。這個階段應該非常簡短。
建設索引:初始化-索引生成器正準備創建索引。這個階段應該非常簡短。
建築索引:掃描收集-索引生成器正在執行集合掃描以收集索引鍵。測量單位是「塊」。
注意
如果為索引建置配置了多個 Worker,則會在此階段中顯示該 Worker。「掃描收集」階段是唯一在索引建置過程中使用多個 Worker 的階段。所有其他階段都會顯示單一 Worker。
建設索引:排序鍵 1-索引生成器正在對收集的索引鍵進行排序。度量單位是「鑰匙」。
構建索引:排序鍵 2-索引生成器正在對應於死元組的收集索引鍵進行排序。此階段僅適用於唯一索引建立。度量單位是「鑰匙」。
建設索引:插入鍵-索引生成器正在將索引鍵插入到新索引中。度量單位是「鑰匙」。
驗證:掃描索引- createIndex 正在掃描索引以查找需要驗證的密鑰。測量單位是「塊」。
驗證:排序元組- createIndex 是對索引掃描階段的輸出進行排序。
驗證:掃描集合- createIndex 正在掃描集合以驗證在前兩個階段中找到的索引鍵。測量單位是「塊」。
索引建置輸出範例
在下面的輸出示例(前景索引構建)中,顯示了索引創建的狀態。「msg」欄位會指出組建的階段和完成百分比,來摘要建置進度。「Worker」欄位會指出在索引建置的該階段期間使用的 Worker 數目。「進度」欄位會顯示用來計算完成百分比的實際數字。
注意
Amazon DocumentDB 4.0 版不支持「currentIndexBuild名稱」,「消息」和「進度」字段。
{
"inprog" : [{
…
"command": {
"createIndexes": "test",
"indexes": [{
"v": 2,
"key": {
"user_name": 1
},
"name": "user_name_1"
}],
"lsid": {
"id": UUID(“094d0fba-8f41-4373-82c3-7c4c7b5ff13b”)
},
"$db": "test"
},
"currentIndexBuildName": user_name_1,
"msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%",
"workers": 1,
"progress": {
"done": 656861,
"total": 1003520
},
…
],
"ok" : 1
}