我們在生產中使用MongoDB(v.3.4)作爲主數據存儲。我們廣泛使用GridFS,而db正在增長,我們在它的大小上有一些重大問題。我們有cca。在GridFS中上傳的8000個文件(使用Java驅動程序)......文件長度總和大約爲30GB,但數據庫大小爲350GB ......所以它的大小是它的10倍。我們不能看到除chunkSize之外的任何理由。我們在db中有幾個大文件,但大多數文件都小於默認的256kB chunkSize請參見下面的示例。GridFS和chunkSize - 我們的GridFS數據庫與存儲的實際數據/文件相比太大
我已經讀了幾個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 openned和SUMED了文件大小,顯示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和相關的塊數聚集塊集合。在長文件中,我發現了一個大於2000萬個大塊的項目,這導致了這個問題。現在,它很容易刪除所有這些數據塊,然後收縮數據庫...
db.stats()用dataSize,storageSize,fileSize表示什麼?通過「清理」你的意思是「緊湊」和「修復」? –
我在這裏描述了詳細信息http://stackoverflow.com/questions/43070555/gridfs-chunks-collection-shows-big-storagesize-comparing-to-real-data-stored幾個星期前沒有任何反應。並且數據庫正在增長... –
'mongo --quiet --eval'db.fs.chunks.aggregate([{$ group:{_ id:「$ files_id」,chunk:{$ sum:1}}}])) .forEach(function(f){print(f._id +「\ t」+ f.chunks)})''輸出一個tsv的文件id和塊數。檢查文件數是否匹配,以及總塊和塊大小的乘積是否相加。 –