Azure cosmosdb azure cosmosdb change feed内部通信如何工作?

Azure cosmosdb azure cosmosdb change feed内部通信如何工作?,azure-cosmosdb,Azure Cosmosdb,嗨,我想知道订阅azure cosmosdb变更提要的内部机制实际上是如何工作的。特别是如果您使用的是来自节点的azure cosmosdb js。是否存在某种长轮询机制来检查更改提要表,或者使用web套接字将事件推送到订阅服务器 对任何分区密钥更改订阅源的订阅数量有限制吗 将更改提要想象成跟踪文档更改的事件源 所有实际的变更提要消耗逻辑都被抽象到SDK中。服务器只是提供了SDK可以使用的更改提要。这就是change feed处理器库用来操作的 我们对changefeed处理器SDK了解不多,主

嗨,我想知道订阅azure cosmosdb变更提要的内部机制实际上是如何工作的。特别是如果您使用的是来自节点的azure cosmosdb js。是否存在某种长轮询机制来检查更改提要表,或者使用web套接字将事件推送到订阅服务器


对任何分区密钥更改订阅源的订阅数量有限制吗

将更改提要想象成跟踪文档更改的事件源

所有实际的变更提要消耗逻辑都被抽象到SDK中。服务器只是提供了SDK可以使用的更改提要。这就是change feed处理器库用来操作的

我们对changefeed处理器SDK了解不多,主要是因为它们不是开源的。(编辑:感谢Matias指出它们实际上是)。然而,从广泛的个人使用,我可以告诉你以下几点

更改提要处理器将需要一个集合来存储一些文档。这些文档只是处理器跟踪消耗的检查点。这些租赁集合中的每个主文档都对应于一个物理分区。处理器将在设定的时间间隔内轮询每个物理分区。您可以通过设置
FeedPollDelay
设置来设置这一点,该设置“获取或设置在当前所有更改耗尽后,在轮询feed上的分区以获取新更改之间的延迟。”

如果多个处理器针对单个集合运行,则该库还能够扩展租约。如果服务失败,正在运行的服务将获取租约。由于轮询和延迟,您可能会重新处理已处理的文档。您还可以选择设置change feed处理器的检查点频率


就“订阅”而言,您可以拥有任意数量的订阅。但是请记住,变更提要处理程序正在编写租赁文档。它们小于1kb,因此每次更换您将支付最低10卢比的费用。但是,如果您最终拥有40多个物理分区,那么您可能必须将吞吐量从最低400 RU/s提高。

为了澄清Nick的答案,Change Feed处理器是开源的:)这里有一个概述说明哦,哇@MatiasQuaranta,太棒了!上次我检查的时候,我想它是关着的。感谢您的澄清。感谢NickChapsa,感谢@MatiasQuaranta,因此我查看了代码并更正了我的错误。更改源使用Microsoft.Azure.Documents.Client和长轮询(睡眠时间)向分区发出请求。那么,即使没有任何记录发生更改,在分区进行轮询时,您是否只为订阅分区而付费?还是不?如果您使用userKey对数据进行了分区,并且为每个用户创建了一个变更提要,那么您实际上是在长时间轮询每个分区?只有当您的容器没有恒定的操作量时,变更提要处理器才会进行长时间轮询。读取提要并将更改发送给您的观察者时,如果处理器尝试获取更改但未找到任何内容,则它将等待5秒钟(默认,可配置)进行另一次读取。否则,如果你的操作是恒定的,它会不断地读取和推送观察者。您订阅对容器的更改,而不是分区键范围的特定子集。