Apa Perbedaan Antara Cassandra dan MongoDB?


Apa perbedaan antara Cassandra dan MongoDB?

Apache Cassandra dan MongoDB adalah dua basis data NoSQL yang menyimpan data dalam format non-tabular. Cassandra adalah basis data NoSQL awal dengan desain hibrida antara penyimpanan tabular dan nilai-kunci. Cassandra didesain untuk menyimpan data bagi aplikasi yang membutuhkan performa baca dan tulis cepat. Sebaliknya, MongoDB adalah basis data dokumen yang dibuat untuk penggunaan tujuan umum. MongoDB memiliki model data fleksibel yang memungkinkan Anda menyimpan data tidak terstruktur dalam format JSON yang dioptimalkan yang disebut JSON Binari atau BSON. Basis data MongoDB menyediakan dukungan pengindeksan penuh dan replikasi dengan API yang kaya serta intuitif.

Baca tentang Apache Cassandra »

Baca tentang MongoDB »

Apa persamaan antara Cassandra dan MongoDB?

Apache Cassandra dan MongoDB adalah bagian dari grup basis data NoSQL. Basis data NoSQL dapat menyimpan data terstruktur, tidak terstruktur, dan semiterstruktur tanpa skema basis data.

Penyimpanan data dalam basis data NoSQL tidak dibatasi oleh format tabular dan hubungan antartabel, tidak seperti dalam sistem manajemen basis data relasional tradisional. Anda dapat dengan bebas mempartisi dan mereplikasi data di beberapa simpul untuk menskalakan secara efisien. 

Selain itu, Cassandra dan versi awal MongoDB adalah sumber terbuka. Hal ini berarti Anda dapat mengunduh kode sumber basis data NoSQL ini dan mengonfigurasikannya sesuka Anda.

Facebook mengembangkan Cassandra lalu merilisnya sebagai proyek sumber terbuka dengan Apache. MongoDB dikembangkan oleh sekelompok developer di bawah MongoDB, Inc. Semua versi MongoDB yang dirilis sebelum 16 Oktober 2018 tersedia di bawah Lisensi Publik Umum GNU Affero.

Baca tentang NoSQL »

Baca tentang sumber terbuka »

Perbedaan model data: Cassandra vs. MongoDB

Meskipun MongoDB dan Apache Cassandra merupakan basis data NoSQL, keduanya menyimpan dan mengelola data secara terpisah.

Cassandra

Cassandra menyimpan data sebagai penyimpanan nilai-kunci. Cassandra memungkinkan Anda untuk menentukan baris dan kolom, tetapi struktur tabular tidak digunakan dalam penyimpanan yang sebenarnya. Sebaliknya, Cassandra menggunakan model basis data yang berorientasi pada kolom dan lebar sehingga setiap baris dalam tabel dapat memiliki serangkaian kolom yang berbeda.

Anda dapat mengelompokkan kolom-kolom ke dalam beberapa keluarga kolom berdasarkan jenis atau penggunaan datanya. Setiap baris memiliki kunci primer yang dapat Anda gunakan untuk membaca data dari Cassandra dengan cepat.

Struktur tabel Apache Cassandra dapat divisualisasikan dalam contoh berikut.

Id pelanggan 1

Kolom - Nama

Kolom - Negara

 
 

Nilai - John Doe

Nilai - Amerika Serikat

 
Id pelanggan 2

Kolom - Nama 

Kolom - Usia

Kolom - Email

 

Nilai - Jane Doe

Nilai - 35

Nilai - [email protected]

MongoDB

Sebaliknya, MongoDB menyimpan data tanpa skema, menggunakan format JSON Binari (BSON) yang dioptimalkan. MongoDB dapat menyimpan beberapa jenis data dalam satu dokumen, mirip dengan objek JSON, lalu membuat serial dengan BSON.

MongoDB mengatur dokumen ke dalam beberapa kumpulan yang dapat berisi data dengan berbagai struktur. Model datanya fleksibel dan dapat menangani volume besar data yang tidak terstruktur.

Berikut ini adalah contoh data pelanggan di MongoDB.

