gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:02:50 25 4
gpt4 key购买 nike

我读过一些关于 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com