更新 Couchbase 文档是否会替换原始文档?
Does updating a Couchbase document replace the original document?
我最近开始使用 Couchbase。如前所述 here Couchbase 是一个只能追加的数据库。据我所知,这意味着我的更新文档已附加到 Couchbase 的 B+ 树。或者它实际上取代了原始文档?
如果更新后的文档被追加,原始文档会怎样?是只是持久存在还是会在某个时候通过自动压缩被删除?
Couchbase 可以配置为将更新处理为原子事务或不处理。在Couchbase的土地上,必须考虑Couchbase存储文件的两种方式:内存和磁盘。
我怀疑你的问题是针对 Couchbase 在更新后如何将文档存储在磁盘上的上下文。
文档发生变化后,Couchbase 首先在内存中提供新变化的文档供其他读者查看,然后最终将其保存到磁盘。顺便说一下,后者也可以配置为原子的。
每个文档突变都会生成一个新的 CAS 值以与更新后的文档相关联。将这两个 CAS 值视为文档两个版本的唯一标识符:先前版本和当前版本。两者都作为两个单独的文档存储在内存和磁盘中。
因此,Couchbase 不会重写存储早期版本文档的磁盘块,而是将新文档作为一个完全独立的文档存储在磁盘上。顺便说一句,Couchbase 通过确定所有其他文档的最后一个写入位置并在其后立即将新文档写入磁盘来选择磁盘上的位置。
垃圾收集,或 Couchbase 所指的压缩,最终会停下来查找已过期的旧文档,然后将它们弹出,只保留最新版本。此外,压缩过程将填补磁盘上的空白,试图保持连续的存储空间。
这些都可以配置为可选的更多atomic-like,但是当您有一个最终一致是可以接受的用例时,该体系结构真正闪耀。
这里有一个关于如何在应用层处理并发文档突变的参考,但很好地解释了 CAS 值的工作原理:https://developer.couchbase.com/documentation/server/current/sdk/concurrent-mutations-cluster.html
我最近开始使用 Couchbase。如前所述 here Couchbase 是一个只能追加的数据库。据我所知,这意味着我的更新文档已附加到 Couchbase 的 B+ 树。或者它实际上取代了原始文档?
如果更新后的文档被追加,原始文档会怎样?是只是持久存在还是会在某个时候通过自动压缩被删除?
Couchbase 可以配置为将更新处理为原子事务或不处理。在Couchbase的土地上,必须考虑Couchbase存储文件的两种方式:内存和磁盘。
我怀疑你的问题是针对 Couchbase 在更新后如何将文档存储在磁盘上的上下文。
文档发生变化后,Couchbase 首先在内存中提供新变化的文档供其他读者查看,然后最终将其保存到磁盘。顺便说一下,后者也可以配置为原子的。
每个文档突变都会生成一个新的 CAS 值以与更新后的文档相关联。将这两个 CAS 值视为文档两个版本的唯一标识符:先前版本和当前版本。两者都作为两个单独的文档存储在内存和磁盘中。
因此,Couchbase 不会重写存储早期版本文档的磁盘块,而是将新文档作为一个完全独立的文档存储在磁盘上。顺便说一句,Couchbase 通过确定所有其他文档的最后一个写入位置并在其后立即将新文档写入磁盘来选择磁盘上的位置。
垃圾收集,或 Couchbase 所指的压缩,最终会停下来查找已过期的旧文档,然后将它们弹出,只保留最新版本。此外,压缩过程将填补磁盘上的空白,试图保持连续的存储空间。
这些都可以配置为可选的更多atomic-like,但是当您有一个最终一致是可以接受的用例时,该体系结构真正闪耀。
这里有一个关于如何在应用层处理并发文档突变的参考,但很好地解释了 CAS 值的工作原理:https://developer.couchbase.com/documentation/server/current/sdk/concurrent-mutations-cluster.html