标签: azure-cosmosdb

阅读可能不存在的Azure DocumentDB文档

我可以从Azure DocumentDB查询单个文档,如下所示:

var response = await client.ReadDocumentAsync( documentUri );
Run Code Online (Sandbox Code Playgroud)

如果文档不存在,则会抛出DocumentClientException.在我的程序中,我遇到的情况是文档可能存在,也可能不存在.是否有任何方法可以在不使用try-catch的情况下查询文档,而无需两次往返服务器,首先查询文档,然后检查文档是否存在?

.net c# azure azure-cosmosdb

11
推荐指数
2
解决办法
7304
查看次数

如何解决MongoError:连接到CosmosDB时池被破坏

我有Node.js服务,其中我使用mongo-API与Document/Cosmos DB进行通信.我的服务运行正常,并执行所有的crud操作,但1分钟后,一些mongo错误从服务中抛出.

/document-db-service/node_modules/mongodb/lib/utils.js:123
    process.nextTick(function() { throw err; });
                                  ^
MongoError: pool destroyed
    at Pool.write (/document-db-service/node_modules/mongodb-core/lib/connection/pool.js:922:12)
    at Cursor._find (/document-db-service/node_modules/mongodb-core/lib/cursor.js:286:22)
    at nextFunction (/document-db-service/node_modules/mongodb-core/lib/cursor.js:584:10)
    at Cursor.next [as _next] (/document-db-service/node_modules/mongodb-core/lib/cursor.js:692:3)
    at fetchDocs (/document-db-service/node_modules/mongodb/lib/cursor.js:856:10)
    at toArray (/document-db-service/node_modules/mongodb/lib/cursor.js:883:3)
    at Cursor.toArray (/document-db-service/node_modules/mongodb/lib/cursor.js:836:44)
    at exports.getDocsOfCollections (/document-db-service/services/collections.js:273:10)
    at Layer.handle [as handle_request] (/document-db-service/node_modules/express/lib/router/layer.js:95:5)
    at next (/document-db-service/node_modules/express/lib/router/route.js:137:13)
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会出现此错误.请建议需要进行的更改以解决此错误.

mongodb node.js npm azure-cosmosdb

11
推荐指数
1
解决办法
1697
查看次数

是否可以在Identity Server 4中使用NoSQL?

我正在尝试将NoSql数据存储集成到诸如Cosmos DB之类的Identity Server 4中.我想知道是否有人做过类似的事情和/或是否有可能.

asp.net-core identityserver4 azure-cosmosdb

11
推荐指数
1
解决办法
2498
查看次数

Azure Cosmos DB:简单计数查询的"请求率很大"

我正在使用带有Mongo适配器的Cosmos DB,通过Ruby mongo驱动程序访问.目前db中有大约2.5M的记录.

查询记录总量时,没有任何问题:

