面试题答案
一键面试- 文档内容冲突
- 冲突描述:在两个或多个节点同时对同一文档进行修改,并且修改内容不同时,就会产生文档内容冲突。例如,节点A将文档中的某个字段值从“旧值1”改为“新值1”,而节点B同时将该字段值从“旧值1”改为“新值2”。
- 解决思路:
- 最后写入获胜(LWW, Last Write Wins):以时间戳为依据,保留时间戳最新的修改。CouchDB 可以在文档中记录每次修改的时间戳,当发生冲突时,比较时间戳,选择时间戳最新的版本作为最终版本。
- 手动解决:将冲突的文档呈现给用户,由用户决定保留哪个版本或者手动合并内容。这通常在对数据一致性要求较高且人工干预成本较低的场景下使用。
- 文档删除冲突
- 冲突描述:一个节点删除了某文档,而另一个节点对该文档进行了修改。例如,节点A删除了文档X,而几乎同时节点B对文档X进行了添加新字段的操作。
- 解决思路:
- 恢复已删除文档:可以记录文档删除操作的时间戳以及修改操作的时间戳。如果修改操作的时间戳晚于删除操作的时间戳,那么恢复已删除的文档,并应用修改。
- 按策略处理:根据业务逻辑制定策略,比如总是优先保留删除操作,适用于数据删除具有更高优先级的业务场景。
- ID冲突
- 冲突描述:在多主复制中,如果两个或多个节点在没有协调的情况下,为新文档生成了相同的ID,就会产生ID冲突。
- 解决思路:
- 使用唯一ID生成算法:采用像UUID(通用唯一识别码)这样的标准算法,保证在分布式环境下生成的ID具有全球唯一性,从根源上避免ID冲突。
- 重命名冲突ID:当检测到ID冲突时,系统自动为冲突的文档生成新的唯一ID,并记录原ID与新ID的映射关系,以便后续可能的追溯和数据迁移。