我正在使用 Azure cosmosDB SDK v3。如您所知,SDK 支持CreateContainerIfNotExistsAsync,如果沒有與提供的容器 ID 匹配的容器,它會創建一個容器。這很方便。但是它會 ping Cosmos DB 以了解容器是否存在,而GetContainer則不會,因為GetContainer假定容器存在。因此,如果我的理解是正確的,那么CreateContainerIfNotExistsAsync將需要再一次往返 Cosmos DB 以進行大多數操作。
所以我的問題是,從 API 的角度來看,盡可能避免使用CreateContainerIfNotExistsAsync會更好嗎?Api 可以有更好的延遲并節省帶寬。
uj5u.com熱心網友回復:
Intellisense 中解釋了不同之處GetContainer,它只回傳一個代理物件,它只是讓您能夠在該容器內執行操作,它不執行網路請求。例如,如果您嘗試讀取該代理上的專案 (ReadItemAsync) 并且容器不存在(這也會使專案不存在),您將收到 404 回應。
CreateContainerIfNotExists 也不推薦用于熱路徑操作,因為它涉及元資料或管理平面操作:
從配置中檢索資料庫和容器的名稱或在啟動時快取它們。ReadDatabaseAsync 或 ReadDocumentCollectionAsync 和 CreateDatabaseQuery 或 CreateDocumentCollectionQuery 之類的呼叫將導致對服務的元資料呼叫,這些呼叫會消耗系統保留的 RU 限制。CreateIfNotExist 也應該只用于設定資料庫一次。總的來說,這些操作應該很少執行。
有關更多詳細資訊,請參閱https://docs.microsoft.com/azure/cosmos-db/sql/best-practice-dotnet
底線:除非您希望容器因應用程式中的某些邏輯路徑而被洗掉GetContainer,否則這是正確的方法,它為您提供了一個代理物件,您可以使用它來執行 Item 操作而無需任何網路請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346414.html
標籤:天蓝色 接口 azure-cosmosdb azure-cosmosdb-sqlapi
