NoSQL - MongoDB vs CouchDB [ditutup]

154

Saya seorang noob yang lengkap ketika datang ke gerakan NoSQL. Saya telah mendengar banyak tentang MongoDB dan CouchDB. Saya tahu ada perbedaan di antara keduanya. Mana yang Anda sarankan untuk dipelajari sebagai langkah pertama menuju dunia NoSQL?

Menembus
sumber
Sebagai langkah pertama mongoDB lebih baik karena lebih mudah untuk dipelajari tetapi memiliki beberapa masalah. Tidak ada pilihan terbaik untuk menggunakan database noSQL tertentu, itu tergantung pada apa yang harus Anda lakukan. Lihat berorientasi dokumen, nilai kunci, berorientasi grafik, berorientasi kolom.
Chris

Jawaban:

148

Lihat tautan berikut

Pembaruan : Saya menemukan perbandingan hebat dari basis data NoSQL .

MongoDB (3.2)

  • Ditulis dalam: C ++
  • Poin utama: toko dokumen JSON
  • Lisensi: AGPL (Drivers: Apache)
  • Protokol: Kustom, biner (BSON)
  • Replikasi master / slave (failover otomatis dengan set replika)
  • Sharding built-in
  • Kueri adalah ekspresi javascript
  • Jalankan sembarang fungsi javascript di sisi server
  • Memiliki pengindeksan dan permintaan geospasial
  • Mesin penyimpanan ganda dengan karakteristik kinerja yang berbeda
  • Performa di atas fitur
  • Validasi dokumen
  • Penjurnalan
  • Kerangka agregasi yang kuat
  • Pada sistem 32bit, terbatas pada ~ 2.5Gb
  • Pencarian teks terintegrasi
  • GridFS untuk menyimpan data besar + metadata (sebenarnya bukan FS)
  • Pusat data sadar

Paling baik digunakan : Jika Anda membutuhkan pertanyaan dinamis. Jika Anda lebih suka menentukan indeks, bukan memetakan / mengurangi fungsi. Jika Anda membutuhkan kinerja yang baik pada DB besar. Jika Anda menginginkan CouchDB, tetapi data Anda terlalu banyak berubah, mengisi disk.

Sebagai contoh : Untuk sebagian besar hal yang akan Anda lakukan dengan MySQL atau PostgreSQL, tetapi memiliki kolom yang telah ditentukan benar-benar menghambat Anda.

CouchDB (1.2)

  • Ditulis dalam: Erlang
  • Poin utama: Konsistensi DB, kemudahan penggunaan
  • Lisensi: Apache
  • Protokol: HTTP / REST
  • Replikasi dua arah (!),
  • kontinu atau ad-hoc,
  • dengan deteksi konflik,
  • demikian, replikasi master-master. (!)
  • MVCC - operasi tulis tidak memblokir bacaan
  • Versi dokumen sebelumnya tersedia
  • Desain hanya kecelakaan (dapat diandalkan)
  • Perlu pemadatan dari waktu ke waktu
  • Tampilan: peta yang disematkan / kurangi
  • Memformat tampilan: daftar & acara
  • Validasi dokumen sisi server mungkin dilakukan
  • Otentikasi mungkin
  • Pembaruan waktu nyata via '_changes' (!)
  • Penanganan lampiran

Paling baik digunakan : Untuk mengumpulkan, kadang-kadang mengubah data, yang menjalankan kueri yang telah ditentukan sebelumnya. Tempat di mana pembuatan versi penting.

Sebagai contoh : CRM, sistem CMS. Replikasi master-master adalah fitur yang sangat menarik, memungkinkan penyebaran multi-situs yang mudah.

amra
sumber
1
Bagi siapa pun yang peduli dengan lisensi server MongoDB sebagai AGPL, melihat kebijakan lisensi mongodb dapat memberikan sedikit bantuan.
Patrick
@amra Jadi, maksud Anda jika saya menyimpan data dan hanya membacanya, menggunakan couchdb adalah pilihan terbaik?
verystrongjoe
@verystrongjoe Tergantung kompleksitas data dan kueri. Anda biasanya tidak bisa mengatakan mana yang terbaik.
amra
@ amra Ok. Tapi .. Jika itu akan mengumpulkan data dan memilih data dan saya harus memilih antara mongo dan sofa, mana yang lebih baik?
verystrongjoe
CouchApps "tidak lagi direkomendasikan" sejak ~ 2012: docs.couchdb.com/en/latest/ddocs
Tim Sylvester
123

Jika Anda berasal dari dunia MySQL, MongoDB akan "merasa" lebih alami bagi Anda karena dukungan bahasa seperti permintaan.

Saya pikir itulah yang membuatnya sangat ramah bagi banyak orang.

CouchDB fantastis jika Anda ingin memanfaatkan dukungan replikasi master-master yang sangat hebat dengan pengaturan multi-simpul, mungkin di pusat data yang berbeda atau sesuatu seperti itu.

Replikasi MongoDB (set replika) adalah setup master-slave-slave-slave *, Anda hanya dapat menulis ke master dalam set replika dan membaca dari salah satu dari mereka.

