我在看 CouchDB。文档有版本,您可能有冲突的版本。它是否像 dvcs 一样将版本序列存储为有向无环图 (DAG)?如果没有,它是如何实现的?
问问题
173 次
2 回答
3
是的,修订序列类似于有向无环图。我在CouchDB 复制就像 Git中讨论了这个(在概念层面上)。
我喜欢说 CouchDB 就像用于教学目的的 Git。但是存在显着差异。仅举几例:
- CouchDB 不存储旧数据,仅存储旧修订 ID。
- CouchDB 最终将截断很长的修订历史以保持性能
因此,我不确定您是否可以在实践中实现 3 路合并,因为您最多只能使用两个数据版本:源和目标。已知共同祖先存在,但其价值不存在。
虽然这通常可能是一个问题,但有几个“作弊”使其在实践中并不那么糟糕。
- 该
validate_doc_update()
功能防止任意修改。它甚至可以要求将更改元数据存储为文档的一部分。(但这是一个应用程序级的解决方案。) - 大类应用的大类数据可以2路合并:例如选择最新的时间戳;将不同的电话号码合并成一个电话号码数组;等等
显然,这些是高度特定于应用程序的,不是通用解决方案。
于 2011-10-05T13:45:02.740 回答