customers:[

{

  customer_id: "1",

  name: “John Doe”,

  country: "United States"

},

{

  customer_id: "2",

  age: “35”

  email: "[email protected]"

}]

Perbedaan arsitektur: Cassandra vs. MongoDB

Karena perbedaan dalam model datanya, Cassandra dan MongoDB menerapkan beberapa fitur basis data secara berbeda.

Unit penyimpanan dasar

Di Cassandra, Tabel String yang Diurutkan (SSTable) adalah unit penyimpanan dasar yang digunakan untuk mempertahankan data pada disk. SSTable adalah file yang berisi set pasangan nilai-kunci yang diurutkan untuk keluarga kolom tertentu (tabel) dan partisi. SSTable tidak dapat diubah, yang berarti bahwa setelah SSTable ditulis, SSTable tersebut tidak dapat dimodifikasi. 

Dalam MongoDB, unit penyimpanan dasarnya adalah dokumen. Dokumen adalah set pasangan kunci-nilai di mana kunci berupa string dan nilai dapat berupa beragam jenis yang berbeda. Misalnya, nilai dapat berupa dokumen, array, string, angka, tanggal, dan nilai Boolean lainnya. Dokumen disimpan dalam kumpulan.

Bahasa kueri

Bahasa kueri adalah pernyataan yang Anda gunakan untuk menyisipkan dan mengambil data dari basis data.

Bahasa Kueri Cassandra (CQL) adalah bahasa kueri yang Anda gunakan pada Cassandra. Meskipun memiliki sintaksis dan struktur yang mirip dengan SQL, Apache telah mengembangkan CQL untuk bekerja dengan model data keluarga-kolom.

Di sisi lain, MongoDB menggunakan Bahasa Kueri MongoDB (MQL) yang memiliki perintah yang mirip seperti Node.js. MQL mendukung operasi buat, baca, perbarui, dan hapus (CRUD). Anda dapat menulis perintah MQL pada Shell MongoDB.

Pengindeksan

Pengindeksan adalah teknik yang digunakan dalam basis data untuk meningkatkan kecepatan dan efisiensi operasi pengambilan data. Pengindeksan melibatkan penciptaan struktur data yang memetakan nilai-nilai dari satu atau beberapa kolom dalam tabel basis data ke lokasi fisik dari data yang sesuai pada disk.

Cassandra mendukung dua jenis indeks:

  • Indeks sekunder pada kolom individu
  • Indeks Sekunder Terlampir SSTable (SASI) diindeks pada beberapa kolom

Indeks SASI menyimpan data indeks secara langsung di SSTable. Indeks SASI mendukung kueri kompleks seperti rentang, prefiks, dan pencarian teks lengkap pada kolom dengan nilai unik dalam jumlah besar.

Sebaliknya, MongoDB mendukung pengindeksan pada tingkat kumpulan dan tingkat bidang. MongoDB menyediakan beberapa jenis indeks seperti bidang tunggal, gabungan, dan multikunci. MongoDB juga menawarkan indeks-indeks ini:

  • indeks geospasial khusus untuk data yang didistribusikan secara geografis
  • indeks pencarian teks untuk data teks dengan volume besar
  • indeks yang dilakukan hashing dan diklasterkan untuk data numerik

Konkurensi

Dalam basis data, konkurensi adalah ketika beberapa pengguna atau proses dapat mengakses dan melakukan transaksi basis data secara bersamaan tanpa mengganggu satu sama lain. 

Cassandra mencapai konkurensi melalui konsistensi turntable dan atomisitas tingkat baris. Hanya satu pengguna yang dapat beroperasi pada satu baris dalam waktu yang bersamaan.

Dalam konsistensi turntable, setiap simpul replika mempertahankan jam vektor yang merupakan struktur data yang melacak riwayat versi data terkait. Ketika operasi tulis dilakukan, jam vektor akan melakukan pembaruan agar sesuai dengan versi baru. Ketika operasi baca dilakukan, Cassandra mengembalikan versi dengan stempel waktu tertinggi di semua replika, yang memastikan bahwa versi terbaru dari data selalu dikembalikan.

