在Microsoft示例中,我看到了两种检查DocumentDb对象(如Database,DocumentCollection,Document等)是否存在的方法:
首先是创建一个查询:
Database db = client.CreateDatabaseQuery().Where(x => x.Id == DatabaseId).AsEnumerable().FirstOrDefault();
if (db == null)
{
await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
}
第二个是使用"尝试捕获"块:
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;
}
}
在性能方面执行此过程的正确方法是什么?
答案 0 :(得分:8)
如果您正在尝试这样做,则应使用DocumentDB SDK中的新CreateDatabaseIfNotExistsAsync
而不是这两种方法。
就服务器资源(请求单位)而言,ReadDocumentAsync
比CreateDatabaseQuery
稍微轻一些,因此您应尽可能使用它。
答案 1 :(得分:4)
我刚刚看到微软提供的示例项目中的try / catch示例,它让我感到困惑,因为它是完全错误的:你没有使用try / catch来控制流程。
从不。
这只是糟糕的代码。新的SDK提供了CreateDatabaseIfNotExistsAsync,我只能希望不只是隐藏这个狗屎。在较旧的lib中,只需使用查询方法,除非您想要查看将要查看代码的任何人大声喊叫。