检查 DocumentDB 对象是否存在的正确方法
Correct way to check if DocumentDB object exists
在 Microsoft 示例中,我看到了两种检查 DocumentDb 对象(如数据库、DocumentCollection、Document 等)是否存在的方法:
首先是创建查询:
Database db = client.CreateDatabaseQuery().Where(x => x.Id == DatabaseId).AsEnumerable().FirstOrDefault();
if (db == null)
{
await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
}
第二个是使用"try catch"块:
try
{
await this.client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(databaseName));
}
catch (DocumentClientException de)
{
if (de.StatusCode == HttpStatusCode.NotFound)
{
await this.client.CreateDatabaseAsync(new Database { Id = databaseName });
}
else
{
throw;
}
}
就性能而言,执行此过程的正确方法是什么?
您应该使用 DocumentDB SDK 中的新 CreateDatabaseIfNotExistsAsync
而不是这两种方法,如果您正在尝试这样做的话。
在服务器资源(请求单位)方面,ReadDocumentAsync
比 CreateDatabaseQuery
稍微轻量级,因此您应该尽可能使用它。
我刚刚在 Microsoft 提供的示例项目之一中看到了 try/catch 示例,这让我感到困惑,因为它显然是错误的:您不使用 try/catch 来控制流程.
从来没有。
这只是错误的代码。新的 SDK 提供了 CreateDatabaseIfNotExistsAsync,我只希望它不会只是隐藏这个狗屎。在较旧的库中,只需使用查询方法,除非你想被审查代码的人大喊大叫。
在 Microsoft 示例中,我看到了两种检查 DocumentDb 对象(如数据库、DocumentCollection、Document 等)是否存在的方法:
首先是创建查询:
Database db = client.CreateDatabaseQuery().Where(x => x.Id == DatabaseId).AsEnumerable().FirstOrDefault();
if (db == null)
{
await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
}
第二个是使用"try catch"块:
try
{
await this.client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(databaseName));
}
catch (DocumentClientException de)
{
if (de.StatusCode == HttpStatusCode.NotFound)
{
await this.client.CreateDatabaseAsync(new Database { Id = databaseName });
}
else
{
throw;
}
}
就性能而言,执行此过程的正确方法是什么?
您应该使用 DocumentDB SDK 中的新 CreateDatabaseIfNotExistsAsync
而不是这两种方法,如果您正在尝试这样做的话。
在服务器资源(请求单位)方面,ReadDocumentAsync
比 CreateDatabaseQuery
稍微轻量级,因此您应该尽可能使用它。
我刚刚在 Microsoft 提供的示例项目之一中看到了 try/catch 示例,这让我感到困惑,因为它显然是错误的:您不使用 try/catch 来控制流程.
从来没有。
这只是错误的代码。新的 SDK 提供了 CreateDatabaseIfNotExistsAsync,我只希望它不会只是隐藏这个狗屎。在较旧的库中,只需使用查询方法,除非你想被审查代码的人大喊大叫。