XDCR目标Bucket中Couchbase二进制文档持续增长问题咨询
问题背景
运行环境:Windows Server 2016 标准版 + Couchbase 企业版 6.6.2
Bucket 配置:
- Bucket A:开启
enable_shared_bucket_access = true,由Sync Gateway创建新文档,多服务可修改/删除文档 - Bucket B:通过XDCR同步Bucket A的所有变更,但删除操作不同步;Bucket B中超过62天的文档由外部服务删除
随着时间推移,发现Bucket B中93%的文档为二进制文档,业务仅使用JSON文档,判断为Couchbase内部文档,示例如下:
{ "$1": { "cas": 1667520921496387584, "expiration": 0, "flags": 50331648, "id": "_sync:rev:00001abd-1f99-4b4e-a695-d11574ea9ed8:0:", "type": "base64" }, "pa": "<binary (1 b)>" }, { "$1": { "cas": 1667484959445614592, "expiration": 0, "flags": 50331648, "id": "_sync:rev:00001abd-1f99-4b4e-a695-d11574ea9ed8:34:2-d3fb2d58672f853d98ce343d3ae84c1d", "type": "base64" }, "pa": "<binary (1129 b)>" }
这类文档数量持续增长且无法自动清理,占用大量资源,现咨询以下问题:
疑问
- 这类文档的用途是什么?
- 为何无法自动清理?
- 直接删除这些文档是否安全?
- 这是Bug还是特性?
解答
1. 文档用途
这些是Sync Gateway生成的版本控制元数据文档,ID前缀_sync:rev:表明它们用于记录同步文档的历史版本信息,包括文档的修订ID、CAS值、标志位等,支撑Sync Gateway的多设备同步、冲突解决等核心功能,属于Couchbase Mobile同步架构的内部组件。
2. 无法自动清理的原因
- Sync Gateway默认会保留文档的历史版本,除非配置了版本清理规则(如
revision_limit),但Bucket A的这些元数据文档本身没有设置过期时间(示例中expiration=0); - XDCR同步时仅复制新增/修改操作,但不同步删除操作,导致Bucket A中被清理的版本元数据无法同步删除到Bucket B;
- 外部服务仅删除Bucket B中超过62天的业务文档,未覆盖这些
_sync:前缀的内部元数据文档,因此它们会持续积累。
3. 直接删除的安全性
对于Bucket B来说,直接删除这些_sync:rev:前缀的文档是安全的:
- Bucket B仅作为XDCR同步的目标,未对接Sync Gateway,不需要这些版本元数据支撑同步功能;
- 这些文档不属于业务数据,删除后不会影响业务逻辑;
- 注意:如果后续Bucket B需要对接Sync Gateway,需保留这些元数据,但当前场景下无此需求,可放心删除。
4. 是Bug还是特性?
这属于特性引发的预期外积累,而非Bug:
- Sync Gateway生成版本元数据是正常的同步架构设计;
- XDCR不同步删除操作是可配置的行为(默认不同步删除,需开启
enable_xdcr_delete参数); - 问题根源是当前架构未针对这些内部元数据设置清理规则,且XDCR删除同步未开启,导致文档持续积累。
内容的提问来源于stack exchange,提问作者Siraf
相关产品推荐
相关产品推荐

