Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
couchDB的多个版本是否保留冗余数据?_Couchdb_Couchdb Futon_Nosql - Fatal编程技术网

couchDB的多个版本是否保留冗余数据?

couchDB的多个版本是否保留冗余数据?,couchdb,couchdb-futon,nosql,Couchdb,Couchdb Futon,Nosql,我刚开始使用CouchDB,注意到它在数据库中保存了多个版本的数据。这是否意味着每个版本都是当前添加字段的完整副本?那么,它是在磁盘上保留冗余数据还是版本只是增量版本?CouchDB保存多个完整的文档修订,它不存储增量更改。CouchDB的内部使用仅附加的数据结构,因此每个新版本都添加到数据库文件中 此外,CouchDB使用MVCC(多版本并发控制),这在允许并发写入程序的同时防止了对锁的需要。(您可以在中了解有关此功能的更多信息)这是相关的,因为修订号是该机制的重要组成部分,保留一些以前的修订

我刚开始使用CouchDB,注意到它在数据库中保存了多个版本的数据。这是否意味着每个版本都是当前添加字段的完整副本?那么,它是在磁盘上保留冗余数据还是版本只是增量版本?

CouchDB保存多个完整的文档修订,它不存储增量更改。CouchDB的内部使用仅附加的数据结构,因此每个新版本都添加到数据库文件中

此外,CouchDB使用MVCC(多版本并发控制),这在允许并发写入程序的同时防止了对锁的需要。(您可以在中了解有关此功能的更多信息)这是相关的,因为修订号是该机制的重要组成部分,保留一些以前的修订有助于此过程。(特别是在复制设置中)

简而言之,每次修改文档时,数据库中都会有重复项。因此,多次修改同一文档可能会导致数据库文件膨胀。此外,修改较少的大型文档也具有相同的效果。对于每个文档,只有最新版本被数据库视为“活动”,但旧版本可能仍然存在。(下一节将详细介绍)

这听起来可能低效且浪费,但CouchDB为您提供了一个名为的特性。此过程将从数据库文件中删除所有修订(最新修订除外)。在CouchDB 2.0之前,这通常由管理员手动调用,但现在自动化程度更高

关于CouchDB的一个常见误解是,多个版本可以像版本控制系统一样使用(例如:git、svn),因此您可以始终保留数据库的某种历史记录。然而,这是完全错误的,因为MVCC纯粹用于并发控制。如前所述,压缩将删除旧版本,因此您在任何时候都只能依赖数据库中现有的最新版本

我强烈建议大家通读CouchDB的所有文章。它并不是特别冗长,而且在描述内部结构和在决定如何构建应用程序时可以使用的权衡方面也非常出色