当前位置: 首页 > 知识库问答 >
问题:

Cosmos DB延续标记大小影响查询是否返回新文档

别兴国
2023-03-14

我正在处理Azure Cosmos DB(通过. NET SDK)并注意到一些奇怪的事情。

通常,当我使用延续标记逐页请求查询时,我永远不会得到在第一个延续标记创建之后创建的文档。我可以观察到更改的文档,缺少删除的(或者说是新过滤掉的)文档,但是看不到新的文档。但是,如果我只允许1kB的延续标记(我能设置的最小标记),我也会得到新文档。显然,只要它们最终被排序到剩余的页面。

这有点道理,因为有了大小限制,我防止了Cosmos DB在continuation token中包含序列化的索引查询等等。缺点是,Cosmos DB必须为我请求的每个页面重新创建恢复状态,这将花费一些额外的RUs。至少根据这个讨论。作为一个副作用,新文档最终会出现在结果中。

现在,我实际上对此有几个问题。

  1. 此行为是否可靠?我很想看到一些关于此的文档。
  2. 较大的延续令牌节省的 RU 量是否显著?
  3. 有没有另一种方法可以将新文档包含在结果中?
  4. 我的假设是完全错误的吗?

共有1个答案

申屠健
2023-03-14

我来自 CosmosDB 工程团队。

  1. 这种行为可靠吗?我希望看到一些留档。

我们引入了此功能(限制延续令牌大小),因为客户要求帮助减少响应延续大小。我们认为,暴露修剪延续的效果过于详细,因为对于大多数客户来说,微妙的行为变化并不重要。

这取决于从索引生成状态所做的工作量。例如,如果我们必须评估一个范围谓词(例如_ts

不,除非您强制CosmosDB通过将标题设置为1来重新计算每个连续的索引。通常情况下,查询在连续上执行得相当快,因此用户看到新文档的机会应该相当小。理想情况下,我们应该实现快照隔离,以从第一个延续中使用会话令牌检索结果,但我们还没有这样做。

你的假设是正确的:)

 类似资料:
  • 问题内容: 如果我有两个查询 和 哪个查询将运行得更快?是where子句/表联接的最大因素,还是返回的列数最大? 我之所以问是因为我正在构建一系列映射到数据库表的对象。通常,每个对象将至少具有以下三种方法: 全选 选择足够的数量以用于填充下拉列表 -选择结果中可见的所有内容,通常约6列左右。 如果每个查询返回的列完全相同,则代码的维护和测试应该更加简单。数据库在任何给定的表中都不可能超过50,00

  • 假设一款手机游戏由一个MongoDB数据库支持,该数据库包含一个包含数百万文档的用户集合。 现在假设必须与用户关联的几十个属性-例如朋友文档的文档的

  • 问题内容: 我有这个查询: 我的表是,我有一列名为。我要更新的是名为“ yes” 的列。 知道我在做什么错吗?当我返回查询时,它说受影响的0行。 问题答案: 如苯丙胺和Yada所建议,如果您的电话号码在表中,请使用进行检查。 但是请记住:如果所讨论的行的值已经是“是”,则mysql不会更改该值,因此将返回“受影响的0行”。因此,请务必同时检查

  • 问题内容: 我正在使用MySQL存储视频游戏数据。我有用于标题,平台,标签,徽章,评论,开发人员,出版商等的表… 当某人正在观看游戏时,最好有一个查询来返回与游戏相关的所有数据,还是最好使用多个查询?直观地,由于我们具有评论,将它们包括在同一查询中似乎毫无意义,因为它们需要分页。但是在其他情况下,我不确定是否要分解查询或使用两个查询… 我有点担心性能,因为我现在加入游戏下表:开发人员,发行者,元标

  • 问题内容: 我有一个具有相似结构和数据的示例表,如下所示: 表在每个学生出现的所有科目中都有每个学生的合并标记。 请帮助我,编写一个查询以提取每个学生( 不分学科/其他学生 )获得的MAXIMUM分数,如下所示: 按S_Name和Max(MARK_Value)分组 问题答案: 使用窗口功能 或者您可以使用相关的子查询

  • 我正在将我的PHP代码从mysql更新到mysqli,但我似乎找不到这个问题的答案:mysqli更新查询是否返回结果? 使用mysql,我可以 即使该查询不返回任何行,也将为true。 现在,在mysqli代码中,我有如下内容(为了清晰起见,删除了错误处理): 结果是错误的。 对于记录来说,查询是有效的(忽略我可能在将其转录到stackoverflow中时犯的任何错别字),字段1在数据库中按预期正