couchdb不断增长(文件大小)

时间:2018-01-31 22:59:03

标签: database couchdb couchdb-futon

我在磁盘上的数据库文件大小方面对 CouchDB 行为感到非常困惑。看起来我的工作并不重要,数据库文件只会变得越来越大(甚至在删除/清除文档或整个数据库时)。

我看了我的/var/lib/couchdb/_dbs.couch文件,它的大小从未减小过。简单的例子:

curl -X PUT http://admin:secretpassword@localhost:5984/testdb

_dbs.couch将文件大小增加了5kb。

curl -X DELETE http://admin:secretpassword@localhost:5984/testdb

文件大小没有变化。即使我过滤了数据库的复制(过滤掉已删除的文档)或手动触发压缩,磁盘文件大小也不会减少。 现在真正令人困惑的是,Fauxton实际上在这些操作之后显示减少的数据库大小,但它从未反映在所使用的物理磁盘空间中。

我在全新安装后使用了相当多的标准配置。

这是"是否按预期工作"或者这里有什么不对吗?

更重要的是:我能做些什么吗?

1 个答案:

答案 0 :(得分:10)

它按预期工作,你只是没有查看正确的文件。

每个数据库都有相同名称的相应文件。

例如:

curl -X PUT http://admin:secretpassword@localhost:5984/testdb

curl -X PUT http://admin:secretpassword@localhost:5984/emaildb

  • 由于您有_dbs.couch文件,因此您可能正在使用具有分片功能的CouchDB 2.X.X. 它将在“shards”文件夹的子文件夹中创建多个文件。

data/ +-- shards/ | +-- 00000000-7fffffff/ | | -- emaildb.124456678.couch | | -- testdb.647948447.couch | +-- 80000000-ffffffff/ | | -- emaildb.124456678.couch |___|____-- testdb.647948447.couch

更多信息:http://docs.couchdb.org/en/latest/cluster/sharding.html

  • 简而言之,分片和群集功能允许您拥有一个分布式数据库,其中包含分布式map / reduce计算。在上面的示例中,每个dbs有2个分片,这意味着每个数据库跨越两个文件。创建的每个新doc都可以最终出现在这两个中。但磁盘使用情况不会均匀分布。例如,如果每个doc都是一个小的json doc,但其中一个获得1GB附件(http://docs.couchdb.org/en/latest/intro/api.html#attachments),则只有一个碎片会获得1GB的隆起。分片是基于doc的。您可以拥有2个分片,可以拥有20个分片,但它们并非都必须位于同一台服务器上(http://docs.couchdb.org/en/latest/cluster/theory.html)。如果您知道一台服务器没有足够的磁盘空间来容纳您的所有数据,您可以设置20个couchdb服务器,每台服务器将保存1个分片(大约是所有文档的1/20)。无论是地下室中的单个节点,还是遍布全球的couchdb服务器集群,对于客户端应用程序(curl,pouchdb,firefox等),它都是相同的API。

  • _dbs数据库(_dbs.couch)记录集群和分片管理的每个dbs的信息。它的大小增加,因为每次创建和删除数据库时,它都会更新(Copy-On-Write)。从CouchDB 2.1.0开始,它将自动压缩。您可以检查服务器配置中的自动压缩设置(在浏览器中:http://localhost:5984/_utils/#/_config/compactions部分)。管理员面板位于不同的端口:http://localhost:5986/_utils

  • Fauxton报告的大小是“活动大小”。不计算仍在磁盘上的已删除文档,这些文档将在压缩后删除。 curl http://localhost:5984/testdb会提供其他信息,例如磁盘上的大小(http://docs.couchdb.org/en/latest/api/database/common.html#get--db)。