Kecocokan dendam NoSQL: MongoDB vs. Server Couchbase

Memilih database yang tepat untuk pekerjaan itu bisa menjadi tugas yang menakutkan, terutama jika Anda menikmati banyak pilihan SQL dan NoSQL. Jika Anda mencari opsi fleksibel dan serbaguna yang memungkinkan skema fluid dan struktur data bersarang yang kompleks, database dokumen mungkin tepat untuk Anda. MongoDB dan Couchbase Server adalah dua pilihan populer. Bagaimana sebaiknya Anda memilih?

MongoDB menggabungkan manfaat dari popularitas yang luar biasa, dukungan untuk pencarian grafik sederhana, dan kemampuan untuk melakukan kueri SQL melalui konektor BI. Couchbase memiliki komunitas penggunanya yang besar, arsitektur nilai kunci yang berkinerja baik, dan bahasa kueri seperti SQL yang mampu menavigasi struktur dokumen bertingkat.

Singkatnya, baik MongoDB dan Couchbase adalah database berorientasi dokumen yang kuat dan fleksibel dengan banyak tambahan. Meskipun demikian, mereka memiliki perbedaan penting yang memiringkan keseimbangan satu atau lain cara, tergantung pada kebutuhan Anda. Untuk membantu Anda memutuskan, kami akan memamerkan database ini melalui tantangan pertimbangan utama, yang mencakup bagaimana masing-masing bekerja terkait dengan instalasi dan penyiapan, administrasi, kemudahan penggunaan, skalabilitas, dan dokumentasi.

Diskusi ini didasarkan pada MongoDB 3.4 dan Couchbase Server 4.6. Anda juga dapat melihat ulasan saya yang berdiri sendiri tentang MongoDB 3.4 dan Couchbase Server 4.0.

Instalasi dan penyiapan

Pemasangan dan penyiapan dapat dilihat dari dua perspektif: pengembang yang bekerja dengan instans lokal dan insinyur infrastruktur yang menyiapkan cluster produksi awal. Banyak database NoSQL memiliki cerita yang kuat seputar keramahan pengembang, meningkatkan peluang pengembang untuk mencoba produk dan memperkenalkannya ke sistem mereka. Pengaturan lokal yang mudah adalah nilai jual yang kuat. Di sisi lain, database pada akhirnya akan membuktikan nilainya dalam produksi, jadi penyiapan produksi sama pentingnya untuk mendapatkan hasil yang benar.

Penyiapan pengembang

Daripada menggunakan binari yang berjalan pada bare metal, kita akan melihat apa yang diperlukan untuk mengatur kedua database ini di lingkungan Docker. Pengaturan Docker untuk MongoDB dan Couchbase cukup mudah. Couchbase membutuhkan beberapa port tambahan untuk diekspos, tetapi ini masalah sederhana untuk ditangani. Setelah gambar ditarik ke bawah dan container dimulai, ada perbedaan nyata dalam pengalaman pengembang. Dengan MongoDB, Anda sudah selesai. Anda dapat terhubung melalui aplikasi atau shell Mongo dan segera mulai bekerja. Sebaliknya, Couchbase membawa Anda melalui proses penyiapan wajib melalui UI di mana Anda dihadapkan pada banyak opsi konfigurasi yang ditujukan untuk insinyur infrastruktur. Sebagai pengembang, Anda dapat mempertahankan opsi yang dipilih dan menggunakan keranjang default, tetapi hal itu menambah gesekan pada pengalaman.

MongoDB memenangkan yang ini, tetapi bukan tanpa peringatan. Hanya karena penerapan lokal mudah, bukan berarti Anda dapat melakukan hal yang sama dalam produksi. Tampaknya jelas bahwa lingkungan produksi memerlukan lebih banyak perawatan dan konfigurasi, tetapi serangan tebusan yang meluas pada instans MongoDB yang tidak aman dan dapat diakses publik awal tahun ini menunjukkan bahwa banyak toko mengambil jalan pintas yang berbahaya.

Pemenang putaran: MongoDB.

Pengaturan produksi

