2017-05-18 19 views
0

我們在生產中使用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萬個大塊的項目,這導致了這個問題。現在,它很容易刪除所有這些數據塊,然後收縮數據庫...

+0

db.stats()用dataSize,storageSize,fileSize表示什麼?通過「清理」你的意思是「緊湊」和「修復」? –

+0

我在這裏描述了詳細信息http://stackoverflow.com/questions/43070555/gridfs-chunks-collection-shows-big-storagesize-comparing-to-real-data-stored幾個星期前沒有任何反應。並且數據庫正在增長... –

+0

'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和塊數。檢查文件數是否匹配,以及總塊和塊大小的乘積是否相加。 –

回答

0

我跑通過的file_id和相關的塊數提出命令

mongo --quiet --eval 'db.fs.chunks.aggregate([{$group:{_id: "$files_id", chunks: {$sum: 1}}}]).forEach(function(f){print(f._id + "\t" + f.chunks)})' 

到聚合塊集合。在長文件中,我發現了一個大於2000萬個大塊的項目,這導致了這個問題。現在它很容易刪除所有這些塊,然後收縮數據庫...

相關問題