【问题标题】:query with pagination causing high throughput usage分页查询导致高吞吐量使用
【发布时间】:2021-06-23 07:50:45
【问题描述】:

我使用 Azure Cosmos DB API for MongoDB 帐户,版本 3.6。在使用skiplimit 的查询中,我注意到更高的吞吐量使用率。跳过越高,查询成本越高。

db.MyCollection.find({Property:"testtest"}).skip(12000).limit(10)

以上查询费用约为 3000 RU。 find 子句中的属性是我的分区键。我已经读到,目前 cosmosdb 能够使用偏移量和限制进行查询,但我发现只有在 CosmosDb 的 SQL API 中有 OFFSET LIMIT 子句。是否可以使用 MongoDb API 或者我应该使用跳过的昂贵查询?

【问题讨论】:

    标签: azure-cosmosdb azure-cosmosdb-mongoapi


    【解决方案1】:

    SQL API 将产生与OFFSET LIMIT 相同的结果。随着每个查询循环遍历所有跳过的文档,随着偏移量的增加,您会发现 RU 几乎呈线性增加。

    如果可能,您应该尝试在您的上下文中使用延续令牌。您还可以使用索引属性调整过滤条件以移动数据。

    使用 OFFSET LIMIT 的查询的 RU 费用将随着要偏移的术语数量的增加而增加。对于具有多页结果的查询,我们通常建议使用延续标记。继续标记是查询以后可以恢复的地方的“书签”。如果您使用 OFFSET LIMIT,则没有“书签”。如果要返回查询的下一页,则必须从头开始。

    Source

    【讨论】:

    • 我找不到任何方法可以将 ContinuationToken 与 mongodb api 一起使用
    • @JakubW 我不确定 mongodb sdk 是否有这样的东西,因为我通常不使用它,所以唯一的选择可能是使用过滤条件。