Saya agak bingung tentang seluruh hal NoSQL dan semacamnya. Kapan Anda memilih untuk menggunakan sesuatu seperti MongoDB daripada sesuatu seperti Oracle atau MySQL? Saya tidak benar-benar mengerti "perbedaan" sejauh penggunaan di antara mereka.
Dari pemahaman saya, jenis basis data NoSQL tidak dimaksudkan untuk menggantikan RDBMSes, tetapi apa sebenarnya yang seharusnya mereka lakukan?
Jawaban:
Saya telah menggunakan CouchDB sebelumnya untuk tiga proyek peliharaan.
Alasan utama mengapa saya memilih ini daripada sesuatu seperti MSSQL atau MySQL adalah fleksibilitas yang Anda peroleh saat menggunakannya. Tidak ada skema yang kaku. Jika tiga bulan ke depan Anda perlu meja tertentu untuk memiliki bidang tambahan, dan ini dan itu, Anda hanya mengubahnya dan beriak keluar dari sana keluar.
Saya menggunakan Beginning CouchDB oleh Apress untuk belajar cara menggunakannya.
Sebagai contoh, CouchDB menggunakan json untuk berkomunikasi ke / dari database. Jika bahasa Anda bisa POST data, maka Anda dapat menggunakannya untuk berkomunikasi dengan DB.
Baca juga: Mengapa saya harus menggunakan basis data berbasis dokumen alih-alih basis data relasional? di StackOverflow
sumber
Maaf menambahkan jawaban lain tetapi tidak ada jawaban di sini yang sangat memuaskan. Jawaban ini khusus untuk MongoDB (yang bertentangan dengan beragam pilihan penyimpanan data lain di luar sana yang bukan merupakan basis data relasional).
Pro:
Cons:
Poin yang Sering Disalahpahami:
sumber
Untuk mencuri tanpa malu-malu dari Renesis (sebenarnya saya sedang membuat jawaban ini CW):
Menggunakan RDBMS daripada jenis lainnya:
sumber
Ketika data Anda tidak bersifat relasional, akan ada manfaat besar untuk menggunakan basis data NoSQL seperti kinerja dan skalabilitas (tentu saja tergantung pada keadaan). Beberapa desain patters seperti CQRS membuatnya jauh lebih mudah untuk memanfaatkan data non relasional di area yang secara konvensional akan menuntut penggunaan eksklusif dari database SQL.
Adalah umum untuk menggunakan database seperti mongo untuk data yang di-cache. Misalnya, jika Anda perlu membuat laporan, Anda bisa melakukan kueri SQL rumit yang menggabungkan dan mengagregasi banyak data dengan cepat, atau Anda bisa mengambil satu dokumen json dari database mongo Anda yang sudah memiliki semua yang Anda butuhkan untuk menghasilkan laporan. Ini membuat membaca data sangat mudah (dan cepat!), Tetapi dapat membuat penulisan data cukup rumit (di sinilah CQRS masuk).
sumber
Basis data seperti MongoDB sangat bagus ketika Anda biasanya tahu di mana data Anda (tidak perlu menulis beberapa pertanyaan rumit). Dengan Mongo, "terkait" data bersarang di data induk atau memiliki kunci utama / asing. Ini bagus jika, misalnya, Anda memiliki Posting dan Komentar; umumnya, Anda tidak akan menampilkan komentar di luar konteks kiriman, jadi masuk akal jika komentar terkandung di dalam kiriman (dengan cara itu Anda mendapatkan semua komentar untuk kiriman tanpa perlu kueri tabel terpisah).
MongoDB adalah schemaless. Ini berarti bahwa ia akan mengambil struktur data apa pun yang Anda berikan padanya, untuk sebagian besar.
Di sisi lain, jika Anda perlu menggunakan fungsi agregat dan merasakan kebutuhan untuk meminta data dengan cara yang kompleks yang tidak dapat dicapai melalui embed atau hubungan sederhana di Mongo, saat itulah Anda tahu saatnya menggunakan RDBMS seperti MySQL atau PostgreSQL.
MongoDB tidak dimaksudkan untuk menggantikan SQL. Ini hanya memenuhi kebutuhan yang berbeda, dan MongoDB dan RDBMS dapat digunakan bersamaan. Menurut pendapat saya, MongoDB tidak terlalu penting jika Anda tidak membutuhkan data Anda untuk menjadi fleksibel atau tertanam dalam dokumen induk. Pengembangan dengan MongoDB sangat menyenangkan karena ada langkah-langkah yang jauh lebih sedikit terlibat dalam mendapatkan proyek (katakanlah dalam Rails) dan berjalan. Perlu melakukan perubahan? Tidak masalah. Cukup tambahkan atribut ke model Anda. Selesai.
Saya tidak dapat berbicara untuk banyak basis data NoSQL lainnya, meskipun saya tahu bahwa mereka biasanya dirancang serupa untuk memenuhi kebutuhan spesifik yang tidak dapat dipenuhi oleh RDBMS. Beberapa berada sepenuhnya dalam memori atau dapat dengan mudah di-shard atau diskalakan. Saya cukup yakin bahwa Cassandra dirancang untuk terus beroperasi tanpa kehilangan data jika sebuah simpul turun. Redis pada dasarnya adalah toko nilai kunci yang berada di memori (dengan disk periodik menulis untuk kegigihan), tetapi juga memiliki kemampuan untuk menyimpan tipe data seperti set dan mengurutkannya.
sumber
Kemenangan utama adalah ketika Anda ingin berbagi data atau memiliki multi master database. Anda dapat membuang data di MySQL tetapi itu berubah menjadi sakit besar. Jika Anda melakukan banyak penulisan, seringkali berguna untuk membagikan data di beberapa server, masalahnya adalah jika Anda ingin memiliki konsistensi referensial yang kuat saat melakukan ini, akan sangat sulit jika tidak mustahil mencari teorema CAP.
Database SQL memiliki konsistensi yang sangat baik tetapi dukungan partisi benar-benar buruk, database NoSQL cenderung sebaliknya. Mudah dipartisi tetapi seringkali disebut konsistensi akhirnya. Jika Anda membangun situs perpesanan yang ok, untuk bank mungkin tidak OK.
Kelebihannya adalah bahwa sekarang ada beberapa model untuk cara menyimpan data sehingga ada pilihan dalam cara Anda mengimplementasikan hal-hal, sementara sebelumnya yang Anda miliki adalah database SQL.
Radio SE memiliki beberapa episode yang baik tentang hal ini.
sumber
MongoDB berfungsi dengan baik ketika Anda menulis banyak data, dan ketika kebutuhan kueri Anda tidak terlalu rumit. Oleh karena itu, MongoDB sangat cocok ketika Anda menerapkan CQRS dengan Event Sourcing di sisi Command - yaitu, toko acara Anda adalah database MongoDB.
Di sisi permintaan, kami masih menggunakan SQL Server db dengan tampilan dan Layanan Data WCF di atas, karena fleksibilitasnya. Saya pikir dalam banyak kasus Anda akan benar-benar membutuhkan kekuatan DB relasional untuk query.
sumber
Perbedaan langsung dan mendasar antara MongoDB dan RDBMS adalah model data yang mendasarinya. Database relasional menyusun data menjadi tabel dan baris, sementara MongoDB menyusun data menjadi koleksi dokumen JSON. JSON adalah format data yang dapat menggambarkan sendiri dan dapat dibaca manusia. Awalnya dirancang untuk pertukaran ringan antara browser dan server, ini telah diterima secara luas untuk berbagai jenis aplikasi.
Dokumen JSON sangat berguna untuk manajemen data karena beberapa alasan. Dokumen JSON terdiri dari seperangkat bidang yang merupakan pasangan nilai kunci sendiri. Ini berarti setiap dokumen JSON membawa desain skema yang dapat dibaca manusia sendiri ke mana pun ia pergi, memungkinkan dokumen untuk dengan mudah berpindah antara database dan aplikasi klien tanpa kehilangan artinya.
JSON juga merupakan format data alami untuk digunakan di lapisan aplikasi. JSON mendukung struktur data yang lebih kaya dan lebih fleksibel daripada tabel yang terdiri dari kolom dan baris. Selain mendukung tipe bidang seperti angka, string, Boolean, dll., Bidang JSON dapat berupa array atau sub-objek bersarang. Ini berarti kita dapat mewakili satu set hubungan canggih yang merupakan representasi yang lebih dekat dari objek yang bekerja dengan aplikasi kita. Menggunakan dokumen JSON dalam database kami berarti kami tidak memerlukan mapper relasional objek antara database kami dan aplikasi yang dilayaninya. Kami dapat menyimpan data kami dalam bentuk yang benar
sumber
Jika data Anda membutuhkan banyak kueri, maka solusi NoSQL tidak bagus dan ketika Anda membutuhkan dukungan transaksional (ACID), maka NoSql bukan yang paling cocok. Saya pikir NoSQL bersinar ketika Anda memiliki banyak bacaan yang harus cepat dan ketika strukturnya agak adhoc, Anda mengambil dengan dokumen atau oleh struktur halaman, sesuatu seperti itu. Tetapi banyak solusi NoSQL meningkat sangat cepat sehingga kekurangan mungkin segera hilang. Pokoknya saya pikir database relasional masih cocok untuk sebagian besar aplikasi.
sumber