DocumentDB Change Feed - 如何查看文档的所有更改
DocumentDB Change Feed - How to see all changes to a document
DocumentDB 提供的这个新 Change Feed 功能非常棒。但是,文档指出:
Each change to a document appears only once in the change feed. Only the most recent change for a given document is included in the change log. Intermediate changes may not be available.
基本上,如果文档的修订版本为 A->B->C,当更改源被轮询时,我们只会得到 "C." - 我有一种情况想看到"A" 和 "B" 也是如此。
我知道有一些现有的模式可以解决这个问题,但我真的希望利用这个新的 Change Feed 功能。我希望它会 return A、B 和 C。
此功能的目的是 "workers" 非常频繁地轮询服务吗?显然,工人投票的频率越高,他们跳过对文档的修订的可能性就越小。但是,我不想因此对集合的性能产生不利影响。
这里是 DocumentDB 团队成员。我首先要说 propose/vote 支持此处文档的所有 versions/generations:http://feedback.azure.com/forums/263030-documentdb
Change Feed 支持最新版本的目的有两个:
- 数据同步、流处理等很多问题依赖最新版本,不需要中间版本
- 这种方法的优点是不需要额外的存储空间来存储所有版本,也不需要为更改提要提供时间段。
您曾提到您已经知道解决方法,但我只是为了其他人的利益而陈述这一点:这个问题可以通过反转存储在 DocumentDB 中的内容来解决。也就是说,您可以通过创建新文档将所有版本存储在 DocumentDB 中,然后通过更新最新版本通过更改源合并它们。
要回答评论中的问题,您必须绝对使用更改提要而不是按时间戳查询,原因如下:
- 更改提要效率更高。跨分布式数据集查询 "order by timestamp" 执行全局排序,而 Change Feed 在分区时间戳中局部排序。此外,没有查询解析开销
- 由于时钟偏差,时钟时间在分布式系统中意义不大,区分 second/millisecond 中的多个更新可能很重要。相反,您需要 "logical time" 表示数据库中的确切提交顺序。使用更改源,分区键内的更新按照提交的确切顺序进行,并且您可以在标记有相同逻辑时间戳的事务中更新所有文档。
- 与查询不同,Change Feed 可以跨多个工作人员以分布式方式使用。这在使用 Apache Storm 或 Azure Functions 等下游可扩展计算框架时非常有用。
DocumentDB 提供的这个新 Change Feed 功能非常棒。但是,文档指出:
Each change to a document appears only once in the change feed. Only the most recent change for a given document is included in the change log. Intermediate changes may not be available.
基本上,如果文档的修订版本为 A->B->C,当更改源被轮询时,我们只会得到 "C." - 我有一种情况想看到"A" 和 "B" 也是如此。
我知道有一些现有的模式可以解决这个问题,但我真的希望利用这个新的 Change Feed 功能。我希望它会 return A、B 和 C。
此功能的目的是 "workers" 非常频繁地轮询服务吗?显然,工人投票的频率越高,他们跳过对文档的修订的可能性就越小。但是,我不想因此对集合的性能产生不利影响。
这里是 DocumentDB 团队成员。我首先要说 propose/vote 支持此处文档的所有 versions/generations:http://feedback.azure.com/forums/263030-documentdb
Change Feed 支持最新版本的目的有两个:
- 数据同步、流处理等很多问题依赖最新版本,不需要中间版本
- 这种方法的优点是不需要额外的存储空间来存储所有版本,也不需要为更改提要提供时间段。
您曾提到您已经知道解决方法,但我只是为了其他人的利益而陈述这一点:这个问题可以通过反转存储在 DocumentDB 中的内容来解决。也就是说,您可以通过创建新文档将所有版本存储在 DocumentDB 中,然后通过更新最新版本通过更改源合并它们。
要回答评论中的问题,您必须绝对使用更改提要而不是按时间戳查询,原因如下:
- 更改提要效率更高。跨分布式数据集查询 "order by timestamp" 执行全局排序,而 Change Feed 在分区时间戳中局部排序。此外,没有查询解析开销
- 由于时钟偏差,时钟时间在分布式系统中意义不大,区分 second/millisecond 中的多个更新可能很重要。相反,您需要 "logical time" 表示数据库中的确切提交顺序。使用更改源,分区键内的更新按照提交的确切顺序进行,并且您可以在标记有相同逻辑时间戳的事务中更新所有文档。
- 与查询不同,Change Feed 可以跨多个工作人员以分布式方式使用。这在使用 Apache Storm 或 Azure Functions 等下游可扩展计算框架时非常有用。