如何在CouchDB中禁用版本控制?

如何在CouchDB中禁用版本控制?,couchdb,Couchdb,我知道有时候这是一个很好的特性,但是如果我需要存储大量的数据,那么围绕数据本身的其他“元数据”就没有必要了 有没有办法在CouchDB中禁用版本控制,或者我需要使用不同的DB引擎,比如Mongo?版本控制不是CouchDB的一个功能,它是将数据写入磁盘并与其他节点执行复制冲突解决的核心功能。它不是一种历史机制 非常不幸的是,没有比版本更好的术语来指代以前的文件副本。因为对大多数开发人员来说,version意味着一些存放在仓库里的history。在CouchDB中,这根本不是它想要使用的 Couc

我知道有时候这是一个很好的特性,但是如果我需要存储大量的数据,那么围绕数据本身的其他“元数据”就没有必要了


有没有办法在CouchDB中禁用版本控制,或者我需要使用不同的DB引擎,比如Mongo?

版本控制不是CouchDB的一个功能,它是将数据写入磁盘并与其他节点执行复制冲突解决的核心功能。它不是一种历史机制

非常不幸的是,没有比
版本
更好的术语来指代以前的文件副本。因为对大多数开发人员来说,
version
意味着一些存放在仓库里的
history
。在CouchDB中,这根本不是它想要使用的

CouchDB文档中到处都有这样一条信息:不依赖以前的版本作为备份或版本控制系统,因为它们可能随时消失,因为它们主要用于复制冲突检测。但简单的事实是,这并不是一个特性,它只是CouchDB的工作方式

删除过去版本的唯一方法是定期更新数据库。在当前版本的CouchDB中,可以使用一个脚本来启用此功能,该脚本钩住文档更新并基于高水位线阈值启动半自动压缩。通常,这是在批量更新大量文档后手动完成的。您知道,从特定于应用程序的角度来看,这可能是有益的


也就是说,如果您不更新文档,则不会生成历史记录,这是不需要的。

您可以尝试使用_revs\u limit API(例如/database/_revs\u limit)。我从来没有使用过它,我只是在这个链接上读到过它。

在CouchDB的未来版本中有自动压缩功能和改进。这可以帮助您根据某些设置自动删除较旧的文档版本。

这是一个非常聪明的建议,但是我猜将限制设置为0不起作用,如果将其设置为1或更大,CouchDB仍然需要
\u rev
字段,因此您仍然需要执行fetch/modify/store操作。也许值得一试+1.Radek,也许问问你自己:这是一个过早的优化吗?为什么我要避免CouchDB修订?因为感觉不对?还是因为我有证据(或强有力的理由)表明MVCC会带来太多负担?(是的!没错,CouchDB带来了磁盘空间、磁盘i/o和客户端负担)在我(jhs)的经验中,MVCC感觉不正确,但实际上没有问题,然而,对于大容量、无历史数据,CouchDB并不理想。也许是Redis或Membase?(Membase计划将来通过Couchbase与CouchDB兼容。)@jhs CouchDB
版本
不是用于历史记录,而是用于复制控制。如果您没有历史数据,那么CouchDB中的版本将永远不会超过1个。您是对的,担心性能而不分析是一种过早的优化。我的经验是CouchDB非常棒,没有日志文件条目这样的历史数据。它写得快,读得快,并且通过全文索引查询得快。@Jarrod严格地说,从我的阅读来看,它适用于MVCC ie:并发控制。通过从不覆盖现有记录,总是将数据附加到db文件中,您可以主要删除锁定和事务,rev id也适用于复制/保存冲突。