Sebaliknya, MongoDB mendukung mekanisme untuk kontrol konkurensi multiversi (MVCC). MVCC memungkinkan beberapa versi dari dokumen data yang sama agar muncul secara bersamaan. Setiap dokumen memiliki ID revisi unik yang ditambahkan pada setiap pembaruan. Penguncian tingkat dokumen dan MVCC memberikan strategi konkurensi yang lebih kuat.

Ketersediaan

Ketersediaan berarti Anda memastikan tidak ada waktu henti data, bahkan selama terjadinya pemadaman server. Cassandra dan MongoDB memastikan ketersediaan dengan mereplikasi data di beberapa simpul server.

Di Apache Cassandra, setiap simpul di klaster menyimpan replika data untuk simpul lainnya. Setiap koordinat simpul membaca simpul yang tepat untuk menulis atau menarik data. Secara bersamaan, koordinat simpul juga memperbaiki data yang keluar dari konsistensi di seluruh simpul. Hal ini dapat memengaruhi performa pada skala besar.

Sebaliknya, MongoDB menggunakan replikasi simpul primer tunggal untuk menawarkan ketersediaan data yang tinggi. MongoDB mereplikasi data ke dalam beberapa set replika. Hanya satu simpul primer yang menerima penulisan, dan simpul lainnya hanya mereplikasi data dari simpul primer. Namun, simpul primer menciptakan satu titik kegagalan.

Skalabilitas

Baik Cassandra maupun MongoDB memungkinkan penyerpihan—sebuah teknik untuk mempartisi data secara horizontal di beberapa simpul dalam sebuah klaster. Misalnya, jika memiliki ribuan pelanggan, Anda mempartisi data sehingga setiap simpul hanya memiliki informasi dari beberapa ratus pelanggan. Dengan demikian, Anda dapat menskalakan basis data tanpa menimbulkan hambatan.

Cassandra menggunakan algoritma hash terdistribusi yang disebut hashing konsisten untuk menentukan simpul mana yang bertanggung jawab atas nilai data tertentu. Cassandra juga mendukung simpul virtual (vnode), yang memungkinkan simpul fisik tunggal memiliki beberapa rentang data.

Sebaliknya, MongoDB menggunakan kunci penyerpihan untuk mengidentifikasi tempat tujuan nilai data. Administrator basis data dapat menentukan kunci penyerpihan untuk mempartisi data. Anda dapat membagi data berdasarkan faktor-faktor seperti lokasi geografis, urutan abjad, atau sistem lain yang paling efisien untuk set data Anda.

Kapan perlu menggunakan Cassandra vs. MongoDB

Dengan waktu aktif dan arsitektur terdistribusi yang tinggi, Cassandra merupakan pilihan yang baik untuk persyaratan ketersediaan tinggi. Kemampuan MongoDB untuk menangani data yang tidak terstruktur dengan pendekatan yang berorientasi pada dokumen membuatnya berguna bagi sistem yang datanya terus berubah. 

Berikut adalah beberapa faktor yang perlu dipertimbangkan ketika Anda memilih di antara keduanya.

Format data

Apache Cassandra memiliki sistem penyimpanan data yang lebih terstruktur daripada MongoDB. Jika data yang dikerjakan memiliki format tetap, Cassandra akan lebih cocok bagi Anda.

Jika data bersifat lebih dinamis dan tidak memiliki struktur yang konsisten, MongoDB dapat bekerja dengan lebih baik.

Ketersediaan 

MongoDB memiliki simpul primer dan serangkaian replika. Jika simpul primer turun, MongoDB membutuhkan waktu beberapa menit untuk memilih simpul replika sebagai pengganti. Hal ini dapat menyebabkan sedikit waktu henti.

Cassandra menggunakan sistem simpul terdistribusi dengan banyak simpul utama, yang memungkinkan ketersediaan waktu aktif sebesar 100%. 

Skalabilitas

