【问题标题】:couchdb keeps growing (filesize)couchdb 不断增长(文件大小)
【发布时间】:2018-07-11 04:38:12
【问题描述】:

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

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

这是“按预期工作”还是这里有什么问题?

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

【问题讨论】:

标签: database couchdb couchdb-futon


【解决方案1】:

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

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

例如:

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 个分片,这意味着每个数据库跨越两个文件。创建的每个新文档都可以最终出现在这两个中的一个中。但是,磁盘使用量不会均匀分布。例如,如果每个文档都是一个小的 json 文档,但其中一个获得了 1GB 的附件(http://docs.couchdb.org/en/latest/intro/api.html#attachments),那么只有一个分片会获得 1GB 的凹凸。分片是基于文档的。你可以有 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://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)。

【讨论】:

  • 非常有趣,感谢您的见解。我仍然不完全了解发生了什么,但我现在有了更好的线索。例如,我确实有 shards 文件夹和子文件夹 00000000-1fffffffe0000000-ffffffff,每个都包含一个 ` 文件。但没有一个文件与 Fauxton 中提到的文件大小相匹配。此外,我在 Fauxton 没有相应的_dbs。这是正常的还是我必须手动创建它?
  • 在 CouchDB 1 中,Futon(Fauxton 的前身)用于报告磁盘大小。我想当添加自动压缩功能时它会切换到活动数据。
  • 所以,有了shards,你不能再只备份一个数据库文件,但我想你必须复制/克隆hole shards文件夹?如果你复制一个数据库,这会重新创建整个分片吗?
  • 您也可以创建一个只有一个分片的数据库(请参阅上面链接的有关分片的文档)。
猜你喜欢
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多