MongoDB adalah database NoSQL yang saya temukan cukup mudah digunakan. Baru-baru ini saya harus mengembangkan aplikasi sederhana yang diperlukan untuk mengumpulkan beberapa data menggunakan permintaan HTTP dan menyimpan beberapa hasil setelah memproses data, dan saya mencoba menggunakan MongoDB.
Dari pengalaman ini saya menemukan itu jauh lebih baik untuk digunakan daripada database relasional tradisional dan karena saya seorang pengembang, dan bukan DBA, pekerjaan saya sangat disederhanakan.
Namun, kadang-kadang saya merasa tidak yakin kapan saya harus menggunakan MongoDB daripada database relasional tradisional, seperti SQL Server atau MySQL.
Dalam hal itu, kapan kita bisa menggunakan MongoDB alih-alih basis data relasional? Apakah ada beberapa peringatan besar tentang MongoDB yang membuatnya tidak layak untuk beberapa situasi?
Jawaban:
Pada dasarnya:
Jika Anda bisa merepresentasikan data Anda dalam bentuk kumpulan dokumen, MongoDB bisa menjadi pilihan yang baik.
Jika Anda lebih suka membayangkan data Anda sebagai sekelompok tabel yang saling berhubungan, MongoDB mungkin bukan pilihan yang baik.
Berikut adalah dua contoh yang saya temukan ilustratif:
Beberapa tahun yang lalu, saya membuat mesin blog. Tujuannya adalah untuk meng-host artikel blog, dan untuk setiap artikel, menyimpan versi yang berbeda, beberapa metadata, statistik kunjungan, dll.
Ini dapat disimpan sebagai banyak tabel, tetapi ketika mencoba membangun model, ia tumbuh sangat cepat menjadi selusin tabel, jika tidak lebih. Beberapa query SQL bisa menjadi jelek dengan banyak
join
s, dan ... yah, Anda mendapatkan gambarannya.Masalahnya di sini adalah bahwa ada hal utama - artikel blog - dan ada semua hal di sekitar artikel ini, yang membuatnya cocok untuk basis data berbasis dokumen. Dengan MongoDB, memodelkan basis data sangat mudah: satu koleksi menampung artikel blog, dan koleksi kecil kedua berisi daftar pengguna yang diizinkan menulis artikel. Setiap dokumen dalam koleksi pertama akan berisi semua informasi yang saya butuhkan saat menampilkan artikel, apakah itu nama penulis, atau tag.
Sekarang bayangkan proyek yang sangat berbeda. Ada beberapa pengguna yang dapat menulis hal-hal, dan berbagi hal-hal yang ditulis oleh pengguna lain. Pada halaman pengguna, Anda akan menemukan kedua hal yang ditulis pengguna ini dan yang dibagikannya. Ada satu kendala: ketika seseorang mengedit apa yang dia tulis di masa lalu, perubahan muncul di mana-mana di mana teks asli dibagikan.
Dengan pendekatan berbasis dokumen, sulit untuk menemukan apa yang akan menjadi dokumen. Seorang pengguna mungkin? Ya, itu awal yang bagus. Dokumen pengguna akan berisi semua hal yang ditulis pengguna ini. Tetapi bagaimana dengan hal-hal yang dia bagikan?
Cara yang mungkin adalah dengan meletakkan barang-barang itu di dokumen yang sama. Masalah dengan pendekatan ini adalah bahwa jika seseorang mengedit entri, aplikasi harus berjalan melalui setiap dokumen pengguna dalam database untuk mengedit setiap kemunculan entri lama. Tidak menghitung duplikasi data.
Alternatifnya adalah menyimpan dalam dokumen pengguna hanya daftar entri yang dibagikan oleh pengguna ini (dengan ID dari pengguna dan entri yang dirujuk). Tapi sekarang, masalah yang berbeda akan terjadi: jika pengguna berbagi ribuan entri dari ribuan pengguna, itu akan perlu membuka ribuan dokumen untuk mendapatkan entri tersebut.
Atau kami dapat memodelkan koleksi kami di sekitar entri itu sendiri, masing-masing entri merujuk pada pembuatnya dan memiliki daftar pengguna yang membagikannya. Di sini sekali lagi, masalah kinerja dapat menjadi nyata ketika Anda harus memeriksa semua dokumen untuk menunjukkan yang diterbitkan oleh pengguna tertentu.
Sekarang, berapa banyak tabel yang Anda perlukan jika Anda menggunakan basis data relasional? Benar tiga. Akan mudah untuk model, dan juga mudah digunakan.
sumber
Setiap teknologi memiliki kelebihannya.
Keuntungan dari basis data relasional adalah bahwa RDBMS melakukan beberapa hal untuk Anda, seperti:
Semua itu bermuara pada kenyataan bahwa Anda harus menulis lebih sedikit kode karena RDBMS memberlakukan banyak hal untuk Anda.
Selain itu, kemandirian data: sering kali jika Anda menggunakan struktur SQL standar dan tidak ada yang khusus vendor, Anda dapat memigrasikan data Anda dari satu RDBMS ke yang lain dengan kerumitan minimal, sedangkan database NOSQL tidak distandarisasi sama sekali.
Di sisi lain, salah satu kelebihan dari database NOSQL adalah bahwa mereka meningkatkan skala kinerja yang lebih baik untuk jutaan baris. Mereka lebih cocok untuk penyimpanan berbasis dokumen, yaitu data yang tidak terstruktur. Tetapi sebagian besar aplikasi tidak memerlukan fitur ini.
sumber
Untuk kasus khusus Anda, MongoDB terdengar seperti pilihan yang baik, tetapi ada banyak skenario (mungkin sebagian besar dari mereka) di mana itu tidak akan menjadi pilihan terbaik.
MongoDB lebih cocok dalam skenario yang menuntut untuk membaca / menulis banyak data, tanpa banyak penekanan pada keamanan transaksi (jika beberapa data kadang-kadang hilang dalam server crash, itu bukan masalah besar), berharap untuk skala besar, dan jangan t benar-benar memiliki skema yang stabil.
MongoDB tidak cocok untuk skenario yang membutuhkan:
MongoDB lebih cepat dan akan memungkinkan Anda untuk meningkatkan kinerja lebih dari sistem dengan menghilangkan banyak hal yang RDBMS terapkan secara default, seperti pemeriksaan integritas (catat bahwa Anda juga dapat mengubah RDBMS untuk tujuan seperti itu), tetapi kenyataannya adalah, dalam kebanyakan skenario, itu tidak diperlukan. Plus, trade-off adalah keandalan dan fleksibilitas (Anda akan mengalami kesulitan jika, nanti, Anda memutuskan untuk melakukan operasi yang lebih kompleks dengan data yang ada).
Itu semua tergantung pada kebutuhan aplikasi yang Anda bangun. Apakah itu kecepatan dan ketersediaan, atau keamanan, keandalan, dan fleksibilitas. Anda harus tahu di mana di data Anda (dan di koneksi data Anda) terletak nilai lebih. Jika Anda belum tahu, mungkin yang terbaik adalah jika Anda memilih sesuatu yang tidak akan membuat Anda kesal di masa depan, dan akan memungkinkan Anda untuk menambahkan fitur dan melakukan operasi yang dibutuhkan aplikasi Anda.
sumber
MongoDB sangat bagus ketika Anda dapat mewakili data Anda sebagai "paket" informasi independen. Anda memiliki google maps kode ZIP, tertanam dalam kode ZIP adalah perusahaan dan di dalam perusahaan adalah karyawan. Semua kode pos bersifat independen satu sama lain dan Anda dapat memperoleh seluruh informasi dengan cara yang sederhana, cantik, dan cepat. Itu adalah skenario yang bagus untuk solusi nonSQL.
Setelah mengatakan itu, saya benar-benar tidak setuju dengan tren saat ini yang saya cari yang menyiratkan bahwa MongoDB adalah jenis posting dan solusi superior untuk RDBMS dan noSQL harus menjadi solusi Anda secara default. Semua itu absurd. MongoDB adalah basis data ceruk dan 90% proyek bersifat relasional dan memerlukan opsi RDBMS karena Anda menginginkan solusi kueri yang kuat seperti SQL untuk menghasilkan laporan dan mencari data bubar: "bergabung" adalah pro, bukan penipu. Selain itu, RDBMS modern mendukung koleksi BSON dan integrasi geospasial sehingga mungkin ceruk untuk noSQL bahkan lebih sempit sekarang.
sumber
MongoDB berguna untuk menyimpan seluruh data terstruktur yang diperlukan untuk membangun contoh halaman web. Anda dapat mengambil data untuk halaman tertentu, meneruskannya ke aplikasi klien Anda yang kemudian dapat merendernya.
Dalam konteks seperti itu, MongoDB sangat cepat dan dapat diandalkan. Tetapi jangan pernah lupa Anda tidak memiliki informasi relasional dalam database Anda. Yang berarti jika Anda mengubah sesuatu dalam struktur halaman web Anda, Anda mungkin tidak dapat mengisi lubang di halaman yang sudah disimpan karena Anda tidak memiliki data yang diperlukan untuk melakukannya. Lebih lanjut tentang ini di sini: http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/
sumber