gpt4 book ai didi

azure - CreateContainerIfNotExistsAsync 比 GetContainer 慢?

转载 作者:行者123 更新时间:2023-12-03 04:55:25 24 4
gpt4 key购买 nike

我正在使用 Azure cosmosDB SDK v3。如您所知,SDK 支持 CreateContainerIfNotExistsAsync,如果没有与提供的容器 ID 匹配的容器,它会创建一个容器。这很方便。但它会通过 ping Cosmos DB 来了解容器是否存在,而 GetContainer 则不会,因为 GetContainer 假定容器存在。因此,如果我的理解正确的话,CreateContainerIfNotExistsAsync 将需要再一次往返 Cosmos DB 来执行大多数操作。

所以我的问题是,从 API 角度来看,尽可能避免使用 CreateContainerIfNotExistsAsync 会更好吗? Api可以有更好的延迟并节省带宽。

最佳答案

Intellisense 中解释了不同之处,GetContainer 仅返回一个代理对象,该对象仅使您能够在该容器内执行操作,它不执行任何网络请求。例如,如果您尝试读取该代理上的项目 (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://learn.microsoft.com/azure/cosmos-db/sql/best-practice-dotnet了解更多详情

底线:除非您希望容器由于应用程序中的某些逻辑路径而被删除,否则 GetContainer 是正确的方法,它为您提供了一个代理对象,您可以使用该代理对象来执行 Item 操作,而无需使用该代理对象。任何网络请求。

关于azure - CreateContainerIfNotExistsAsync 比 GetContainer 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69802260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com