本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon DocumentDB 8.0 中使用檢視
-
Amazon DocumentDB 8.0 現在支援檢視。檢視 函數做為虛擬集合,這些集合會根據指定的彙總操作呈現資料。當您建立檢視時,您可以定義查詢,從一或多個來源集合轉換資料。Amazon DocumentDB 8.0 會在每次存取檢視時執行此查詢,而不會消耗額外的儲存資源。與標準集合不同,Amazon DocumentDB 8.0 中的檢視不會將文件存放在磁碟上,因此是將轉換或篩選資料呈現給應用程式的有效解決方案。若要在 Amazon DocumentDB 中建立檢視,您可以使用 createView 命令或 db.createView() 協助程式方法:
db.createView("viewName","sourceCollection", [ { $match: { status: "active" } }, { $project: { _id: 1, name: 1, email: 1 } } ] )這會根據「sourceCollection」建立名為「viewName」的檢視,其中僅包含作用中的文件和專案 _id、名稱和電子郵件欄位。Amazon DocumentDB 中的檢視為唯讀。檢視上的寫入操作將傳回錯誤。若要使用大型資料集獲得最佳效能,您可以建構檢視管道以最大化效率。對於複雜的彙總管道,建議使用 $match 階段作為管道的第一個階段或早期階段,以減少後續階段需要處理的文件數量,從而提高查詢效能。
最佳實務
以下列出一些要遵循檢視的最佳實務。
早期篩選:在檢視管道的早期使用 $match 階段,以減少處理的資料量。
避免複雜彙總:對於具有複雜彙總的經常存取檢視,請考慮建立具有預先計算結果的個別集合,這些結果會定期更新。
索引規劃:確保在檢視管道中使用的欄位,特別是在 $match 和 $sort 操作中,在來源集合上正確編製索引。
查詢最佳化:使用 explain 命令來了解檢視查詢的執行方式,並據此進行最佳化。
檢視的替代方案:考慮到 Amazon DocumentDB 和 MongoDB 檢視之間的功能差異,在遇到限制時,請考慮使用定期集合搭配排程更新作為檢視的替代方案。
彙整工具運算子相容性
Amazon DocumentDB 在檢視定義中支援許多彙總運算子,同時繼續擴展相容性。使用檢視時,請專注於這些支援的運算子:
$match 用於篩選文件
$project 用於欄位選擇和轉換
$addFields 用於新增運算欄位
用於排序結果的 $sort
$limit 和 $skip 分頁
有些專業運算子,例如 $currentOp、$replaceRoot 和 $geoNear,目前適用於直接彙總查詢,而不是檢視定義。
利用索引和檢視
Amazon DocumentDB 8.0 中的檢視會使用基礎集合的索引。因此,您無法直接在檢視上建立、捨棄或重建索引。不過,在來源集合上精心設計的索引可以大幅改善檢視查詢效能 以下是最佳化檢視查詢效能的一些步驟:
確保檢視管道中使用的來源集合欄位上存在適當的索引,特別是在 $match 和 $sort 操作中
使用 explain() 方法來分析查詢執行計畫並驗證索引用量。例如,
db.viewName.find({...}).explain()