面试题答案
一键面试默认冲突解决机制
CouchDB采用多版本并发控制(MVCC)来处理冲突。当多个客户端同时尝试更新同一文档时,每个更新操作都会创建文档的一个新版本。这些版本会被记录在文档的_conflicts
字段中,每个冲突版本都有一个唯一的修订ID。
默认情况下,CouchDB不会自动解决冲突,而是将冲突的文档保存,等待用户手动干预。当客户端读取包含冲突的文档时,CouchDB会返回文档的当前版本以及_conflicts
字段,其中列出了所有冲突的修订ID。
手动干预冲突解决过程
- 读取冲突文档:
通过
GET
请求获取包含冲突的文档,CouchDB会在响应中包含_conflicts
字段,例如:
{
"_id": "your_document_id",
"_rev": "3-abcdef1234567890",
"_conflicts": ["2-0123456789abcdef", "1-9876543210fedcba"],
"your_field": "your_value",
// 其他文档字段
}
- 选择正确版本: 分析冲突的各个版本,确定哪个版本是正确的,或者合并各个版本的内容以创建一个新的正确版本。
- 更新文档:
使用选择或合并后的内容,通过
PUT
请求更新文档。在PUT
请求中,需要指定正确的修订ID,以确保更新操作基于最新的、解决冲突后的版本。例如:
curl -X PUT http://localhost:5984/your_database/your_document_id \
-H "Content-Type: application/json" \
-d '{
"_id": "your_document_id",
"_rev": "3-abcdef1234567890",
"your_field": "new_value",
// 其他文档字段
}'
这样就可以手动解决CouchDB中的文档冲突。