面试题答案
一键面试在CouchDB的_replicator
数据库配置中,处理数据冲突主要涉及以下配置项及其影响:
1. conflicts
配置项
- 设置方式:在复制文档中,添加
"conflicts": "true"
或"conflicts": "false"
。 - 影响:
true
:开启冲突检测,CouchDB会在文档发生冲突时创建冲突版本(_conflicts 数组),记录不同版本的冲突信息。这样有助于跟踪和解决冲突,但会增加存储开销,因为每个冲突版本都要占用空间。false
:关闭冲突检测,CouchDB不会创建冲突版本记录,适合在应用层已经有完善的冲突解决机制,且希望减少存储开销的场景。
2. retry_conflicts
配置项
- 设置方式:在复制文档中,添加
"retry_conflicts": "true"
或"retry_conflicts": "false"
。 - 影响:
true
:当检测到冲突时,CouchDB会尝试自动解决冲突,通过一些内置的算法(如时间戳比较等),优先选择最新修改的版本。这种方式可以自动处理部分简单冲突,但可能不适用于所有业务场景,可能导致数据丢失(如果最新版本并非预期版本)。false
:当检测到冲突时,CouchDB不会自动解决,而是将冲突文档以冲突版本形式保留,等待手动处理。这给予应用开发者更多控制权来根据业务逻辑解决冲突。
3. continuous
配置项
- 设置方式:在复制文档中,添加
"continuous": "true"
或"continuous": "false"
。 - 影响:
true
:持续复制模式,CouchDB会不断检查源和目标数据库的变化,并实时同步。这种模式下,冲突更可能在早期被发现和处理,因为数据的同步频率高。同时,持续的监控和同步可能增加系统资源消耗。false
:单次复制模式,CouchDB只执行一次复制操作,然后停止。这种模式下,冲突可能在后续源或目标数据库更新时才被发现,处理冲突的时效性可能较差,但资源消耗相对较低。
4. create_target
配置项
- 设置方式:在复制文档中,添加
"create_target": "true"
或"create_target": "false"
。 - 影响:
true
:如果目标数据库不存在,CouchDB会自动创建。在多主复制场景下,确保目标数据库始终可用于接收数据,避免因目标库不存在导致的同步失败,间接影响冲突处理流程。false
:如果目标数据库不存在,复制操作会失败,这要求目标数据库必须提前创建好,若目标库不存在,会增加同步失败从而导致冲突未及时处理的风险。