MST

星途 面试题库

面试题:CouchDB中RESTful接口如何处理文档版本控制

在CouchDB的HTTP API遵循RESTful接口设计原则下,阐述文档版本控制是如何通过接口实现的,包括版本标识的生成、更新操作时版本的检查与处理等方面。
32.4万 热度难度
数据库CouchDB

知识考点

AI 面试

面试题答案

一键面试

版本标识的生成

  1. 初次创建文档:当通过PUT请求向CouchDB创建新文档时,CouchDB会自动为该文档生成一个版本标识(_rev)。例如,使用以下PUT请求创建文档:
    PUT /your_database/your_doc_id HTTP/1.1
    Content-Type: application/json
    {
        "key": "value"
    }
    
    响应中会包含生成的_rev,类似如下:
    {
        "ok": true,
        "id": "your_doc_id",
        "_rev": "1-abcdef1234567890"
    }
    
    这里的1代表版本号起始为1,后面的abcdef1234567890是一个唯一的哈希值。

更新操作时版本的检查与处理

  1. 获取当前版本:在更新文档前,客户端首先通过GET请求获取文档,响应中会包含当前文档的_rev。例如:
    GET /your_database/your_doc_id HTTP/1.1
    
    响应:
    {
        "_id": "your_doc_id",
        "_rev": "1-abcdef1234567890",
        "key": "value"
    }
    
  2. 更新文档并携带版本:客户端在更新文档时,需要在PUT请求中携带获取到的_rev。例如:
    PUT /your_database/your_doc_id HTTP/1.1
    Content-Type: application/json
    {
        "_id": "your_doc_id",
        "_rev": "1-abcdef1234567890",
        "key": "new_value"
    }
    
  3. 版本检查与处理:CouchDB在接收到更新请求时,会检查请求中的_rev与服务器上该文档当前的_rev是否一致。
    • 如果一致,CouchDB会更新文档,并生成一个新的_rev,版本号加1,例如变为2-xyz1234567890abc,然后返回成功响应。
    • 如果不一致,说明在获取文档后,其他客户端已对该文档进行了更新,CouchDB会返回一个HTTP 409冲突错误,提示客户端需要重新获取最新版本的文档,再进行更新操作。例如:
    HTTP/1.1 409 Conflict
    {
        "error": "conflict",
        "reason": "Document update conflict."
    }
    

客户端收到冲突错误后,需要再次获取文档,根据新的_rev重新发起更新请求。