面试题答案
一键面试_rev字段变化
- 初始创建:当一个新文档被创建时,CouchDB会为其生成一个初始的_rev值。例如,初始_rev可能类似
1-abcdef123456
,其中1
代表版本号,abcdef123456
是一个唯一的哈希值,用于标识这个版本的文档内容。 - 首次更新:每次文档更新时,版本号会递增,哈希值也会根据更新后的文档内容重新计算。比如文档第一次更新后,_rev可能变为
2-ghijkl789012
,这里版本号从1
变为2
,哈希值也因为文档内容改变而改变。 - 后续更新:持续更新时,版本号持续递增,哈希值始终反映当前版本的文档内容。例如再次更新后可能是
3-mnopqr345678
。
对版本追踪的作用
- 记录变更历史:通过_rev字段版本号的递增,清晰记录了文档从创建到多次更新的整个历史过程,能直观了解文档经历了多少次修改。
- 冲突检测与解决:在多用户并发更新场景下,CouchDB利用_rev字段来检测冲突。如果两个用户同时基于同一个旧版本(相同_rev)更新文档,CouchDB会识别出冲突,因为新生成的_rev会不同。开发者可以根据这些不同的_rev值以及对应的文档版本,手动解决冲突,比如选择保留哪个版本或者合并内容。
- 数据回溯:由于每个_rev都对应特定版本的文档内容,通过保存不同_rev版本的文档,可以实现数据回溯到之前的某个状态,这在数据恢复或者审计等场景非常有用。