CouchDB 2.3.1复制操作是否会影响_changes feed的维护?
问题场景与疑问
我们使用的是CouchDB(v2.3.1),目前通过复制操作将数据从一台服务器同步至另一台,源服务器还会持续接收新数据。我们正采用如下类似算法:
1. 读取 /dbname/_changes 2. 幂等处理每一行数据 3. 定期(每X秒或每处理X行)记录最后处理行的"seq"值 如果程序崩溃,或者未使用continuous=true参数,可以重复上述流程,但修改第一步: 修订版第一步:读取 /dbname/_changes?since=X 其中X是步骤3中保存的seq值。如果未使用连续模式,也可以在读取完非连续响应后直接记录"last_seq"值。
问题:在此场景下,CouchDB的复制操作是否会影响其维护的_changes feed?
回答
CouchDB的复制操作不会影响源服务器的_changes feed。
复制操作本质是源服务器的一个普通读取消费者——它会读取源的_changes feed获取增量数据,但这个过程仅做读取,不会修改或干扰_changes feed的生成逻辑。源服务器的_changes feed是基于自身数据库的写入操作(新数据插入、已有数据更新/删除)维护的,所有写入操作都会生成对应seq编号并加入feed,复制操作只是众多读取该feed的角色之一,和你自己实现的增量同步逻辑是平等的消费者。
简单来说,不管有没有复制任务运行,源服务器的_changes feed都会如实记录所有本地写入操作,seq编号的生成和顺序也不会因复制改变。你自己的同步逻辑完全可以正常基于since参数续接之前的进度,不用担心复制操作导致seq丢失、乱序或_changes feed内容被篡改。
内容的提问来源于stack exchange,提问作者Jay Patel
相关产品推荐
相关产品推荐

