面试题答案
一键面试1. CouchDB检测冲突的方式
CouchDB使用基于文档修订版本号的机制来检测冲突。每个文档都有一个_rev
属性,每当文档被修改时,这个修订版本号就会更新。当多个客户端同时对同一文档进行修改时,它们各自基于文档的当前版本(具有相同的_rev
)进行操作。当这些修改尝试保存回数据库时,CouchDB会比较每个修改请求中的_rev
与数据库中当前文档的_rev
。如果不匹配,就意味着在客户端读取文档和尝试保存修改之间,其他客户端已经对该文档进行了修改,从而检测到冲突。
2. 应用层面解决冲突的策略
- 手动解决策略:
- 提示用户:应用程序可以向用户展示冲突的文档版本,由用户手动选择保留哪个版本或者手动合并这些版本的内容。例如,在一个协作编辑的文本应用中,展示不同用户修改后的文本内容,让用户决定最终的文本形式。
- 自动解决策略:
- 最后写入优先(Last Write Wins, LWW):应用程序可以根据时间戳或修订版本号来自动选择保留最新修改的版本。例如,比较冲突版本的修改时间,选择时间最新的版本作为最终版本。这种方法简单直接,但可能会丢失一些早期的修改内容。
- 基于业务逻辑合并:根据具体的业务逻辑进行合并。比如在一个任务管理应用中,如果冲突发生在任务的不同属性(如一个客户端修改了任务名称,另一个客户端修改了任务优先级),应用程序可以将这些修改都合并到最终版本中。这需要应用程序了解业务逻辑,能够识别哪些修改可以安全合并。