ค่าใช้จ่ายในการจัดเก็บของ GridFS

เรามีคลัสเตอร์ MongoDB โดยใช้ GridFS ตาราง fs.chunks ของ gridfs ถูกแบ่งส่วนบนชุดแบบจำลองสองชุด การใช้พื้นที่ดิสก์สูงมาก สำหรับข้อมูล 90GB เราต้องการพื้นที่ดิสก์มากกว่า 130GB

ดูเหมือนว่าตาราง fs.chunks ต้องการพื้นที่ ฉันได้สรุปฟิลด์ "ความยาว" ของ fs.files ที่แสดงพื้นที่ 90GB ผลรวมของฟิลด์ "ขนาด" ของชาร์ดทั้งสองคือ 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
}

person Marko    schedule 18.09.2013    source แหล่งที่มา


คำตอบ (3)


นี่คือขนาดจริงของข้อมูลเพย์โหลดที่มีอยู่ในคอลเลกชันใช่ไหม

ใช่.

หมายความว่ามันมีค่าใช้จ่าย 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
}

ดังนั้นโอเวอร์เฮดประมาณ 300 GB บนข้อมูล 4.8 tb

person Danila Shtan    schedule 23.10.2013

ปัญหาคือ "ชิ้นส่วนที่ถูกละเลย" จาก GridFS GridFS เขียนชิ้นข้อมูลก่อน จากนั้นจึงเขียนข้อมูลเมตา หากมีข้อผิดพลาด ชิ้นที่เขียนไว้แล้วจะยังคงเป็น "ชิ้นส่วนที่ถูกละเลย" และจะต้องทำความสะอาดด้วยตนเอง

person Marko    schedule 22.11.2013

คุณบันทึกข้อมูลได้ 90 GB แต่ใช้พื้นที่ดิสก์ 130 GB

นั่นหมายถึงค่าใช้จ่ายประมาณ 44%

ตามที่ระบุไว้ในโพสต์ในบล็อกนี้ ค่าใช้จ่ายในการจัดเก็บของ GridFS จะอยู่ที่ประมาณ 45% ซึ่งเกือบจะเหมือนกันในกรณีของคุณ

person Ramazan Polat    schedule 27.11.2013