乍一看,延续 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/