标签: azure-cosmosdb

用于在DocumentDB中进行分页的Skip和top函数

我们可以像Skip和Top那样进行分页

从联系人中选择10个PostId

在DocumentDB?

azure-cosmosdb

6
推荐指数
1
解决办法
2323
查看次数

Azure DocumentDB - 按聚合分组

我在弹性搜索中有一个集合,我们在其中存储事件,并在以下报告中汇总这些事件:

  • 过去一周的事件/天数
  • 过去24小时内的活动次数/小时数

在此输入图像描述

我们想转移到DocumentDB,但不支持GROUPING,我不知道如何在不进行7 + 24查询的情况下实现这一点.有任何想法吗?

谢谢

azure-cosmosdb

6
推荐指数
2
解决办法
6198
查看次数

对DocumentDB中的查询收取RU费用

使用.NET库,如何确定查询的RU费用.它返回IQueryable,我不知道如何记录它.如何记录所有请求的RU的奖励点.

简单的代码,但不返回RU:

 var docs = DocumentDBRepository<CampaignMessage>.client.
         CreateDocumentQuery<CampaignMessage>(UriFactoryExtensions.CreateCollectionUri(), new FeedOptions() { MaxItemCount = -1, MaxDegreeOfParallelism = 5 }).Where(x => x.BlastKey == "abc-796").
Run Code Online (Sandbox Code Playgroud)

azure-cosmosdb

6
推荐指数
1
解决办法
621
查看次数

Azure函数:如何将http触发器函数的查询字符串参数绑定到Cosmos DB的SQL查询

我正在尝试使用Cosmos DB输入绑定运行http触发器Azure功能.我希望http触发器的url在查询字符串上包含几个参数,这些参数绑定到输入Cosmos DB绑定的SQL查询.我正在尝试以下绑定function.json,但它不起作用(该功能甚至没有被触发):

{
  "direction": "in",
  "type": "httpTrigger",
  "authLevel": "anonymous",
  "name": "req",
  "methods": [ "get" ],
  "route": "users/{age=age?}/{gender=gender?}"
},
{
  "direction": "in",
  "type": "documentDB",
  "name": "users",
  "databaseName": "Database",
  "collectionName": "Users",
  "sqlQuery": "SELECT * FROM x where x.age = {age} and x.gender = {gender}",
  "connection": "COSMOSDB_CONNECTION_STRING"
},
Run Code Online (Sandbox Code Playgroud)

根据此答案,路由约束users/{age=age?}/{gender=gender?}对Web API有效,根据文档, 您可以将任何Web API路径约束与您的参数一起使用.最后,我想向Azure函数发出一个GET请求api/users?age=30&gender=male.那怎么办呢?

azure azure-functions azure-cosmosdb azure-functions-runtime

6
推荐指数
1
解决办法
3768
查看次数

Cosmos DB(DocumentDB API):通过分区ID查询最新文档的有效方法?

我有一个Cosmos DB集合,其中包含基于设备ID的多个分区.我经常遇到需要通过特定设备ID检索最新文档的用例.我目前正在使用SELECT TOP 1DocumentDB API中提供的功能,如下所示:

SELECT TOP 1 *
FROM c
WHERE c.deviceId = 5
ORDER BY c.timeStamp DESC
Run Code Online (Sandbox Code Playgroud)

正如人们所预料的那样,随着集合和单个分区的大小增加,这种方法导致RU/s消耗增加并且性能降低.作为此问题的临时补救措施,我添加了额外的where子句以按时间戳限制查询范围:

SELECT TOP 1 *
FROM c
WHERE c.deviceId = 5
 AND c.timeStamp >= 1506608558 --timestamps are unix/epoch based to optimize indexing
 AND c.timeStamp <= 1506694958
ORDER BY c.timeStamp DESC
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来按分区ID选择最新文档,因为添加此where子句可能会导致意外或缺少结果.

azure-cosmosdb

6
推荐指数
1
解决办法
884
查看次数

Cosmos Db Graph - Gremlin.Net与Microsoft.Graph的性能和吞吐量

在我学习如何使用Cosmos DB的图形时,我发现了两个Microsoft教程:

虽然我使用相同的查询,但它的执行不同.

使用Gremlin.Net,它立即执行.我经常(我会说70%的时间)得到一个RequestRateTooLargeException.如果我理解正确,这意味着我一直达到我选择的400RU/s限制.但是,当查询进入低谷时,它的速度是Microsoft.Azure.Graph解决方案的两倍.

实际上,使用Micorosft.Azure.Graph,我必须调用ExecuteNextAsync一个循环,一次返回一个结果.

所以问题是:
1°)我应该使用哪种方法来获得更好的性能?
2°)我怎么知道我的查询的RU所以我可以微调它?
3°)是否可以提高现有集合的吞吐量?

更新

问题3,我发现在我的数据库的"数据资源管理器"刀片中,我的图表有一个"Scale&Settings",我可以更新吞吐量.

Update2

问题2,我们无法在使用第一种方法(Gremlin.Net)时收取RU,但Microsoft.Graph方法ExecuteNextAsync返回FeedResponse带有字段的a RequestCharge.

graph-databases gremlin azure-cosmosdb

6
推荐指数
1
解决办法
2224
查看次数

Azure SQL API与Azure Mongo API

我是“ NoSQL”领域的新手,最近我开始将Cosmos DB用于JSON文档,并且能够使用CosmosDB“ SQL”和“ Mongo” API来存储和获取数据。

