【发布时间】:2018-08-30 06:11:03
【问题描述】:
有没有办法以编程方式从DocumentClientException 和StatusCode == HttpStatusCode.NotFound 确定是文档、集合还是数据库找不到?
我正在尝试确定是否可以实现按需收集配置,并且仅在需要时调用 DocumentClient.CreateDocumentCollectionIfNotExistsAsync。我试图避免在发出每个请求之前调用它(大概这会为每个请求增加额外的网络往返)。同样,当我知道它无济于事时,我会尽量避免在错误恢复时调用它。
通过本地模拟器的实验,我看到在这三种情况下唯一不同的字段是DocumentClientException.Error.Message,并且只有在找不到数据库时。我通常会尽量避免基于人类可读消息的异常分派。
错误的数据库名称:
-
StatusCode:HttpStatusCode.NotFound -
Error.Message:{\"Errors\":[\"Owner resource does not exist\"]}...
正确的数据库名称,错误的集合名称:
-
StatusCode:HttpStatusCode.NotFound -
Error.Message:{\"Errors\":[\"Resource Not Found\"]}...
正确的数据库名称、正确的集合名称、错误的文档 ID:
-
StatusCode:HttpStatusCode.NotFound -
Error.Message:{\"Errors\":[\"Resource Not Found\"]}...
我打算使用带有自己报价的数据库。由于拥有自己报价的数据库中的集合很便宜,我想看看我是否can segregate each tenant in my multi-tenant application into its own collection。每个租户最终都有不同的索引和默认 TTL 策略。这组集合不是固定的,并且在运行时随着新租户的注册而动态变化。我无法预测何时需要添加新系列。没有新的租户通知:我只是收到一个需要通过在可能不存在的集合中创建文档来处理的请求。有一个垃圾收集未使用的集合的过程。
我在面向 SQL API Cosmos DB 实例的 .NET Core 2.1 应用中使用 NuGet 包 Microsoft.Azure.DocumentDB.Core 版本 1.9.1。
【问题讨论】:
-
初始化
DocumentClient时为什么不调用DocumentClient.CreateDocumentCollectionIfNotExistsAsync?无论如何它应该是一个单例。 -
@NickChapsas:更新了问题,澄清了我为什么要探索按需收集创建。
标签: azure-cosmosdb azure-cosmosdb-sqlapi