【问题标题】:Azure DocumentDb "high water mark"/timestampAzure DocumentDb“高水位线”/时间戳
【发布时间】:2016-08-11 01:57:24
【问题描述】:

我正在寻求实现一个流程,该流程偶尔会从 DocumentDb 中提取所有“新”记录,其中 new 是“自上次运行该流程以来添加或修改的所有文档。”

SQL Server 对此有 rowversion,它保证在数据库中的所有行和列中是唯一且单调递增的。

我看到 DocumentDb 有 _ts,它(根据文档)用作 Azure 搜索索引的高水位标记,但它是如何工作的?如果在读取的同时插入了多个文档,则可能所有文档都具有相同的 _ts 值。在下一次读取时,如果与_ts的比较严格大于,那么会遗漏一些文档;如果大于或等于,一些文档将被第二次拉取。

使用 _ts 安全吗?

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    _ts 属性特定于文档,而不是文档集合。它表示特定文档的更新时间(以秒为单位,自 1970 年 1 月 1 日起)。

    _ts 属性不会在集合中的所有文档中为您提供高水位标记。每个文档都有自己独立的_ts 属性(可能与另一个文档的_ts 属性具有相同的值)。

    更多详情请参阅this answer

    【讨论】:

    • 那么 _ts 是否可以安全地用作单个文档的高水位标记?
    • 不,您必须重新获取与您的 _ts 高水位线具有相同值的所有文档。对于同一个文档,您也许可以检查 _etag 值以查看它是否未更改。
    猜你喜欢
    • 2017-12-09
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多