Overhead penyimpanan GridFS

Kami memiliki Cluster MongoDB menggunakan GridFS. Tabel fs.chunks dari gridfs dibagi menjadi dua replika. Penggunaan ruang disk sangat tinggi. Untuk data 90GB kita memerlukan ruang disk lebih dari 130GB.

Sepertinya tabel fs.chunks membutuhkan ruang. Saya merangkum bidang "panjang" fs.files yang menunjukkan ruang 90GB. Jumlah bidang "ukuran" kedua pecahan adalah 130 GB. Ini adalah ukuran sebenarnya dari data payload yang terdapat dalam koleksi tersebut, bukan?

Artinya ada overhead 40GB? Apakah ini benar? Dari mana asalnya? apakah itu pengkodean BSON? Apakah ada cara untuk mengurangi biaya overhead?

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
}

person Marko    schedule 18.09.2013    source sumber


Jawaban (3)


Ini adalah ukuran sebenarnya dari data payload yang terdapat dalam koleksi tersebut, bukan?

Ya.

Artinya ada overhead 40GB? Apakah ini benar?

Agak. Namun tampaknya ukurannya luar biasa besar.

Dari mana asalnya? apakah itu pengkodean BSON?

Tidak, pengkodean data BSON tidak memerlukan banyak overhead. Namun menambahkan metadata terkadang bisa.

Di mongo, sumber utama overhead biasanya adalah metadata, namun jika Anda menggunakan spesifikasi grid referensi — seharusnya tidak terlalu besar.

Misalnya, di penyimpanan kami, kami memiliki:

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

Dan

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
}

Jadi, sekitar 300 gb overhead pada 4,8 tb data.

person Danila Shtan    schedule 23.10.2013

Masalahnya adalah "potongan yatim piatu" dari GridFS. GridFS pertama-tama menulis potongannya, lalu metadatanya, jika terjadi kesalahan, potongan yang sudah ditulis akan tetap menjadi "potongan yatim piatu" dan harus dibersihkan secara manual.

person Marko    schedule 22.11.2013

Anda menghemat 90 GB data namun menghabiskan 130 GB ruang disk.

Itu berarti sekitar 44% overhead.

Sebagaimana dinyatakan dalam postingan blog ini, overhead penyimpanan GridFS adalah sekitar 45% , yang hampir sama dalam kasus Anda.

person Ramazan Polat    schedule 27.11.2013