哪种API最适合我?(要求:性能,低延迟,大量收集,低成本)

azure mongodb azure-cosmosdb

6
推荐指数
3
解决办法
2050
查看次数

何时应在 CosmosDB 中创建新容器?

我想在Azure CosmosDB上存储不同结构的数据。我知道容器可以存储不同类型的数据。在生产中,通过为它们分配不同的“类型”属性来区分它们。

当我观看最佳实践视频时:我注意到有两个容器(时间戳:17:47):CosmosDB 中的两个容器

第一个,users,只有一种数据类型,而第二个,posts,包含两种类型的内容:帖子和评论。

  1. 什么时候建议创建一个新容器而不是向已创建的容器添加不同类型的数据?
  2. 稍微解释一下这个问题:既然容器可以存储各种数据类型,为什么不将上面屏幕上的用户帖子评论放在一个容器中呢?

containers azure azure-cosmosdb

6
推荐指数
1
解决办法
1154
查看次数

在 Azure Cosmos DB 中维护分布式增量计数器

我对 cosmos DB 相当陌生,并试图了解azure cosmos DB SDK 为 Java 提供的用于修补文档的增量操作。我需要在容器中的文档之一中维护增量计数器。该文件看起来像这样——

{"counter": 1}
Run Code Online (Sandbox Code Playgroud)

现在,在我的应用程序中,每次发生操作时,我希望将此计数器的值增加 1。为此,我使用CosmosPatchOperations。我在这里添加一个增量,这样cosmosPatch.increment("/counter", 1)效果很好。

现在,该应用程序可以运行多个实例,所有实例都与 Cosmos 容器中的同一文档进行通信。所以App1和App2都可以同时触发增量。SDK 方法返回更新后的文档,我需要使用该更新后的值。

我的问题是,这里的 cosmos DB 是否采用某种锁定机制来确保两个补丁相继发生,并且在这种情况下,我在 App1 和 App2 中获得的更新值是什么(SDK 方法返回更新后的值)文档)。其中一个是 2 个,另一个是 3 个吗?

Couchbase 在集群级别支持这样的计数器,如此处所述它对我来说工作得很好,没有任何并发​​问题。我现在正在迁移到 cosmos Db,并一直在努力寻找如何实现这一目标。

更新1:

我决定测试一下。我在本地 Mac 中设置了 Cosmos 模拟器,并创建了一个 DB 和容器,并且 RU 会自动从 1 增加到 10K。然后在这个容器中我添加了一个像这样的文档 -

{
"id": "randomId",
"counter": 0
}
Run Code Online (Sandbox Code Playgroud)

在此之后,我创建了一个简单的 API,其职责只是在每次调用时将计数器加 1。然后我使用Locust多次调用这个 API 来模拟一个小型的类似负载的场景。最初,测试运行良好,每次调用都像预期的那样接收计数器(以增量方式)。在增加负载时,我看到一些错误,即RequestTimeOutException,状态代码为 408。其他请求仍然可以正常工作,并获得正确的计数器值。我不明白是什么导致了这里的 RequestTimeOut 异常。堆栈跟踪暗示与并发有关,但我无法理解它。这是堆栈跟踪 -

在此输入图像描述

更新 2: 更新 …

azure azure-cosmosdb

6
推荐指数
1
解决办法
1674
查看次数

Azure CosmosDB - 复杂结构的部分文档更新(补丁)

我正在尝试使用部分文档更新(补丁 API)来更新文档中的子对象,但遇到了麻烦。我发现这个堆栈溢出问题与我的问题相同。但是,接受的答案通过按索引引用数组中的对象来解决问题。我不相信我有能力做到这一点。因此,要使用与其他问题相同的示例文档......

{
    "id": "SalesOrder2",
    "ponumber": "PO15428132599",
    "OrderDate": "2005-07-01T00:00:00",
    "DueDate": "2005-07-13T00:00:00",
    "ShippedDate": "2005-07-08T00:00:00",
    "AccountNumber": "Account2",
    "SubTotal": 6107.082,
    "TaxAmt": 586.1203,
    "Freight": 183.1626,
    "TotalDue": 4893.3929,
    "DiscountAmt": 1982.872,
    "Items": [
        {
            "Id": 1,
            "OrderQty": 3,
            "ProductCode": "A-123",
            "ProductName": "Product 1",
            "CurrencySymbol": "$",
            "CurrencyCode": "USD",
            "UnitPrice": 17.1,
            "LineTotal": 5.7
        },
        {
            "Id": 2,
            "OrderQty": 2,
            "ProductCode": "A-456",
            "ProductName": "Product 2",
            "CurrencySymbol": "$",
            "CurrencyCode": "USD",
            "UnitPrice": 10,
            "LineTotal": 20
        }
    ],    
    "_rid": "BsMkAMc43s4CAAAAAAAAAA==",
    "_self": "dbs/BsMkAA==/colls/BsMkAMc43s4=/docs/BsMkAMc43s4CAAAAAAAAAA==/",
    "_etag": "\"00000000-0000-0000-e136-0dbec04601d7\"",
    "_attachments": "attachments/",
    "_ts": 1637760030
}
Run Code Online (Sandbox Code Playgroud)

我无法保证 …

azure-cosmosdb

6
推荐指数
1
解决办法
2449
查看次数