MongoDB dan CouchDB keduanya adalah jenis database NoSQL berbasis dokumen. Database dokumen juga disebut mdocument store, dan biasanya digunakan untuk menyimpan format dokumen dari data semi-terstruktur dan deskripsi detailnya. Ini memungkinkan pembuatan dan pembaruan program tanpa perlu merujuk ke skema master. Manajemen konten dan penanganan data dalam aplikasi seluler adalah dua bidang di mana penyimpanan dokumen dapat diterapkan.
Ikhtisar MongoDB
MongoDB adalah startup 10gen, yang dimulai pada tahun 2007. Berasal dari keluarga Document store, ini adalah salah satu dari NoSQL, database bebas skema dengan kinerja yang relatif tinggi, skalabilitas, dan kaya dalam fungsi pengolahan data. Basis data sumber terbuka ini ditulis dalam C++ dan menggunakan skema dinamis. Arsitektur MongoDB berisi dokumen yang dikelompokkan ke dalam koleksi berdasarkan strukturnya. Basis data ini menggunakan BSON. BSON adalah representasi biner dari JSON dan mendukung penyimpanan dokumen dan pertukaran data. Di MongoDB, subjek bisnis dapat disimpan dalam jumlah minimum dokumen, yang dapat diindeks terutama atau sekunder, tanpa memecahnya menjadi beberapa dokumen relasional.
Seiring dengan kemampuan MongoDB yang disebutkan di atas, ia juga menyediakan kumpulan kumpulan replika besar di mana setiap kumpulan dapat berisi lebih dari satu salinan data. Dalam set replika, semua fungsi utama (baca dan tulis) dilakukan pada set utama sementara set sekunder digunakan jika terjadi kegagalan pada set sebelumnya. MongoDB menggabungkan sharding, yang memanfaatkan proses penskalaan secara horizontal. Properti penyeimbangan beban dari basis data penyimpanan dokumen ini dibenarkan oleh fakta bahwa ia berjalan di beberapa server, sehingga memberikan duplikasi data dan penyeimbangan beban. Sebagai imbalannya, ia juga menyediakan cadangan selama kegagalan perangkat keras. Itu juga menggunakan sistem file grid yang membagi file tertentu menjadi beberapa bagian dan menyimpannya secara terpisah.
Fitur umum MongoDB:
- Desain model data mengurangi kebutuhan untuk bergabung dan menyediakan evolusi skema yang mudah.
- Kinerja tinggi, karena tidak berisi gabungan atau transaksi yang menyediakan akses cepat dan karenanya kinerja meningkat.
- Ketersediaan tinggi karena penggabungan set replika yang mampu menyediakan cadangan selama kegagalan dan juga sangat kuat.
- Kemudahan dalam skalabilitas.
- Properti sharding MongoDB memungkinkannya bekerja dengan cepat dan efisien dalam fungsi terdistribusi. Ini juga dimungkinkan karena mendukung penskalaan data secara horizontal.
- Bahasa sangat kaya dalam kueri. MongoDB memiliki bahasa kueri sendiri yang disebut bahasa kueri Mongo, yang dapat menggantikan bahasa SQL. Demikian pula, fungsi utilitas dan pemetaan atau pengurangan dapat menggantikan fungsi agregat yang rumit.
Ikhtisar CouchDB
CouchDB, Produk Apache Software Foundation dan terinspirasi oleh Lotus Notes, juga merupakan database NoSQL berbasis dokumen sumber terbuka yang berfokus terutama pada penggunaan yang mudah. Ini adalah database node tunggal, bekerja persis seperti database lainnya. Biasanya dimulai dengan instance node tunggal tetapi dapat ditingkatkan dengan mulus ke cluster. Ini memungkinkan pengguna untuk menjalankan satu database di banyak server atau VM. CouchDB cluster menyediakan kapasitas dan ketersediaan tinggi dibandingkan dengan CouchDB node tunggal. Ini menggunakan Erlang, bahasa tujuan umum. Seperti MongoDB, ia juga menggunakan javascript dan map/reduce. Ini menyimpan data dalam bentuk kumpulan dokumen daripada sebagai tabel. CouchDB yang diperbarui tidak terkunci, yang berarti tidak perlu mengunci database selama penulisan. Dokumen dalam database ini juga menggunakan protokol HTTP dan JSON, serta kemampuan untuk melampirkan file non-JSON ke dalamnya. Jadi, CouchDB kompatibel dengan aplikasi atau perangkat lunak apa pun yang mendukung format JSON.
Fitur umum CouchDB
- Server CouchDB menghosting database bernama, yang menyimpan dokumen dengan nama unik dalam database, dan CouchDB menyediakan RESTful HTTP API untuk membaca dan memperbarui (menambah, mengedit, menghapus) dokumen database
- CouchDB menyediakan GUI berbasis browser untuk menangani data, izin, dan konfigurasi.
- CouchDB menyediakan bentuk replikasi paling sederhana.
- CouchDB memfasilitasi otentikasi dan Dukungan Sesi:untuk menjaga otentikasi tetap terbuka melalui cookie sesi seperti aplikasi web.
- CouchDB menyediakan keamanan tingkat basis data di mana izin per basis data dipisahkan menjadi pembaca dan administrator. Pembaca diizinkan untuk membaca dan menulis ke database CouchDB.
- CouchDB memvalidasi data yang dimasukkan ke dalam database menggunakan autentikasi untuk memverifikasi pembuat dan id sesi login adalah sama.
REST API digunakan untuk menulis dan menanyakan data . Ia juga menawarkan membaca dokumen, menambah, mengedit, dan menghapus. Ini menggunakan model ACID daripada BASE oleh implementasi MVCC. Sama seperti MongoDB mendukung replikasi perangkat saat offline. Ini menggunakan model replikasi khusus yang disebut Konsistensi Akhir. CouchDB sangat andal dalam hal data. Basis data simpul tunggal menggunakan struktur data tahan-kerusakan yang hanya ditambahkan, dan basis data multimode atau klaster dapat menyimpan data secara berlebihan sehingga dapat tersedia kapan pun pengguna membutuhkannya. CouchDB dapat diskalakan bersama sebagai kluster besar seperti kluster global hingga sekecil perangkat seluler. Kemampuan untuk berjalan di perangkat Android atau iOS membuat CouchDB menonjol di antara database lainnya.
Arsitektur CouchDB didistribusikan, yang mendukung sinkronisasi dua arah. Itu tidak memerlukan skema apa pun karena menggunakan id unik. Meskipun CouchDB mengikuti fitur AP (ketersediaan dan toleransi partisi) dari model CAP, untuk mengatasi konsistensi yang diperdagangkan, CouchDB mengikuti model ACID secara praktis.
Perbandingan Antara CouchDB dan MongoDB
Fitur Perbandingan | CouchDB | MongoDB |
Model Data | Ini mengikuti model berorientasi dokumen, dan data disajikan dalam format JSON. | Ini mengikuti model berorientasi dokumen, tetapi data disajikan dalam format BSON. |
Antarmuka | CouchDB menggunakan antarmuka berbasis HTTP/REST. Ini sangat intuitif dan dirancang dengan sangat baik. | MongoDB menggunakan protokol biner dan protokol khusus melalui TCP/IP. |
Penyimpanan Objek | Di CouchDB, database berisi dokumen. | Di MongoDB, database berisi koleksi, dan koleksi berisi dokumen. |
Kecepatan | Kecepatan membaca sangat penting untuk database, MongoDB lebih cepat daripada CouchDB | MongoDB menyediakan kecepatan baca yang lebih cepat. |
Dukungan Seluler | CouchDB dapat dijalankan di perangkat Apple iOS dan Android, menawarkan dukungan untuk perangkat seluler. | Tidak ada dukungan seluler yang disediakan |
Ukuran | Database dapat berkembang dengan CouchDB; MongoDB lebih cocok untuk pertumbuhan yang cepat ketika strukturnya tidak didefinisikan dengan jelas sejak awal. | Jika kita memiliki database yang berkembang pesat, MongoDB adalah pilihan yang lebih baik. |
Metode Kueri | Kueri menggunakan fungsi pengurangan peta. Meskipun ini mungkin solusi yang elegan, ini bisa lebih sulit bagi orang-orang dengan pengalaman SQL tradisional untuk belajar. | MongoDB mengikuti Map/Reduce (JavaScript) membuat kumpulan + bahasa kueri berbasis objek. Untuk pengguna dengan pengetahuan SQL, MongoDB lebih mudah dipelajari karena sintaksnya lebih dekat. |
Replikasi | CouchDB mendukung replikasi master-master dengan fungsi resolusi konflik khusus. | MongoDB mendukung replikasi master-slave. |
Konkurensi | Ini mengikuti MVCC (Kontrol Konkurensi Multi-Versi). | Perbarui di tempat. |
Preferensi | CouchDB mengutamakan ketersediaan. | MongoDB mengutamakan konsistensi. |
Konsistensi Kinerja | CouchDB lebih aman daripada MongoDB. | MongoDB, database berisi koleksi dan koleksi berisi dokumen. |
Konsistensi | CouchDB akhirnya konsisten. | MongoDB sangat konsisten. |
Ditulis dalam | Ditulis dalam Erlang. | Ditulis dalam C++. |
Analisis | Jika kita memerlukan database yang berjalan di perangkat seluler, memerlukan replikasi master-master, atau ketahanan server tunggal, maka CouchDB adalah pilihan yang tepat. | Jika kita mencari throughput maksimum, atau memiliki database yang berkembang pesat, MongoDB adalah cara yang tepat. |
CouchDB dan MongoDB:Kueri yang Sangat Berbeda
CouchDB dan MongDB adalah penyimpanan data berorientasi dokumen yang bekerja dengan dokumen JSON tetapi dalam hal kueri, kedua database tidak bisa lebih berbeda lagi. CouchDB memerlukan tampilan yang telah ditentukan sebelumnya (yang pada dasarnya adalah fungsi JavaScript MapReduce) dan MongoDB mendukung kueri dinamis (pada dasarnya apa yang biasa kami lakukan dengan kueri SQL ad-hoc RDBMS normal).
Misalnya, untuk memasukkan beberapa data di CouchDB menggunakan RESTClient Groovy dan menerbitkan posting RESTful seperti di bawah ini:
import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])
Contoh kode fungsi untuk menanyakan dokumen apa pun yang milik petugasnya adalah “Micheal Jordan”:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Saat kami mengeluarkan permintaan HTTP GET untuk nama tampilan tersebut, kami dapat mengharapkan setidaknya satu dokumen seperti di bawah ini:
response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}
MongoDB bekerja seperti yang biasa kita lakukan dengan database normal:kita dapat meminta apa pun yang diinginkan hati kita saat runtime.
Memasukkan instance tiket parkir yang sama menggunakan driver Java asli MongoDB:
DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);
Untuk menanyakan tiket apa pun dari MongoDB yang dikeluarkan oleh Petugas Michael Jordan cukup dengan mengajukan pertanyaan di properti petugas:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Kesimpulan
Dalam blog ini, kami telah membandingkan dua database NoSQL berbasis dokumen- MongoDB dan CouchDB. Tabel tersebut memberikan gambaran umum tentang perbandingan parametrik utama antara kedua database ini. Seperti yang telah kita lihat, prioritas proyek akan menentukan pemilihan sistem. Perbedaan utama termasuk metode replikasi dan dukungan platform. Juga, dari perbandingan, jelas bahwa jika aplikasi membutuhkan lebih banyak efisiensi dan kecepatan, maka MongoDB adalah pilihan yang lebih baik daripada CouchDB. Jika pengguna perlu menjalankan database-nya di ponsel dan juga membutuhkan replikasi multi-master, maka CouchDB adalah pilihan yang jelas. Juga, MongoDB lebih cocok daripada CouchDB jika database berkembang pesat. Keuntungan utama menggunakan CouchDB adalah didukung pada perangkat seluler (Android dan iOS) daripada MongoDB. Jadi pada dasarnya, kebutuhan aplikasi yang berbeda akan membutuhkan database yang berbeda berdasarkan skenario.
Kami telah mengamati bahwa MongoDB sedikit lebih baik daripada CouchDB karena menggunakan struktur kueri seperti SQL, dan hal yang sama lebih mudah pada yang sebelumnya. Juga, untuk menggunakan kueri dinamis, MongoDB adalah pilihan yang jauh lebih baik. Mengenai keamanan di kedua database, penelitian masih berlangsung, dan sulit untuk mengatakan mana yang menyediakan lingkungan yang lebih baik dan aman.