我们在生产中使用MongoDB(v.3.4)作为主数据存储。我们广泛使用GridFS,而db正在增长,我们的大小也存在一些重大问题。我们有cca。在GridFS中上传的8000个文件(使用Java驱动程序)...文件长度的总和约为30GB,但数据库的大小为350GB ...因此它的大10倍。我们看不到除chunkSize之外的任何原因。我们在db中有几个大文件,但是大多数文件都小于默认的256kB chunkSize,请参见下面的示例。
我已经阅读了一些不用担心的discussions,真正的存储只需要文件大小加上一些字节。但它在我们的数据库中看起来并不像。有人可以确认这应该如何工作?我们有副本集,其中数据库大小为350Gb的奴隶,所以它似乎不是一些数据库损坏问题。我们尝试了一些数据库清理......但没办法。
{
"_id" : ObjectId("572c6877f0ea0bbab3b67015"),
"metadata" : {
"id" : "F735ADCACB662DD5C1257FAB0023B5CC",
"name" : "file"
},
"filename" : "1150228.jpg",
"aliases" : null,
"chunkSize" : NumberLong(261120),
"uploadDate" : ISODate("2016-05-06T09:48:39.136Z"),
"length" : NumberLong(36368),
"contentType" : null,
"md5" : "fd3393af027e0f1ff799ac4b1c117d58"
}
编辑1:我将mongofiles -d database list
放入文件并在Excel中打开并调出文件大小,显示35GB。
解决:
我运行了建议的命令mongo --quiet --eval 'db.fs.chunks.aggregate([{$group:{_id: "$files_id", chunks: {$sum: 1}}}]).forEach(function(f){print(f._id + "\t" + f.chunks)})'
以通过file_id和相关的块数聚合块收集。在长文件中,我发现只有一个带有> 20个百万块的块,导致了这个问题。现在很容易删除所有这些块然后缩小数据库......
答案 0 :(得分:0)
我运行了建议的命令
mongo --quiet --eval 'db.fs.chunks.aggregate([{$group:{_id: "$files_id", chunks: {$sum: 1}}}]).forEach(function(f){print(f._id + "\t" + f.chunks)})'
通过file_id和相关的块数聚合块集合。在长文件中,我发现只有一个带有> 20个百万块的块,导致了这个问题。现在很容易删除所有这些块然后缩小数据库......