面试题答案
一键面试确保节点间数据同步版本控制一致性
- 使用修订版本号:CouchDB 为每个文档分配唯一的修订版本号(
_rev
)。每次文档更新时,修订版本号都会递增。在节点间同步数据时,通过比较修订版本号来确定最新版本。发送方节点会将文档及其修订版本号发送给接收方节点,接收方节点检查本地是否有相同文档,如果有则比较_rev
。若接收方的_rev
小于发送方,则更新本地文档。 - 基于向量时钟:虽然 CouchDB 没有直接使用传统向量时钟,但类似概念存在。向量时钟用于记录每个副本上发生的事件顺序,节点间同步时通过交换向量时钟信息来确定版本先后顺序。在 CouchDB 中,修订版本号起到类似向量时钟部分作用,标识文档修改顺序。
网络分区时处理版本冲突并维持一致性策略
- 冲突检测:当网络分区恢复,节点重新连接后,CouchDB 会检测到文档版本冲突。由于在网络分区期间,不同节点可能对同一文档进行了独立修改,导致修订版本号不同。
- 冲突解决策略:
- 手动解决:CouchDB 会将冲突文档以特殊格式保存,包含所有冲突版本。开发人员或管理员可通过 API 访问这些冲突版本,根据业务逻辑决定保留哪个版本或合并内容。例如,对于一个记录用户信息的文档,不同节点分别更新了用户地址和电话号码,可手动合并这些修改。
- 自动解决:可以编写自定义冲突解决函数(例如使用 JavaScript 编写),基于特定规则自动解决冲突。比如根据更新时间戳,保留最新更新的版本;或者针对数值类型的字段,采用求和等方式合并冲突值。