Cosmos DB Change Feed 的时间分辨率是多少?

What is the time resolution of Cosmos DB Change Feed?

据我了解(例如来自 here),Cosmos DB 更改源不保证每次更新都会触发事件。例如,当对同一个文档的两次更新几乎同时发生时,更改源处理器(例如,一个 Azure 函数侦听更改源)可能只被触发一次,即两次更新中的较晚一次。首先,我的理解正确吗?如果是:

  1. 根据您的经验,更新的典型最小时间间隔是多少,以便为每个事件单独触发更改事件? (不是精确值,但只是数量级就已经有用了。)
  2. 这个时间间隔有 SLA 吗?

更改源是基于轮询而不是基于事件的,但这取决于您使用增量模型轮询更改的频率。

处理器只跟踪每个分区读取的最高 LSN,并请求从该书签点开始的下一批更改(按 LSN 顺序)。

每次更新文档时,其关联的 LSN 都会增加,因此,为了在变更源中 return 编辑特定版本,变更源处理器需要请求包含该 LSN 的批次在文档更新之前。

对于 Azure 函数,您可以减少 feedPollDelay 以降低错过更改的可能性

(Optional) The time (in milliseconds) for the delay between polling a partition for new changes on the feed, after all current changes are drained. Default is 5,000 milliseconds, or 5 seconds.

如果您的更改非常接近,您可能仍然会错过它们。有一个“full fidlelity change feed”选项会在某个时候出现,它将 return 所有更改,但我不确定如何进入预览版或何时将正式发布并与 Azure 功能集成。