更新Couchbase文档是否会替换原始文档?

更新Couchbase文档是否会替换原始文档?,couchbase,Couchbase,我最近开始使用Couchbase。如上所述,Couchbase是一个仅附加的DB。据我所知,这意味着我的更新文档附在Couchbase的B+树上。或者它实际上取代了原始文档 如果添加了更新的文档,原始文档会发生什么情况?它只是持续存在,还是会在某个时候通过自动压缩被删除?Couchbase可以配置为将更新作为原子事务处理,也可以不作为原子事务处理。在Couchbase土地上,必须考虑两种方法:CoucBASE存储文件:内存和磁盘。 我怀疑您的问题是针对Couchbase在更新后如何将文档存储在磁

我最近开始使用Couchbase。如上所述,Couchbase是一个仅附加的DB。据我所知,这意味着我的更新文档附在Couchbase的B+树上。或者它实际上取代了原始文档


如果添加了更新的文档,原始文档会发生什么情况?它只是持续存在,还是会在某个时候通过自动压缩被删除?

Couchbase可以配置为将更新作为原子事务处理,也可以不作为原子事务处理。在Couchbase土地上,必须考虑两种方法:CoucBASE存储文件:内存和磁盘。 我怀疑您的问题是针对Couchbase在更新后如何将文档存储在磁盘上的上下文提出的

文档发生变异后,Couchbase会首先在内存中提供新变异的文档供其他读者查看,然后最终将其保存到磁盘。顺便说一下,后者也可以配置为原子的

每个文档变异都会生成一个新的CAS值,以与更新的文档相关联。将这两个CAS值视为文档两个版本的唯一标识符:Previor和current。两者都作为两个单独的文档存储在内存和磁盘中

因此,Couchbase不会重写存储文档早期版本的磁盘块,而是将新文档作为一个完全独立的文档存储在磁盘上。顺便说一句,Couchbase通过确定任何其他文档的最后一个写入位置并在之后立即将新文档写入磁盘来选择磁盘上的位置

垃圾收集,或Couchbase所说的压缩,最终会停下来查找过期的旧文档,并将它们弹出,只保留最新版本。此外,压缩过程将填补磁盘上试图保持连续存储空间的空白

这些都是可配置的,可以选择更原子化,但当您有一个最终一致性可接受的用例时,体系结构真的会大放异彩


这里有一个关于如何在应用层处理并发文档变化的参考,但它很好地解释了CAS值是如何工作的:

感谢您的详细回答。我已经知道CAS,但我不确定追加过程。谢谢你的解释。