2.2.5 :011 > mongo_collection.count
D, [2017-11-24T11:52:39.796716 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | STARTED | {"count"=>"xp_events", "query"=>{}}
D, [2017-11-24T11:52:39.954645 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | SUCCEEDED | 0.15778699999999998s
 => 2565825
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试根据简单的位置计算找到的记录数量时,我遇到了Request rate is large错误:

2.2.5 :014 > mongo_collection.find(some_field: 'some_value').count
D, [2017-11-24T11:56:11.926812 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | STARTED | {"count"=>"some_table", "query"=>{"some_field"=>"some_value"}}
D, [2017-11-24T11:56:24.629659 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | …
Run Code Online (Sandbox Code Playgroud)

azure mongodb azure-cosmosdb

11
推荐指数
1
解决办法
7058
查看次数

Azure Cosmos数据库分区密钥 - 主键是否可接受?

我们的Azure Cosmos数据库集合已经足够大,需要分区密钥.在做一些阅读时,我得到的印象是最好的分区键是提供均匀分布和更高基数的键.Microsoft的这篇文章讨论了它.

使用主键作为分区键提供均匀分布,但基数只有1.如果这是我唯一的选择,这是一件坏事吗?上述文章给出了一些示例,似乎表明主键应该在这些实例中用作分区键.对于Azure Cosmos DB,分区是逻辑的,而不是物理的.因此,它不会导致将每个文档放在自己的磁盘上,但似乎它可能导致膨胀的索引.

使用主键作为分区键是一种常见的做法吗?它有什么缺点吗?

azure database-partitioning azure-cosmosdb

11
推荐指数
2
解决办法
3258
查看次数

如何在 CosmosDB SDK v3.0 异步查询中使用 LINQ?

我一直在关注这里的官方文档:https : //docs.microsoft.com/en-us/azure/cosmos-db/sql-api-get-started#Query

但是我不知道如何在 SQL 字符串上正确使用 LINQ 表达式。我尝试了 GetItemLinqQueryable,但我不知道使用它是否正确。也不是异步的。

var db = Client.GetDatabase(databaseId);
var container = db.GetContainer(containerId);

var q = container.GetItemLinqQueryable<Person>();
var result = q.Where(p => p.Name == "Name").ToList();
Run Code Online (Sandbox Code Playgroud)

这是将 LINQ 与 Cosmos v3 一起使用的正确方法,以及如何使其异步?

azure-cosmosdb azure-cosmosdb-sqlapi

11
推荐指数
2
解决办法
8060
查看次数

从文档中提取的 PartitionKey 与 CreateItemAsync 标头中指定的不匹配

我在使用 Microsoft.Azure.Cosmos 3.2.0 版时遇到了一些问题,

跑步时

await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey("anythingIPutHere"));
Run Code Online (Sandbox Code Playgroud)

它抛出

Microsoft.Azure.Cosmos.CosmosException HResult=0x80131500
消息=响应状态代码不表示成功:400 子状态:1001 原因:(消息:{“错误”:[“从文档中提取的分区密钥与标题中指定的不匹配"]}

但如果我把

await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey(logEntity.Id));
Run Code Online (Sandbox Code Playgroud)

它有效,并且是唯一有效的情况。

我也试过

  • 将分区键的值作为属性放入对象中;
  • 甚至指定了partitionKeyJSON 属性名称但没有成功;

我查看了 Microsoft 站点上的一些指南,似乎您可以将分区键指定为某个字符串,而不必是 id 或使用对象上的属性名称指定;那么为什么会这样呢?

azure-cosmosdb

11
推荐指数
1
解决办法
1万
查看次数

使用 OFFSET 和 LIMIT 的 Cosmos DB 分页性能

我正在创建一个基于 Cosmos DB 和 ASP.NET Core 3.0 的 API。使用 Cosmos DB 4.0 预览版 1 .NET Core SDK。我使用 OFFSET 和 LIMIT 子句实现了分页。我发现 RU 费用随着页数的增加而显着增加。页面大小为 100 项的示例:

Page 1: 9.78 RU
Page 10: 37.28 RU
Page 100: 312.22 RU
Page 500: 358.68 RU
Run Code Online (Sandbox Code Playgroud)

查询很简单:

SELECT * from c OFFSET [页*尺寸] LIMIT [尺寸]

我做错了什么,还是这是预期的?OFFSET是否需要扫描整个逻辑分区?我正在查询分区中包含大约 10000 个项目的单个分区键。看起来分区中的项目越多,性能就越差。(另请参阅“Russ”在用户声音中对此功能的评论)。

有没有更好的方法来实现整个分区的高效分页?

编辑 1:另外,我注意到在具有 10,000 个项目的分区中执行 OFFSET/LIMIT 时,在 Cosmos 模拟器中执行查询也会减慢 waaayyy 的速度。

编辑2:这是我的查询存储库代码。本质上,它包装了 Container.GetItemQueryStreamIterator() 方法并在处理 IAsyncEnumerable 时拉出 RU。查询本身就是上面的 SQL 字符串,没有 LINQ 或其他神秘的东西。

public async Task<RepositoryPageResult<T>> GetPageAsync(int? …
Run Code Online (Sandbox Code Playgroud)

azure-cosmosdb

11
推荐指数
1
解决办法
1万
查看次数

如何根据 ComosDb 中聚合函数的结果对查询结果进行排序?

我使用 Cosmos Db,需要按COUNT的结果对结果进行排序。

我更喜欢直接在 Cosmosdb 查询的输出中对结果进行排序,而不是每次自己对结果进行排序(或为其创建服务)。

在 Azure 的文档资源管理器中,我对 AggregateEvent 集合执行以下请求:

SELECT * FROM (
    SELECT COUNT(1) AS AlarmCount, a.AlarmType FROM AggregatedEvent a
    WHERE a.AlarmType != null and a.Prom > 0
    GROUP BY a.AlarmType ) AS g
ORDER BY g.AlarmCount
Run Code Online (Sandbox Code Playgroud)

结果出现以下错误消息:

无法解析标识符“AlarmCount”。

如果我使用另一个属性来排序 g.AlarmType(文档中存在的属性),则执行排序。

仅当您有办法使用 CosmosDb 归档订单时,请添加答案。

sql sql-order-by aggregate-functions azure azure-cosmosdb

11
推荐指数
1
解决办法
4469
查看次数

如何查看 Cosmos DB 大小?

对于 SQL 数据库,我可以在 Azure 门户的“概述”边栏选项卡中轻松查看数据库的大小。或者我可以查询例如EXEC sp_spaceused以找出答案。

Cosmos DB 有这样的东西吗?

azure-cosmosdb

11
推荐指数
2
解决办法
8138
查看次数