2017-05-18 4 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" 
} 

EDIT 1:私は、ファイルにmongofiles -d database listを行なったし、Excelでopennedとファイルのサイズをアップsumed、35ギガバイトを示しています。解決しよう

を私はの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)})'を実行しました。長いファイルでは、20万を超えるチャンクを持つアイテムが1つしか見つかりませんでした。これが問題の原因でした。これで、すべてのこれらのチャンクを削除し、データベースを縮小するために、その非常に簡単... ​​

+0

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 "、chunkks:{$ sum:1}}}]) .forEach(function(f){print(f._id + "\ t" + f.chunks)}) ''はファイルIDとチャンク数のtsvを出力します。ファイルの数が一致しているかどうか、合計チャンクとチャンクサイズの積が合っているかどうかを確認します。 –

答えて

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)})' 

を走りました。長いファイルでは、20万を超えるチャンクを持つアイテムが1つしか見つかりませんでした。これが問題の原因でした。これらのすべてのチャンクを削除してデータベースを縮小するのはかなり簡単です...

関連する問題