0

GridFS を使用する MongoDB クラスターがあります。gridfs の fs.chunks テーブルは、2 つのレプリカセットに分割されています。ディスク容量の使用率が非常に高くなっています。90GB のデータの場合、130GB 以上のディスク容量が必要です。

fs.chunks テーブルにスペースが必要なようです。90GBのスペースを示すfs.filesの「長さ」フィールドを要約しました。両方のシャードの「サイズ」フィールドの合計は 130GB です。これは、コレクションに含まれるペイロード データの実際のサイズですよね?

これは、40GB のオーバーヘッドがあることを意味しますか? これは正しいです?それはどこから来ているのですか?BSONエンコーディングですか?オーバーヘッドを削減する方法はありますか?

mongos> db.fs.chunks.stats()
{
    "sharded" : true,
    "ns" : "ub_datastore_preview.fs.chunks",
    "count" : 1012180,
    "numExtents" : 106,
    "size" : 140515231376,
    "storageSize" : 144448592944,
    "totalIndexSize" : 99869840,
    "indexSizes" : {
            "_id_" : 43103872,
            "files_id_1_n_1" : 56765968
    },
    "avgObjSize" : 138824.35078345748,
    "nindexes" : 2,
    "nchunks" : 2400,
    "shards" : {
            "ub_datastore_qa_group1" : {
                    "ns" : "ub_datastore_preview.fs.chunks",
                    "count" : 554087,
                    "size" : 69448405120,
                    "avgObjSize" : 125338.44887174758,
                    "storageSize" : 71364832800,
                    "numExtents" : 52,
                    "nindexes" : 2,
                    "lastExtentSize" : 2146426864,
                    "paddingFactor" : 1,
                    "systemFlags" : 1,
                    "userFlags" : 0,
                    "totalIndexSize" : 55269760,
                    "indexSizes" : {
                            "_id_" : 23808512,
                            "files_id_1_n_1" : 31461248
                    },
                    "ok" : 1
            },
            "ub_datastore_qa_group2" : {
                    "ns" : "ub_datastore_preview.fs.chunks",
                    "count" : 458093,
                    "size" : 71066826256,
                    "avgObjSize" : 155136.2414531547,
                    "storageSize" : 73083760144,
                    "numExtents" : 54,
                    "nindexes" : 2,
                    "lastExtentSize" : 2146426864,
                    "paddingFactor" : 1,
                    "systemFlags" : 1,
                    "userFlags" : 0,
                    "totalIndexSize" : 44600080,
                    "indexSizes" : {
                            "_id_" : 19295360,
                            "files_id_1_n_1" : 25304720
                    },
                    "ok" : 1
            }
    },
    "ok" : 1
}
4

3 に答える 3

2

これは、コレクションに含まれるペイロード データの実際のサイズですよね?

はい。

これは、40GB のオーバーヘッドがあることを意味しますか? これは正しいです?

ちょっと。しかし、それは異常に大きいようです。

それはどこから来ているのですか?BSONエンコーディングですか?

いいえ、データの BSON エンコーディングにはそれほど多くのオーバーヘッドはありません。ただし、メタデータを追加すると、場合によってはそうなることがあります。

mongo では、通常、オーバーヘッドの主な原因はメタデータですが、リファレンス グリッド仕様を使用する場合は、それほど大きくないはずです。

たとえば、ストレージには次のものがあります。

db.fs.files.aggregate([{$group: {_id: null, total: { $sum: "$length"}}}])
{
    "result" : [
        {
            "_id" : null,
            "total" : NumberLong("4631125908060")
        }
    ],
    "ok" : 1
}

db.fs.chunks.stats()
{
    "ns" : "grid_fs.fs.chunks",
    "count" : 26538434,
    "size" : NumberLong("4980751887148"),
    "avgObjSize" : 187680.70064526037,
    "storageSize" : NumberLong("4981961457440"),
    "numExtents" : 2342,
    "nindexes" : 2,
    "lastExtentSize" : 2146426864,
    "paddingFactor" : 1,
    "systemFlags" : 1,
    "userFlags" : 0,
    "totalIndexSize" : 2405207504,
    "indexSizes" : {
        "_id_" : 1024109408,
        "files_id_1_n_1" : 1381098096
    },
    "ok" : 1
}

したがって、4.8 TB のデータで約 300 GB のオーバーヘッドが発生します。

于 2013-10-23T08:13:21.733 に答える
0

90 GB のデータを保存しましたが、130 GB のディスク容量を消費しました。

これは、約 44% のオーバーヘッドを意味します。

このブログ投稿に記載されているように、GridFS のストレージ オーバーヘッドは約 45% であり、これはあなたの場合とほぼ同じです。

于 2013-11-27T23:49:50.693 に答える
0

問題は、GridFS からの「孤立したチャンク」です。GridFS は最初にチャンクを書き込み、次にメタデータを書き込みます。何か問題が発生した場合、既に書き込まれたチャンクは「孤立したチャンク」として残り、手動でクリーンアップする必要があります。

于 2013-11-22T11:41:50.583 に答える