MST
星途 面试题库

面试题:CouchDB中并发创建文档时可能遇到的冲突问题及解决策略

在使用CouchDB的HTTP API进行文档并发创建时,可能会遇到哪些冲突问题?请简述至少两种常见的冲突情况,并说明CouchDB提供了哪些机制来解决这些冲突。
33.6万 热度难度
数据库CouchDB

知识考点

AI 面试

面试题答案

一键面试

常见冲突情况

  1. 文档版本冲突:当多个客户端同时尝试更新或创建同一个文档时,CouchDB 为每个文档维护一个修订版本号。如果两个客户端基于相同版本号进行修改并尝试保存,就会产生冲突。例如,客户端 A 和客户端 B 同时读取文档 doc1 的版本号为 1 - abc,A 先修改保存,版本号变为 2 - def,此时 B 再保存就会冲突,因为 B 基于的还是 1 - abc 版本。
  2. 唯一键冲突:在设计文档时,如果有某些字段被视为唯一标识(类似数据库中的唯一键),当不同客户端同时创建文档,且这些文档的唯一标识字段值相同,就会出现冲突。比如,在用户注册场景中,用户名被设定为唯一,若两个用户同时注册相同用户名的账号就会冲突。

解决冲突机制

  1. 修订版本号处理:CouchDB 会在发生冲突时返回带有冲突信息的响应,客户端可以获取最新版本号,重新读取文档,将自己的修改合并到最新版本上,然后再次尝试保存。例如,客户端 B 收到冲突响应后,获取到 doc1 的最新版本号 2 - def,重新读取文档,将自己的修改应用到这个最新版本上,再保存。
  2. 手动解决冲突:CouchDB 会将冲突的文档版本存储在 _conflicts 字段中。管理员或开发者可以通过查看这些冲突版本,手动决定保留哪个版本,然后删除其他冲突版本。例如,在唯一键冲突场景下,管理员可以根据业务规则决定保留哪个用户名注册的账号,删除冲突的账号文档。