Ini lebih merupakan seni daripada sains. Dokumentasi Mongo tentang Skema adalah referensi yang bagus, tetapi berikut adalah beberapa hal yang perlu dipertimbangkan:
-
Masukkan sebanyak mungkin
Kegembiraan database Dokumen adalah menghilangkan banyak Gabung. Naluri pertama Anda adalah menempatkan sebanyak mungkin dalam satu dokumen. Karena dokumen MongoDB memiliki struktur, dan karena Anda dapat melakukan kueri secara efisien di dalam struktur tersebut (ini berarti Anda dapat mengambil bagian dari dokumen yang Anda perlukan, jadi ukuran dokumen tidak perlu terlalu mengkhawatirkan Anda) tidak perlu segera menormalkan data seperti Anda akan di SQL. Secara khusus, data apa pun yang tidak berguna selain dari dokumen induknya harus menjadi bagian dari dokumen yang sama.
-
Pisahkan data yang dapat dirujuk dari beberapa tempat ke dalam koleksinya sendiri.
Ini bukan masalah "ruang penyimpanan" karena ini adalah masalah "konsistensi data". Jika banyak catatan akan merujuk ke data yang sama, akan lebih efisien dan lebih sedikit kesalahan yang rentan untuk memperbarui satu catatan dan menyimpan referensi untuk itu di tempat lain.
-
Pertimbangan ukuran dokumen
MongoDB memberlakukan batas ukuran 4MB (16MB dengan 1,8) pada satu dokumen. Dalam dunia data GB ini kedengarannya kecil, tetapi juga 30 ribu tweet atau 250 jawaban Stack Overflow atau 20 foto kedipan. Di sisi lain, ini adalah informasi yang jauh lebih banyak daripada yang ingin disajikan pada satu waktu di halaman web biasa. Pertama-tama pertimbangkan apa yang akan membuat pertanyaan Anda lebih mudah. Dalam banyak kasus, kekhawatiran tentang ukuran dokumen adalah pengoptimalan prematur.
-
Struktur data yang kompleks:
MongoDB dapat menyimpan struktur data bersarang dalam yang sewenang-wenang, tetapi tidak dapat mencarinya secara efisien. Jika data Anda membentuk pohon, hutan, atau grafik, Anda perlu menyimpan setiap simpul dan tepinya secara efektif dalam dokumen terpisah. (Perhatikan bahwa ada penyimpanan data yang dirancang khusus untuk jenis data ini yang harus dipertimbangkan juga)
Juga telah ditunjukkan bahwa tidak mungkin mengembalikan subset elemen dalam dokumen. Jika Anda perlu memilah-milah beberapa bagian dari setiap dokumen, akan lebih mudah untuk memisahkannya.
-
Konsistensi Data
MongoDB membuat trade off antara efisiensi dan konsistensi. Aturannya adalah perubahan pada satu dokumen selalu atomik, sementara pembaruan ke banyak dokumen tidak boleh dianggap atomik. Juga tidak ada cara untuk "mengunci" catatan di server (Anda dapat membangun ini ke dalam logika klien menggunakan misalnya bidang "kunci"). Saat Anda mendesain skema Anda, pertimbangkan bagaimana Anda akan menjaga data Anda tetap konsisten. Umumnya, semakin banyak yang Anda simpan dalam dokumen, semakin baik.
Untuk apa yang Anda gambarkan, saya akan menyematkan komentar, dan memberikan setiap komentar bidang id dengan ObjectID. ObjectID memiliki cap waktu yang disematkan di dalamnya sehingga Anda dapat menggunakannya sebagai ganti dibuat jika Anda mau.