我读过一些关于 CouchDB 的内容,我对它“仅 append ”这一事实很感兴趣。我可能误解了这一点,但据我了解,它的工作原理有点像这样:
这是一个愚蠢的例子,但这是因为我想了解有关 CouchDB 的一些基本知识。
看到更新是在数据库末尾使用 append 进行的,是否可以查询数据库“就像在时间 t0 一样”,而不做任何特殊的事情?
我可以问 CouchDB“在时间 t0 时 ID 为 1 的用户的名字是什么?” ?
编辑 第一个答案非常有趣,所以我有一个更精确的问题:只要我不“压缩”CouchDB,我就可以编写以某种方式“引用透明”的查询(即它们总是 产生相同的结果)?例如,如果我查询“修订版 r 处的文档 d”,只要我不压缩数据库,我是否能保证总是得到相同的答案?
最佳答案
也许 CouchDB 最常见的错误是相信它为您的数据提供了一个版本控制系统。它不是。
压缩删除所有文档的所有非最新修订,复制仅复制任何文档的最新修订。如果您需要历史版本,则必须使用您认为合适的任何方案将它们保留在最新版本中。
正如所指出的,“_rev”是一个不幸的名字,但没有其他更清楚的词被提出。 “_mvcc”和“_mcvv_token”之前已经被建议过。两者的问题在于,对那里发生的事情的任何描述都将不可避免地包括“旧版本保留在磁盘上直到压缩”,这仍然意味着它是一个用户版本控制系统。
要回答“我可以问 CouchDB“在时间 t0 时 ID 为 1 的用户的名字是什么?”这个问题,简短的回答是“否”。长答案是“是的,但后来它不起作用”,这只是说“不”的另一种方式。 :)
关于couchdb - 在 CouchDB 中可以访问旧数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730299/