面试题答案
一键面试CouchDB版本冲突处理机制
- 原理:CouchDB 使用乐观并发控制,每个文档都有一个
_rev
版本号。当进行删除操作时,CouchDB 期望文档的_rev
版本号与请求中指定的版本号一致。如果不一致,就表示发生了版本冲突。 - 处理方式:当遇到版本冲突时,CouchDB 不会执行删除操作,并返回一个 HTTP 409 Conflict 状态码,响应体中会包含当前文档的最新
_rev
版本号。
HTTP API 请求处理示例
假设要删除一个文档,文档的 _id
为 example_doc_id
,当前已知的 _rev
为 1-abcdef
。
- 初始删除请求:
DELETE /your_database_name/example_doc_id?rev=1-abcdef HTTP/1.1
Host: your_couchdb_host
- 如果版本冲突:CouchDB 返回类似如下响应:
HTTP/1.1 409 Conflict
Content-Type: application/json
{
"error": "conflict",
"reason": "Document update conflict.",
"current_rev": "2-ghijkl"
}
- 解决冲突并重试:客户端获取到最新的
_rev
(这里是2-ghijkl
)后,重新发起删除请求:
DELETE /your_database_name/example_doc_id?rev=2-ghijkl HTTP/1.1
Host: your_couchdb_host
这样就能确保删除操作成功(前提是在此期间文档没有再次发生变化导致新的版本冲突)。