问题 couchdb不断增长(文件大小)


我很困惑 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实际上在这些操作之后显示减少的数据库大小,但它从未反映在所使用的物理磁盘空间中。

全新安装后,我正在使用几乎标准的配置。

这是“像预期的那样工作”或者这里有什么不对吗?

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


3753
2018-01-31 22:59


起源

你检查过这个吗? smartregister.atlassian.net/wiki/spaces/Documentation/pages/... - Tarun Lalwani
即使是初始线听起来也很清醒,是的。我在本文中提到了几乎所有本文所建议的内容。 - jAndy


答案:


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

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

例如:

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

  • 简而言之,分片和集群功能允许您拥有分布式数据库和分布式映射/减少计算。在上面的示例中,每个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的信息。它的大小增加,因为每次创建和删除数据库时,它都会更新(写入时复制)。从CouchDB 2.1.0开始,它将自动压缩。您可以检查服务器配置中的自动压缩设置。(在浏览器中: HTTP://本地主机:5984 / _utils /#/ _配置/compactions 部分)。管理员面板位于不同的端口: HTTP://本地主机:5986/ _utils

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


10
2018-02-04 04:24



非常有趣,感谢您的见解。我仍然不完全了解发生了什么,但我现在有一个更好的线索。例如,我确实有 shards 子文件夹的文件夹 00000000-1fffffff 至 e0000000-ffffffff,每个都包含一个<dbsname.couch>`文件。但是这些文件中没有一个与Fauxton中提到的文件大小相匹配。而且,我没有相应的 _dbs 在福克斯顿。这是正常的还是我必须手动创建它? - jAndy
在CouchDB 1中,Futon(Fauxton的前身),用于报告磁盘大小。我想在添加自动压缩功能时它会切换到活动数据。 - M-I
所以,随着 shards 你不能只备份单个数据库文件,但你必须复制/克隆我认为的hole shards文件夹?如果复制数据库,这会重新创建整个分片吗? - jAndy
您还可以使用一个分片创建数据库(请参阅上面链接的有关分片的文档)。 - M-I