azure-cosmosdb - Cosmos DB Continuation Token 如何工作?

标签 azure-cosmosdb

乍一看,延续 token 在 Cosmos DB 中的作用很明显:将它附加到下一个查询会为您提供下一组结果。但是“下一组结果”究竟是什么意思?
是不是意思:

  • 下一组结果就好像原始查询在第一次查询时没有分页完全执行一样(跳过适当数量的文档)?
  • 下一组结果就好像现在已经执行了原始查询(跳过了适当数量的文档)?
  • 完全不同的东西?

  • 答案 1. 似乎更可取,但不太可能,因为服务器需要存储无限量的状态。但是答案 2. 也有问题,因为它可能会导致不一致,例如如果底层数据在页面查询之间发生了变化,则同一文档可能会跨页面多次提供。

    最佳答案

    Cosmos DB 查询执行在服务器端是无状态的。继续 token 用于重新创建索引的状态并跟踪执行进度。
    “下一组结果”意味着,从上次执行的“书签”再次执行查询。此书签由延续 token 提供。

  • 在延续过程中创建的文档

  • 根据正在执行的插入和查询的位置,它们可能会或可能不会返回。
    示例:
    SELECT * FROM c ORDER BY c.someValue ASC
    让我们假设书签的 someValue = 10,查询引擎使用 someValue = 10 的延续标记恢复处理。
    如果您要在查询执行之间插入一个 someValue = 5 的新文档,它 不会出现 在下一组结果中。
    如果新文档插入到 > 书签的“页面”中,则 会出现在下一组结果中
  • 延续期间更新的文档

  • 与上述相同的逻辑也适用于更新
    (见#4)
  • 继续期间删除的文档

  • 他们不会出现 在下一组结果中。
  • 重复的机会

  • 在以下查询的情况下,
    SELECT * FROM c ORDER BY c.remainingInventory ASC
    如果在第一组结果之后更新了剩余库存,并且它现在满足第二页的 ORDER BY 标准,则文档 会出现再次。

    Cosmos DB 不提供跨查询页面的快照隔离。
    但是,根据产品团队的说法,这是一种非常罕见的情况,因为对延续的查询非常快,并且在大多数情况下,所有查询结果都在第一页上返回。

    关于azure-cosmosdb - Cosmos DB Continuation Token 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63457763/

    相关文章:

    c# - CosmosDB 仅访问用户的特定记录

    azure - 克服 CosmosDB 20GB 逻辑分区大小

    azure - 可以使用 Azure documentDb 支持 bi 在线工作

    azure - “加入”DocumentDB 集合 (NoSQL)

    c# - WHERE 子句 Azure CosmosDB Mongo 子文档

    c# - Azure应用程序功能(功能2.x): Create new document in CosmosDB via HTTP function

    当我们使用派生列表达式生成器时,Azure 数据工厂管道无法使用 cosmos DB,它的列数不超过 19

    azure - 如何在没有 Azure 门户的情况下获取 DocumentDB 磁盘使用情况

    azure-cosmosdb - 拥有 Cosmos DB 容器 100% 副本的最简单方法

    azure - Cosmos DB - 有没有自动增量字段的方法?