Menerapkan database terdistribusi ke produksi cenderung melibatkan banyak langkah dan tingkat koordinasi yang adil; MongoDB dan Couchbase tidak berbeda. Dalam kedua kasus, kesulitan penyiapan akan bergantung pada persyaratan penerapan, dengan trade-off kinerja yang berbeda yang melibatkan berbagai tingkat kerumitan.  

Kluster MongoDB akan terdiri dari set replika atau kluster yang dipisahkan. Kumpulan replika adalah grup server MongoDB yang semuanya berisi data yang sama, sedangkan cluster yang dipecah mendistribusikan data ke sejumlah kumpulan replika. Kumpulan replika mudah dikonfigurasi, terdiri dari satu jenis server yang akan digunakan. Cluster yang dipecah lebih terlibat, membutuhkan tiga jenis server berbeda untuk diterapkan, yang masing-masing direplikasi. Cluster dapat dikonfigurasi melalui tanda baris perintah, file konfigurasi, dan perintah database.

Kluster Couchbase dapat terdiri dari satu jenis server atau beberapa jenis server, bergantung pada karakteristik kinerja yang Anda butuhkan dari kluster. Arsitektur Couchbase terdiri dari berbagai layanan yang dapat diaktifkan atau dinonaktifkan pada basis per node. Dalam skenario sederhana, Anda mengaktifkan semua layanan di semua node. Namun, jika ingin menyesuaikan dengan kebutuhan setiap layanan atau Anda ingin menskalakan setiap layanan secara independen, Anda harus mulai mengonfigurasi jenis server yang berbeda, mengalokasikan perangkat keras komoditas untuk layanan data, SSD untuk layanan indeks, dioptimalkan CPU untuk layanan kueri, dan sebagainya. Kluster dapat dikonfigurasi melalui UI web bawaan, antarmuka baris perintah, dan REST API.

Sejauh pengaturan produksi infrastruktur data berjalan, baik MongoDB dan Couchbase cukup jelas. Tentu, Anda dapat menyelami opsi konfigurasi dan penyetelan dan tidak pernah keluar, tetapi dalam banyak kasus ini akan menjadi yang lebih mudah bagi insinyur infrastruktur.

Pemenang babak: Tie. 

Administrasi

Setelah database berjalan dalam produksi dan menerima lalu lintas, administrasi menjadi perhatian utama. Untuk mengevaluasi kemudahan administrasi, saya akan melihat proses pencadangan, peningkatan basis data, dan pendekatan pemantauan.

Cadangan

Cadangan adalah bagian penting dari kebersihan database produksi, dan menjalankan database dengan cara yang sangat tersedia dan terdistribusi tidak mengubah sedikit pun.

MongoDB menawarkan beberapa opsi untuk membuat cadangan data dari cluster yang sedang berjalan. Jika sistem operasi yang mendasari mendukung snapshot point-in-time, Anda dapat mengandalkan fitur tersebut untuk merekam cadangan pada saat yang tepat. Ini menjadi sedikit rumit untuk mencadangkan cluster yang dipecah karena Anda harus mengambil cuplikan sekunder dari setiap pecahan dan server konfigurasi pada saat yang bersamaan.

Alat tingkat sistem seperti cp atau rsync dapat digunakan untuk menyalin file database ke lokasi lain, tetapi penulisan harus dijeda selama proses karena sifat alat tersebut. Meskipun MongoDB dikirimkan dengan alat baris perintah untuk mencadangkan dan memulihkan database, alat ini tidak disarankan untuk cluster yang lebih besar. Atau, Anda dapat membayar Cloud Manager atau Ops Manager, atau menerapkan melalui platform MongoDB Atlas DBaaS untuk mendapatkan perkakas berbasis UI yang akan menangani pencadangan dan pemulihan untuk Anda.

Couchbase dilengkapi dengan alat baris perintah untuk mencadangkan data dari berbagai layanan, dan ini dapat dikonfigurasi untuk menjalankan pencadangan penuh atau dua jenis pencadangan tambahan. Pencadangan inkremental dapat berupa inkremental dari cadangan penuh terakhir (inkremental kumulatif) atau inkremental dari cadangan terakhir apa pun (inkremental diferensial). Hal ini memungkinkan struktur cadangan kompleks yang memerlukan berbagai tingkat ruang penyimpanan dan melibatkan berbagai tingkat kerumitan pemulihan.

