Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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.view文件失控?_Couchdb - Fatal编程技术网

CouchDB.view文件失控?

CouchDB.view文件失控?,couchdb,Couchdb,我最近遇到一种情况,我的CouchDB实例使用了20GB VM实例上的所有可用磁盘空间。 经过调查,我发现/usr/local/var/lib/couchdb/中的一个目录包含一堆.view文件,其中最大的是16GB。我能够删除*.view文件以恢复正常操作。我不确定.view文件为什么会变得如此之大,以及CouchDB是如何管理.view文件的 再多了解一点。我有一个运行Ubuntu9.10(karmic)的虚拟机,有512MB和CouchDB 0.10。VM有一个cron作业,它调用一个查询

我最近遇到一种情况,我的CouchDB实例使用了20GB VM实例上的所有可用磁盘空间。 经过调查,我发现/usr/local/var/lib/couchdb/中的一个目录包含一堆.view文件,其中最大的是16GB。我能够删除*.view文件以恢复正常操作。我不确定.view文件为什么会变得如此之大,以及CouchDB是如何管理.view文件的

再多了解一点。我有一个运行Ubuntu9.10(karmic)的虚拟机,有512MB和CouchDB 0.10。VM有一个cron作业,它调用一个查询视图的Python脚本。cron作业每五分钟运行一次。每次查询视图时,.view文件的大小都会增加。我写了一份每小时监控一次的工作,几天后,我没有看到文件滚动或以其他方式缩小


有人对这个问题有什么见解吗?有没有我遗漏的文件?我找不到关于这个主题的任何东西,但这可能是因为找错了地方或我的搜索词。

CouchDB非常需要磁盘,用磁盘空间换取性能。视图将随着项目的添加而增大。通过清理和压缩,您可以恢复不再需要的磁盘空间

每次创建、更新或删除文档时,视图索引都会随着文档的相关更改而更新。在查询视图时,将对其进行更新。因此,如果您正在进行大量文档更改,那么您应该期望索引增长,并且需要通过压缩和清理进行管理

如果您的视图对于给定的文档集非常大,那么您的视图可能设计得很糟糕。或者,您的设计可能只需要大视图,您需要像管理任何其他资源一样管理它


如果您可以描述正在发生的文档更新(包括创建和删除)以及视图函数发出的内容,尤其是对于大视图,那么就更容易判断发生了什么。

您的.view文件在每次访问视图时都会增加,因为CouchDB会在访问时更新视图。CouchDB视图也需要像数据库一样进行压缩。如果您经常更改文档,导致视图发生更改,则应不时运行视图压缩。看


要减小视图的大小,请查看正在发射的数据。当您发出(foo,doc)时,整个文档将复制到视图中,当您查询视图时,它将立即可用。函数(doc){emit(doc.title,doc);}将生成与数据库本身一样大的视图。您还可以发出(doc.title,nil);并使用include_docs选项,让CouchDB在访问视图时从数据库中获取文档(这将导致性能略微下降)。请参见对文档使用顺序或单调id,而不是随机id

是的,couchdb非常需要磁盘,需要定期压缩。但是,还有一件事可以帮助减少这种磁盘使用,特别是在不必要的时候

Couchdb使用B+树来存储数据/文档,这对于数据检索的性能来说是非常好的数据结构。然而,使用B-tree可以在性能上与磁盘空间使用进行权衡。使用完全随机Id,B+树可以快速扇出。由于每个内部节点的最小填充率为1/2,因此节点大多填充到1/2(由于数据的随机性,数据分布均匀),从而生成更多的内部节点。此外,新的插入可能会导致重写完整的树。这就是随机性可能导致的;)


相反,使用ID可以避免所有问题。

我也遇到了这个问题,尝试使用CouchDB进行基于浏览的游戏

在网站发布的第一天,我们就有大约10万名意外访客,而在两天之内,CouchDB数据库的空间容量就达到了40GB。这导致服务器崩溃,因为硬盘已满

压缩使其恢复到50MB左右。我还将
\u revs\u limit
(默认值为1000)设置为10,因为我们不关心修订历史,并且从那时起它运行得非常完美。在拥有近100万用户之后,数据库大小通常约为2-3GB。当我运行压缩时,它大约为500MB

将文档修订限制设置为10:
curl-X PUT-d“10”http://dbuser:dbpassword@127.0.0.1:5984/yourdb/\u revs\u limit

或没有用户:密码(不推荐):

curl-X PUT-d“10”http://127.0.0.1:5984/yourdb/_revs_limit

文档很大,对文档的更改非常重要。这一切都是有道理的。谢谢你的回答。但是CouchDB不会自己清理吗?还是由管理员决定?好像坏了,或者我遗漏了什么?CouchDB要求您运行压缩来恢复磁盘空间。何时能做到这一点在很大程度上取决于您的环境。通常,您会在服务器上的负载较低时执行此操作,并通过cron作业触发它。如果您有任何副本,您也应该了解它可能会如何影响复制。我不同意“如果您的视图对于给定的文档集非常大,那么您的视图可能设计得很差”。“may”是存在的,但是作者应该强调,对于应用程序来说,小视图不一定是一个快捷方式。例如,像
?include_docs
这样的操作非常激烈,这使得在视图中包含完整的文档对于性能是必要的。这也是CouchDB用磁盘空间换取性能的地方。好吧,下一句话说明应用程序设计可能只需要大的视图。你需要多明确?请记住,这是对有关视图中失控磁盘使用情况的问题的回答。如果您不知道自己在做什么,那么设计一个创建不必要的大索引的视图当然很容易。因此,我认为答案是正确的。