couchdb - 在 CouchDB 中可以访问旧数据吗?

标签 couchdb append

我读过一些关于 CouchDB 的内容,我对它“仅 append ”这一事实很感兴趣。我可能误解了这一点,但据我了解,它的工作原理有点像这样:

  • 数据在时间 t0 添加到数据库,告诉用户 ID 为 1 的名称是“Cedrik Martin”
  • 询问“ID 为 1 的用户的姓名是什么?”的查询返回 "Cedrik Martin"
  • 在时间 t1,对数据库进行了更新,告知:“ID 为 1 的用户名为 Cedric Martin”(将“k”更改为“c”)。
  • 再次询问“ID 为 1 的用户的名字是什么”的查询现在返回“Cedric Martin”

  • 这是一个愚蠢的例子,但这是因为我想了解有关 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/

    相关文章:

    couchdb - 将数据 .csv 导入 couchdb

    database - couchdb 在没有 View 的情况下查找数据

    java - 如何在java中创建xml文件并将用户输入的数据 append 到其中

    python - Pandas 数据框的动态合并

    javascript - 在 javascript 中 append 变量值

    javascript - PouchDB 删除设备上的数据而不影响远程同步

    database - 从 pouchdb 数据库中读取关系的最有效方法是什么

    javascript - 如何在 Futon 中通过 startsWith() 查找文档

    python - 交替 append 两个列表中的元素

    c - 合并文件与在 C 中 append 文件