Pelanggan perusahaan dapat menggunakan utilitas cbbackupmgr, yang menggunakan struktur data dasar yang berbeda untuk mencapai kinerja yang lebih baik saat mencadangkan data.

Pemenang putaran: Couchbase, karena fleksibilitasnya yang lebih besar dan dukungan untuk pencadangan tambahan.

Perbaikan

Cluster yang berjalan lama harus memiliki jalur peningkatan yang jelas dan mudah. Semakin sulit untuk mengupgrade, semakin kecil kemungkinannya untuk tetap up-to-date. Itu berarti pengembang dan administrator akan kehilangan fitur baru.

Peningkatan MongoDB paling baik dipahami dari level set replika. Jika Anda menjalankan cluster sharded, Anda biasanya mengikuti langkah-langkah untuk mengupgrade kumpulan replika di setiap shard. Dalam satu set replika, setiap sekunder dimatikan, ditingkatkan di tempatnya, dan dimulai. Setelah sekunder beroperasi dan konsisten dengan primer, failover diinduksi dan primer sebelumnya dapat dihapus dan ditingkatkan. Ini akan dimulai lagi sebagai sekunder dan mengejar penulisan yang terlewat saat offline. Dengan demikian, sebagian besar pemutakhiran merupakan proses online, tetapi kegagalan utama kemungkinan besar akan mengakibatkan 10 hingga 20 detik tidak ada penulisan, sehingga diperlukan masa pemeliharaan dengan waktu henti yang dapat diterima.

Pendekatan Couchbase mengupgrade dengan cara yang sama seperti Anda menambah atau menghapus node dari cluster. Semua data node pemutakhiran harus diseimbangkan ulang di seluruh kluster, kemudian diseimbangkan kembali ketika pemutakhiran selesai dan node bergabung kembali dengan kluster. Proses rebalancing itu harus terjadi untuk setiap node di cluster, satu demi satu. Ini akan memakan waktu lebih lama daripada mengupgrade cluster MongoDB, karena semua data yang harus dipindahkan. Opsi lainnya adalah membuat seluruh cluster offline, mengupgrade setiap node, dan mengembalikan semuanya online.

Meskipun jalur peningkatan Couchbase tidak memerlukan waktu henti, prosesnya panjang dan membutuhkan banyak pengocokan data agar dapat berfungsi.

Pemenang babak: Tie. Tiebreaker: Jika waktu henti pemeliharaan dapat diterima, maka MongoDB menang. Jika tidak, maka Couchbase adalah satu-satunya pilihan.

Monitoring

Visibilitas ke dalam cluster yang sedang berjalan jelas penting untuk administrasi database yang sukses. Ketika ada yang salah, tidak ada yang lebih buruk daripada memiliki pandangan terbatas tentang kebenaran di cluster.

MongoDB menawarkan alat dan perintah CLI di dalam shell yang menyediakan metrik pada aktivitas dan kinerja instance. Selain itu, MongoDB akan membantu mengarahkan Anda ke alat pihak ketiga atau produk perusahaannya sendiri (Cloud Manager, Ops Manager, Atlas).

Couchbase, di sisi lain, dikirimkan dengan UI web yang mencakup statistik dan visualisasi untuk instance, node, kinerja kueri, dan banyak lagi. Selain itu, Couchbase dapat dikonfigurasi untuk mengirim peringatan email ketika statistik tertentu berada di luar jangkauan.

Pemenang babak: Couchbase, untuk visualisasi dan peringatan out-of-the-box.

Kemudahan penggunaan

Setelah database disiapkan dan semua kebutuhan administrasi kami terpenuhi, perhatian utama bergeser dari operasi ke penggunaan. Saya akan memecahnya menjadi pemodelan data, desain indeks, kueri dasar, dan agregasi.

Pemodelan data

