MongoDB adalah tanpa skema kerana ia menyimpan data dalam bentuk dokumen, biasanya menggunakan BSON (Binary JSON). Setiap dokumen dalam koleksi boleh mempunyai strukturnya sendiri, medan makna dan jenis datanya tidak perlu dipratakrifkan.
Contoh:
Fleksibiliti ini membolehkan MongoDB menyesuaikan diri dengan menukar model data tanpa memerlukan pengubahsuaian skema.
MongoDB menyediakan dua pendekatan utama untuk memodelkan hubungan antara dokumen: membenamkan dan merujuk.
Membenamkan: Menyimpan data berkaitan dalam satu dokumen.
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
Merujuk: Menyimpan data berkaitan dalam dokumen berasingan dan menggunakan rujukan (iaitu, ObjectId) untuk memautkannya.
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
Perhubungan satu-dengan-banyak lazimnya dimodelkan dengan membenamkan item "banyak" di dalam dokumen "satu" atau dengan merujuk.
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
Koleksi berhad ialah koleksi bersaiz tetap yang secara automatik menimpa dokumen tertua apabila ia mencapai had saiznya. Koleksi yang dihadkan sesuai untuk senario yang mana data terkini adalah yang paling penting, seperti log atau data peristiwa.
Ciri:
Contoh:
Buat koleksi dihadkan dengan had saiz 1MB dan maksimum 1000 dokumen:
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
Dalam MongoDB, saiz dokumen boleh menjejaskan prestasi secara langsung. Saiz maksimum dokumen ialah 16MB. Dokumen yang mendekati saiz ini mungkin:
Untuk meningkatkan prestasi, penting untuk memastikan dokumen padat dan mengelakkan pertumbuhan yang berlebihan, terutamanya dalam persekitaran tulisan tinggi.
Denormalisasi melibatkan penyalinan data merentas berbilang dokumen untuk mengurangkan keperluan untuk gabungan. Dengan membenamkan data berkaitan, MongoDB boleh mengelak daripada melakukan berbilang pertanyaan atau gabungan, yang membawa kepada bacaan yang lebih pantas.
Contoh: Daripada merujuk produk dalam pesanan, benamkan butiran produk terus dalam dokumen pesanan:
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
GridFS ialah spesifikasi untuk menyimpan dan mendapatkan semula fail besar (lebih daripada 16MB) dalam MongoDB. Ia membahagikan fail besar kepada ketulan (biasanya 255KB) dan menyimpannya sebagai dokumen dalam dua koleksi: fs.files dan fs.chunks.
Contoh: Menyimpan fail imej yang besar:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
Untuk data hierarki, anda boleh menggunakan sama ada pembenaman atau rujukan berdasarkan kedalaman dan kerumitan hierarki.
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
Satu Indeks TTL secara automatik memadamkan dokumen daripada koleksi selepas tempoh tertentu, menjadikannya berguna untuk data tamat tempoh seperti maklumat sesi atau log.
Sintaks:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
Satu perhubungan banyak-ke-banyak boleh dimodelkan dengan membenamkan tatasusunan rujukan dalam setiap dokumen atau dengan mencipta koleksi ketiga untuk menyimpan perhubungan.
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
db.createCollection("logs", { capped: true, size: 1048576, max: 1000 })
MongoDB menawarkan keupayaan reka bentuk skema yang fleksibel, menjadikannya boleh disesuaikan untuk pelbagai kes penggunaan, termasuk perhubungan yang kompleks dan strategi pemodelan data. Pilihan reka bentuk skema yang betul boleh meningkatkan prestasi dan kebolehskalaan dalam aplikasi anda.
Hai, saya Abhay Singh Kathayat!
Saya seorang pembangun tindanan penuh dengan kepakaran dalam kedua-dua teknologi hadapan dan belakang. Saya bekerja dengan pelbagai bahasa pengaturcaraan dan rangka kerja untuk membina aplikasi yang cekap, berskala dan mesra pengguna.
Jangan ragu untuk menghubungi saya melalui e-mel perniagaan saya: kaashshorts28@gmail.com.
Atas ialah kandungan terperinci Merekabentuk Model Data Cekap dalam MongoDB: Tanpa Skema, Perhubungan dan Pengoptimuman Prestasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!