it-swarm-id.com

Kapan seseorang menggunakan MongoDB (atau yang serupa) di atas DBMS Relasional?

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?

138
user6791

Saya telah menggunakan CouchDB sebelumnya untuk tiga proyek peliharaan.

  • Sistem blogging mikro.
  • Untuk menyimpan informasi untuk aplikasi pembuatan catatan kecil yang saya buat.
  • Aplikasi curah pendapat tujuan umum.

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 mempelajari cara menggunakannya.

Sebagai contoh, CouchDB menggunakan json untuk berkomunikasi ke/dari database. Jika bahasa Anda dapat 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? pada StackOverflow

34
Sergio

Maaf menambahkan jawaban lain tetapi tidak ada jawaban di sini yang sangat memuaskan. Jawaban ini khusus untuk MongoDB (sebagai lawan dari beragam pilihan penyimpanan data lain di luar sana yang bukan basis data relasional).

Pro:

  • MongoDB memiliki latensi yang lebih rendah per kueri & menghabiskan lebih sedikit waktu CPU per kueri karena melakukan banyak pekerjaan lebih sedikit (mis. Tidak ada yang bergabung, transaksi) Akibatnya, dapat menangani beban yang lebih tinggi dalam hal kueri per detik dan karenanya sering digunakan jika Anda memiliki # pengguna dalam jumlah besar.
  • MongoDB adalah lebih mudah untuk shard (digunakan dalam sebuah cluster) karena tidak perlu khawatir tentang transaksi dan konsistensi.
  • MongoDB memiliki kecepatan menulis lebih cepat karena tidak perlu khawatir tentang transaksi atau kembalikan (dan dengan demikian tidak perlu khawatir tentang penguncian).
  • MongoDB tidak memiliki skema jika Anda memiliki kasus penggunaan khusus yang dapat memanfaatkan itu.

Kekurangan:

  • MongoDB tidak mendukung transaksi. Inilah cara ia memperoleh sebagian besar manfaatnya.
  • Secara umum, MongoDB menciptakan lebih banyak pekerjaan (mis. Lebih banyak biaya CPU) untuk server klien. Misalnya, untuk bergabung dengan data, seseorang harus mengeluarkan beberapa kueri dan melakukan penggabungan pada klien.
  • Bahkan di sini pada tahun 2017 ada kurang dukungan tooling untuk MongoDB daripada ada untuk database relasional hanya karena itu lebih baru. Ada juga lebih sedikit ahli MongoDB daripada rekan relasional mereka.

Poin Sering Disalahpahami:

  • Baik MongoDB dan database relasional mendukung pengindeksan. Kinerja permintaan mereka serupa dalam hal mengeksekusi kueri besar.
  • MongoDB tidak menghapus kebutuhan untuk migrasi atau lebih khusus lagi, memperbarui data yang ada saat skema Anda berkembang. Misalnya: Jika Anda memiliki aplikasi yang bergantung pada tabel pengguna untuk memuat data tertentu, dan Anda memodifikasi tabel itu untuk berisi data yang berbeda (katakanlah Anda menambahkan bidang gambar profil), maka Anda masih perlu:
    • Menulis aplikasi Anda untuk menangani objek yang properti ini tidak didefinisikan ATAU
    • Tulis migrasi satu kali untuk memasukkan nilai default untuk properti ini ATAU
    • Tulis kode untuk memberikan nilai default pada waktu kueri jika bidang ini tidak ada ATAU
    • Tangani bidang yang hilang dengan cara lain
26
Pace

Untuk mencuri tanpa malu-malu dari Renesis (sebenarnya saya sedang membuat jawaban ini CW):


Menggunakan RDBMS bukan tipe lain:

13
Matthew Read

Ketika data Anda tidak bersifat relasional, akan ada manfaat besar untuk menggunakan database NoSQL seperti kinerja dan skalabilitas (tentu saja, tergantung pada keadaan). Beberapa desain patters seperti CQRS membuatnya lebih mudah untuk memanfaatkan data non relasional di bidang yang secara konvensional akan menuntut penggunaan eksklusif dari database SQL.

Adalah umum untuk menggunakan basis data 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).

9
Graeme Hill

Basis data seperti MongoDB sangat bagus ketika Anda biasanya tahu di mana data Anda (tidak perlu menulis beberapa pertanyaan rumit). Dengan Mongo, data "terkait" 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 rumit 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 perlu data Anda 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 dihilangkan atau diskalakan. Saya cukup yakin bahwa Cassandra dirancang untuk terus beroperasi tanpa kehilangan data jika sebuah node turun. Redis pada dasarnya adalah toko nilai kunci yang berada di memori (dengan disk berkala menulis untuk kegigihan), tetapi juga memiliki kemampuan untuk menyimpan tipe data seperti set dan mengurutkannya.

8
Ravenstine

Kemenangan utama adalah ketika Anda ingin berbagi data atau memiliki multi master database. Anda dapat membuang data di MySQL tetapi itu berubah menjadi rasa sakit yang besar. Jika Anda melakukan banyak penulisan, sering 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 apa yang 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.

6
Zachary K

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 - mis., Toko acara Anda adalah database MongoDB.

Di sisi permintaan, kami masih menggunakan SQL Server db dengan pandangan dan Layanan Data WCF di atas, karena fleksibilitasnya. Saya pikir dalam banyak kasus Anda akan benar-benar membutuhkan kekuatan DB relasional untuk query.

1
Roy Dictus

Perbedaan langsung dan mendasar antara MongoDB dan RDBMS adalah model data yang mendasarinya. Database relasional menyusun data menjadi tabel dan baris, sedangkan 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 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 serangkaian hubungan canggih yang merupakan representasi yang lebih dekat dari objek yang bekerja dengan aplikasi kita. Menggunakan dokumen JSON dalam basis data kami berarti kami tidak memerlukan mapper relasional objek antara basis data kami dan aplikasi yang dilayaninya. Kami dapat menyimpan data kami dalam bentuk yang benar

1
Diwakar upadhyay

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 ada kekurangan mungkin segera hilang. Pokoknya saya pikir database relasional masih cocok untuk sebagian besar aplikasi.

1
marko