【问题标题】:Azure, DocumentDB, Count give incorrect resultsAzure、DocumentDB、Count 给出不正确的结果
【发布时间】:2017-03-23 08:52:34
【问题描述】:

在一个 documentDB 集合上,我在门户中运行下一个查询:

SELECT * FROM c WHERE NOT IS_DEFINED(c.UserDataType)

返回了一些结果。

现在运行这个查询:

SELECT count(1) FROM c WHERE NOT IS_DEFINED(c.UserDataType)

返回这个结果:

[ { “$1”:0 } ]

怎么可能?

可能有帮助的一件事是,当查询在门户中运行时,会发生一些继续

【问题讨论】:

  • 我只是对我的收藏重复了相同的查询,它们就起作用了。您是否使用多个分区?您有多个地理区域吗?如果是这样,您的默认一致性是什么?
  • 该集合中有多少记录/文档?您是否尝试在另一个集合上运行相同的查询?
  • 如何判断是否为多分区?它不是多个地理区域。

标签: azure azure-cosmosdb


【解决方案1】:

DocumentDB 在两个方面与传统数据库不同 - 1) 它对所有请求的延迟上限为 5 秒,因为它是基于 HTTPS 和 REST 的基于云的服务,以及 2) 它是具有预配置吞吐量的数据库,因此您可以获得可预测的性能(这很棒),但必须在预留的资源预算内执行查询。

这意味着某些查询可以取得增量进展,您必须通过使用延续令牌重新提交查询来恢复执行,直到所有结果都可用。对于聚合查询,DocumentDB 的工作方式类似于“map-reduce”,将部分聚合结果返回给客户端,客户端负责生成最终结果(例如对聚合求和)。通常,您不会注意到这种行为,因为查询在一次往返中完成,但您会注意到查询何时需要执行扫描(例如在此原因中,因为它涉及 NOT IS_DEFINED 子句的否定)。

如果您将查询运行到完成,您将看到返回的正确结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2017-12-14
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多