CreateContainerIfNotExistsAsync 比 GetContainer 慢吗?
CreateContainerIfNotExistsAsync is slower than GetContainer?
我正在使用 Azure cosmosDB SDK v3.As 你知道 SDK 支持 CreateContainerIfNotExistsAsync 如果没有与提供的容器 ID 匹配的容器,它会创建一个容器。这很方便。
但它会 ping Cosmos DB 以了解容器是否存在,而 GetContainer 则不会,因为 GetContainer 假定容器存在。因此,如果我的理解是正确的,CreateContainerIfNotExistsAsync 将需要再往返一次 Cosmos DB 以进行大部分操作。
所以我的问题是,从 API 的角度来看,尽可能避免使用 CreateContainerIfNotExistsAsync 会更好吗? Api 可以有更好的延迟并节省带宽。
Intellisense 中解释了不同之处,GetContainer
只是 returns 一个代理对象,它只是让您能够在该容器内执行操作,它不执行网络请求。例如,如果您尝试在该代理上读取一个项目 (ReadItemAsync) 而容器不存在(这也使该项目不存在),您将收到 404 响应。
CreateContainerIfNotExists
也不推荐用于热路径操作,因为它涉及元数据或管理平面操作:
Retrieve the names of your databases and containers from configuration or cache them on start. Calls like ReadDatabaseAsync or ReadDocumentCollectionAsync and CreateDatabaseQuery or CreateDocumentCollectionQuery will result in metadata calls to the service, which consume from the system-reserved RU limit. CreateIfNotExist should also only be used once for setting up the database. Overall, these operations should be performed infrequently.
有关详细信息,请参阅 https://docs.microsoft.com/azure/cosmos-db/sql/best-practice-dotnet
底线:除非您希望容器由于应用程序中的某些逻辑路径而被删除,否则 GetContainer
是正确的方法,它为您提供了一个代理对象,您可以使用它来执行 Item 操作而无需任何网络请求。
我正在使用 Azure cosmosDB SDK v3.As 你知道 SDK 支持 CreateContainerIfNotExistsAsync 如果没有与提供的容器 ID 匹配的容器,它会创建一个容器。这很方便。 但它会 ping Cosmos DB 以了解容器是否存在,而 GetContainer 则不会,因为 GetContainer 假定容器存在。因此,如果我的理解是正确的,CreateContainerIfNotExistsAsync 将需要再往返一次 Cosmos DB 以进行大部分操作。
所以我的问题是,从 API 的角度来看,尽可能避免使用 CreateContainerIfNotExistsAsync 会更好吗? Api 可以有更好的延迟并节省带宽。
Intellisense 中解释了不同之处,GetContainer
只是 returns 一个代理对象,它只是让您能够在该容器内执行操作,它不执行网络请求。例如,如果您尝试在该代理上读取一个项目 (ReadItemAsync) 而容器不存在(这也使该项目不存在),您将收到 404 响应。
CreateContainerIfNotExists
也不推荐用于热路径操作,因为它涉及元数据或管理平面操作:
Retrieve the names of your databases and containers from configuration or cache them on start. Calls like ReadDatabaseAsync or ReadDocumentCollectionAsync and CreateDatabaseQuery or CreateDocumentCollectionQuery will result in metadata calls to the service, which consume from the system-reserved RU limit. CreateIfNotExist should also only be used once for setting up the database. Overall, these operations should be performed infrequently.
有关详细信息,请参阅 https://docs.microsoft.com/azure/cosmos-db/sql/best-practice-dotnet
底线:除非您希望容器由于应用程序中的某些逻辑路径而被删除,否则 GetContainer
是正确的方法,它为您提供了一个代理对象,您可以使用它来执行 Item 操作而无需任何网络请求。