MongoDB memberi Anda lebih banyak kontrol saat Anda menskalakan. Anda dapat memutuskan cara untuk mempartisi data di seluruh simpul berdasarkan persyaratan Anda, dan mengelola basis data yang didistribusikan secara besar-besaran pada skala besar.

Performa Cassandra mungkin akan sedikit menurun pada skala besar, tergantung nilai datanya.

Bahasa kueri

Bahasa Kueri Cassandra (CQL) dan Bahasa Kueri MongoDB (MQL) adalah bahasa kueri yang sangat efektif. Namun, CQL jauh lebih mirip dengan SQL, yang memungkinkan Anda untuk menggunakan CQL secara mudah jika Anda sudah mahir dalam SQL.

MQL memiliki implementasi dan sintaksis yang berbeda, serta mungkin memiliki kurva belajar yang lebih curam.

Dukungan untuk bahasa pemrograman

MongoDB mendukung dua belas bahasa pemrograman: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala, dan Swift.

Cassandra mendukung lebih sedikit bahasa, seperti Java, JavaScript, Perl, Ruby, Scala, C #, Erlang, PHP, Python, dll.

Ringkasan perbedaan: Cassandra vs. MongoDB

 

Apache Cassandra

MongoDB

Model data

Cassandra menggunakan model data kolom lebar yang memiliki keterkaitan lebih dekat dengan basis data relasional. 

MongoDB berpindah sepenuhnya dari model relasional dengan menyimpan data sebagai dokumen.

Unit penyimpanan dasar

Tabel string yang diurutkan.

Dokumen JSON berseri.

Pengindeksan

Cassandra mendukung indeks sekunder dan SASI untuk mengindeks berdasarkan satu atau beberapa kolom.

MongoDB mengindeks pada tingkat kumpulan dan tingkat bidang serta menawarkan beberapa pilihan pengindeksan.

Bahasa kueri

Cassandra menggunakan CQL.

MongoDB menggunakan MQL.

Konkurensi

Cassandra mencapai konkurensi dengan atomisitas tingkat baris dan konsistensi turntable

MongoDB menggunakan MVCC dan penguncian tingkat dokumen untuk memastikan konkurensi. 

Ketersediaan

Cassandra memiliki beberapa simpul utama, partisi simpul, dan replikasi kunci untuk menawarkan ketersediaan tinggi.

MongoDB menggunakan simpul primer tunggal dan beberapa simpul replika. Dikombinasikan dengan penyerpihan, MongoDB menyediakan ketersediaan dan skalabilitas yang tinggi. 

Partisi

Algoritma hashing konsisten, keterbatasan kontrol bagi pengguna.

Pengguna menentukan kunci penyerpihan dan memiliki kontrol yang lebih besar atas partisi.

Bagaimana AWS dapat mendukung persyaratan Cassandra dan MongoDB Anda?

Amazon Web Services (AWS) menawarkan dua layanan yang mendukung persyaratan umum Apache Cassandra dan MongoDB.

Amazon Keyspaces (untuk Apache Cassandra) adalah basis data yang sangat tersedia dan terkelola yang memungkinkan Anda memindahkan beban kerja Cassandra ke cloud. Amazon Keyspaces ini bersifat nirserver sehingga Anda hanya membayar sumber daya yang digunakan dan layanan dapat secara otomatis menskalakan tabel ke atas dan ke bawah sebagai respons terhadap lalu lintas aplikasi. Anda dapat membangun aplikasi yang melayani ribuan permintaan per detik dengan throughput dan penyimpanan hampir tak terbatas.

Amazon DocumentDB (dengan kompatibilitas MongoDB) adalah sebuah basis data dokumen JSON native yang terkelola penuh. Amazon DocumentDB memudahkan dan menghemat biaya operasi beban kerja dokumen penting pada hampir semua skala tanpa perlu mengelola infrastruktur. Amazon DocumentDB menyederhanakan arsitektur dengan menyediakan praktik terbaik keamanan bawaan, pencadangan berkelanjutan, dan intergrasi native dengan layanan AWS lain.

Mulai menggunakan layanan basis data Apache Cassandra dan MongoDB yang terkelola di AWS dengan membuat akun AWS sekarang juga.