Sebagai database dokumen, baik MongoDB maupun Couchbase tidak dapat menghindari tantangan bagaimana menangani data relasional. Keduanya menawarkan kemampuan untuk menyimpan data relasional sebagai data bertingkat dan dinormalisasi serta dalam bentuk referensi ke dokumen tingkat atas lainnya. Pendekatan penyimpanan data ini akhirnya menjadi titik pertimbangan utama untuk pemodelan data untuk kedua database, meskipun masing-masing mendukung peningkatan luas kasus penggunaan, fitur, dan pola kueri.

Pemenang babak: Tie.

Desain indeks

Indeks melakukan fungsi yang sama dalam database dokumen seperti yang mereka lakukan di database relasional. Artinya, mereka mewakili data tertentu dengan cara yang lebih efisien untuk meningkatkan kinerja kueri. MongoDB dan Couchbase menggunakan pendekatan yang sangat berbeda untuk desain dan pembuatan indeks.

MongoDB mendukung pembuatan indeks untuk satu atau beberapa bidang dalam dokumen, memungkinkan Anda menentukan urutan dan arah (naik atau turun) indeks standar. Ini juga memungkinkan untuk menyertakan indeks geospasial khusus dan indeks teks lengkap sebagai bagian dari sintaks yang sama. Mesin kueri akan menggunakan indeks tersebut, awalan dari indeks tersebut, atau kombinasi dari beberapa indeks untuk mempercepat permintaan.

Couchbase mengandalkan dua mekanisme berbeda untuk meningkatkan kinerja kueri: tampilan MapReduce dan Global Secondary Index (GSI). Tampilan MapReduce terdiri dari kode JavaScript yang ditentukan pengguna yang memproses data saat melewati sistem, seperti pra-agregasi inkremental. Tampilan MapReduce bisa sesederhana memungkinkan pencarian dokumen di bidang dalam, atau mereka bisa menyertakan logika yang lebih kompleks yang melakukan penghitungan dan agregasi pada data di dalam dokumen.

Menulis MapReduce di JavaScript untuk mendukung kueri agak sulit, jadi Anda biasanya ingin menggunakan GSI jika memungkinkan. Indeks di GSI dijelaskan menggunakan N1QL (diucapkan "nikel"), implementasi SQL parsial di atas Couchbase. Sintaks N1QL cukup jelas, dan kueri N1QL jauh lebih baik daripada MapReduce, tetapi Anda harus menempatkan indeks pada node tertentu. Jika Anda ingin indeks tersedia dengan baik, Anda harus membuat indeks tersebut secara manual di lebih dari satu node.

Pemenang putaran: MongoDB, untuk API pengindeksan terkonsolidasi dan kemampuannya untuk menghindari MapReduce sama sekali.

Kueri dasar

Dengan model data yang sesuai, sebagian besar kueri ke database cenderung sederhana. Di luar operasi CRUD di mana ID dokumen yang dipermasalahkan diketahui, penting untuk dapat mengungkapkan berbagai cara memfilter dokumen dan memilih bidang mana yang kami minati.

MongoDB mendeskripsikan kueri di JSON, menyediakan sintaks deklaratif untuk menentukan kondisi dan filter pada bidang. Dokumen kueri dapat terdiri dari sejumlah pemilih kueri yang menggambarkan seperti apa kumpulan hasil itu. Rentang, persamaan, penelusuran teks, dan kueri geospasial semuanya dapat ditentukan dalam dokumen kueri ini. Dokumen mendukung operator boolean, sehingga beberapa klausa query dapat secara logis bergabung bersama-sama dengan AND, OR, dan sebagainya. Dokumen kueri dapat dengan cepat tumbuh menjadi dokumen JSON yang sangat bertingkat, yang terkadang bisa membuat kewalahan dan tentunya membutuhkan waktu untuk membiasakan diri. Dimungkinkan juga untuk memanfaatkan proyeksi dalam kueri, yang memungkinkan Anda mengembalikan hanya bidang yang Anda pedulikan dan mengurangi ukuran hasil keseluruhan melalui kawat.