在 DocumentDb 中查询更改的文档
Querying for changed documents in DocumentDb
注意:我问了一个与此 非常相似的问题,但我对我正在寻找的内容不够清楚,并且过于激进地标记了答案。我正在寻找关于特定点的确认 yes/no。
我想构建一个自动化作业,通过按计划查询 DocumentDb 来对 DocumentDb 文档执行脱机处理,查找自上次执行检查以来发生更改的文档。
鉴于 DocumentDb 中可用的元数据,执行此操作的方法如下所示:
- 第一次处理 运行s,检索所有文档。
- 将结果集中的最大 _ts 值存储为 highWatermark,同时将具有该特定值的文档的 ID 和 eTag 存储为它们的 _ts 值。
- 对于每个后续查询,包含一个 "WHERE _ts >= highWatermark" 子句。过滤掉之前记录的eTags没有变化的文档。结果是自上次查询以来所有更改的集合 运行.
我的问题是这个 gua运行teed 可以工作吗? gua运行teed这样不会遗漏任何文件吗?据我所知,它归结为 DocumentDb 实现中围绕 _ts 的 t运行sactional 语义,没有详细记录到这个级别。我想知道是否 gua运行teed 没有文档可以使用比 最大 _ts 低 的 _ts 值更新值 return 在查询期间编辑 return 是集合中最近更改的文档。
编辑,大卫的评论提示:
更准确地说,有几个特定的场景:
- 如果将两个文档 D0 和 D1 的更新应用于 T0 和 T1 的数据库(其中 T1 > T0,这样任意查询可能 return D0 而不是 D1),是否可能D0._ts > D1._ts?使用严格大于是有意的,因为我建议的实现处理接收相同 _ts 的多个更新,但只有其中一些被查询检索。
- 假设我在时间 T0 执行我的实现的查询,并且查询需要很长时间才能 运行,and/or 需要几次 ExecuteNextAsync() 调用才能从服务器提取多个批次。在此期间,更新了 2 个不同的文档(D1 和 D2),获得了 T1 和 T2 的 _ts 值(其中 T1 < T2)。 D2 有没有可能出现在结果集中?更重要的是,如果是,D1 gua运行是否会被包括在内?
对于默认一致性,这不能保证有效,因为具有较低 _ts 的文档可能会稍后出现。但是,如果您可以保证您的更新请求间隔足够远(比如 60 秒),那么风险就会非常低。
我认为 David 的极端情况并不令人担忧,只要您将每个具有更高 _ts 的文档都视为新文档即可。
您可能还想考虑使用类似于 Richard Snodgrass 的时态模型的仅附加方法。这使得幂等性语义更容易。
注意:我问了一个与此
我想构建一个自动化作业,通过按计划查询 DocumentDb 来对 DocumentDb 文档执行脱机处理,查找自上次执行检查以来发生更改的文档。
鉴于 DocumentDb 中可用的元数据,执行此操作的方法如下所示:
- 第一次处理 运行s,检索所有文档。
- 将结果集中的最大 _ts 值存储为 highWatermark,同时将具有该特定值的文档的 ID 和 eTag 存储为它们的 _ts 值。
- 对于每个后续查询,包含一个 "WHERE _ts >= highWatermark" 子句。过滤掉之前记录的eTags没有变化的文档。结果是自上次查询以来所有更改的集合 运行.
我的问题是这个 gua运行teed 可以工作吗? gua运行teed这样不会遗漏任何文件吗?据我所知,它归结为 DocumentDb 实现中围绕 _ts 的 t运行sactional 语义,没有详细记录到这个级别。我想知道是否 gua运行teed 没有文档可以使用比 最大 _ts 低 的 _ts 值更新值 return 在查询期间编辑 return 是集合中最近更改的文档。
编辑,大卫的评论提示:
更准确地说,有几个特定的场景:
- 如果将两个文档 D0 和 D1 的更新应用于 T0 和 T1 的数据库(其中 T1 > T0,这样任意查询可能 return D0 而不是 D1),是否可能D0._ts > D1._ts?使用严格大于是有意的,因为我建议的实现处理接收相同 _ts 的多个更新,但只有其中一些被查询检索。
- 假设我在时间 T0 执行我的实现的查询,并且查询需要很长时间才能 运行,and/or 需要几次 ExecuteNextAsync() 调用才能从服务器提取多个批次。在此期间,更新了 2 个不同的文档(D1 和 D2),获得了 T1 和 T2 的 _ts 值(其中 T1 < T2)。 D2 有没有可能出现在结果集中?更重要的是,如果是,D1 gua运行是否会被包括在内?
对于默认一致性,这不能保证有效,因为具有较低 _ts 的文档可能会稍后出现。但是,如果您可以保证您的更新请求间隔足够远(比如 60 秒),那么风险就会非常低。
我认为 David 的极端情况并不令人担忧,只要您将每个具有更高 _ts 的文档都视为新文档即可。
您可能还想考虑使用类似于 Richard Snodgrass 的时态模型的仅附加方法。这使得幂等性语义更容易。