Untuk konfigurasi situs standar, tidak masalah. Ini memetakan penggunaan MySQL dengan sangat baik.

Tetapi jika Anda mencoba untuk membuat layanan global seperti CDN yang perlu menjaga semua simpul global disinkronkan meskipun membaca / menulis kepada mereka semua, sesuatu seperti replikasi di CouchDB akan menjadi keuntungan besar bagi Anda.

Sementara MongoDB memiliki bahasa seperti permintaan yang dapat Anda gunakan dan terasa sangat intuitif, CouchDB mengambil pendekatan "pengurangan peta" dan konsep pandangan ini. Awalnya terasa aneh, tetapi ketika Anda terbiasa, itu benar-benar mulai terasa intuitif.

Berikut ini adalah ikhtisar singkat sehingga masuk akal:

  • CouchDB menyimpan semua data Anda dalam b-tree
  • Anda tidak dapat "meminta" secara dinamis dengan sesuatu seperti "SELECT * FROM user WHERE ..."
  • Alih-alih, Anda mendefinisikan "tampilan" diskrit data Anda ... "di sini adalah tampilan semua pengguna saya", "di sini adalah tampilan semua pengguna yang lebih tua dari 10" "di sini adalah tampilan semua pengguna yang lebih tua dari 30" dan begitu seterusnya.
  • Tampilan ini didefinisikan menggunakan pendekatan pengurangan peta dan didefinisikan sebagai fungsi JavaScript.
  • Saat Anda menentukan tampilan, DB mulai mengumpankan semua dokumen DB yang Anda tetapkan pandangan, melaluinya dan merekam hasil fungsi Anda sebagai "indeks" pada data itu.
  • Ada beberapa pertanyaan dasar yang dapat Anda lakukan pada tampilan seperti meminta kunci tertentu (ID) atau rentang ID terlepas dari apa fungsi peta / pengurangan Anda.
  • Baca slide-slide ini , ini klarifikasi peta / pengurangan terbaik di Couch yang pernah saya lihat.

Jadi kedua sumber ini menggunakan dokumen JSON, tetapi CouchDB mengikuti ini lebih banyak "setiap server adalah master dan dapat disinkronkan dengan dunia" pendekatan yang fantastis jika Anda membutuhkannya, sementara MongoDB benar-benar MySQL dari dunia NoSQL.

Jadi jika itu terdengar seperti apa yang Anda butuhkan / inginkan, lakukanlah.

Perbedaan kecil seperti protokol biner Mongo vs antarmuka RESTful dari CouchDB semuanya detail kecil.

Jika Anda ingin kecepatan mentah dan persetan dengan keamanan data, Anda dapat membuat Mongo berjalan lebih cepat dari CouchDB karena Anda dapat memerintahkannya untuk beroperasi di luar memori dan tidak melakukan hal-hal ke disk kecuali untuk interval jarang.

Anda dapat melakukan hal yang sama dengan Couch, tetapi protokol komunikasi berbasis HTTP akan menjadi 2-4x lebih lambat dari komunikasi biner mentah dengan Mongo dalam "kecepatan di atas segalanya!" skenario.

Perlu diingat bahwa kecepatan gila gila tidak berguna jika server crash atau kegagalan disk merusak dan membuat DB Anda terlupakan, sehingga titik data tidak sehebat kelihatannya (kecuali jika Anda melakukan sistem perdagangan real-time di Wall). Street, dalam hal ini lihat Redis).

Semoga semua bisa membantu!

Riyad Kalla
sumber
"MongoDB benar-benar MySQL dari dunia NoSQL" - Saya tidak tahu apakah ada perubahan tetapi artikel tahun 2014 ini tidak setuju: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım
Sementara, secara longgar dalam semangat saya pikir komentar masih bekerja, Anda benar, JAUH telah berubah dalam setengah dekade terakhir dan komentar saya harus dengan mudah ditolak.
Riyad Kalla
1

Sekarang ada lebih banyak database NoSQL di pasar daripada sebelumnya. Saya sarankan bahkan melihat Gartner Magic Quadrant jika Anda mencari database yang juga bagus untuk aplikasi perusahaan berdasarkan dukungan, perluasan, manajemen, dan biaya.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Saya ingin menyarankan Couchbase kepada siapa saja yang belum mencobanya, tetapi tidak didasarkan pada versi yang ditunjukkan dalam laporan (2.5.1) karena hampir 2 revisi di belakang di mana CB Server hari ini, mendekati rilis 4.0 di 2H15 .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Bagian lain tentang Couchbase sebagai vendor / produk adalah bahwa itu adalah tipe DB multi guna. Ini dapat bertindak sebagai toko K / V murni, Document Oriented Database dengan penskalaan multi-dimensi, Memcached, cache-samping dengan kegigihan, dan mendukung SQL ANSI 92 yang sesuai dengan sambungan otomatis, replikasi ke cluster DR dengan menekan tombol, dan bahkan memiliki komponen seluler bawaan untuk ekosistem.

Jika tidak ada yang lain, ada baiknya memeriksa tolok ukur terbaru:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

Austin Gonyou
sumber