Tiga jenis database NoSQL yang pernah saya baca adalah nilai kunci, berorientasi kolom, dan berorientasi dokumen.
Nilai kunci cukup mudah - kunci dengan nilai biasa.
Saya telah melihat database berorientasi dokumen yang dideskripsikan sebagai nilai kunci, tetapi nilainya dapat berupa struktur, seperti objek JSON. Setiap "dokumen" dapat memiliki semua, beberapa, atau tidak ada kunci yang sama seperti yang lain.
Berorientasi kolom tampaknya sangat mirip dengan berorientasi dokumen di mana Anda tidak menentukan struktur.
Jadi apa perbedaan antara keduanya, dan mengapa Anda menggunakan salah satunya?
Saya secara khusus melihat MongoDB dan Cassandra. Saya pada dasarnya membutuhkan struktur dinamis yang dapat berubah, tetapi tidak memengaruhi nilai-nilai lain. Pada saat yang sama saya harus dapat menelusuri / memfilter kunci tertentu dan menjalankan laporan. Dengan CAP, AP adalah yang paling penting bagi saya. Data "pada akhirnya" dapat disinkronkan lintas node, selama tidak ada konflik atau kehilangan data. Setiap pengguna akan mendapatkan "tabel" mereka sendiri.
Perbedaan utamanya adalah bahwa penyimpanan dokumen (mis. MongoDB dan CouchDB) memungkinkan dokumen yang rumit secara sewenang-wenang, yaitu sub dokumen di dalam sub dokumen, daftar dengan dokumen, dll. Sedangkan penyimpanan kolom (misalnya Cassandra dan HBase) hanya mengizinkan format tetap, misalnya satu tingkat ketat atau kamus dua tingkat.
sumber
Dalam "sisipkan", untuk menggunakan kata rdbms, Berbasis dokumen lebih konsisten dan lurus ke depan. Catatan dari cassandra memungkinkan Anda mencapai konsistensi dengan gagasan kuorum, tetapi itu tidak berlaku untuk semua sistem berbasis kolom dan itu mengurangi ketersediaan. Pada sistem yang berat sekali / baca-sering, gunakan MongoDB. Pertimbangkan juga jika Anda selalu berencana untuk membaca seluruh struktur objek. Sistem berbasis dokumen dirancang untuk mengembalikan seluruh dokumen saat Anda mendapatkannya, dan tidak terlalu kuat dalam mengembalikan sebagian dari keseluruhan baris.
Sistem berbasis kolom seperti Cassandra jauh lebih baik daripada berbasis dokumen dalam "pembaruan". Anda dapat mengubah nilai kolom tanpa membaca baris yang memuatnya. Penulisan sebenarnya tidak perlu dilakukan di server yang sama, satu baris mungkin terdapat pada beberapa file dari beberapa server. Pada sistem data besar yang berkembang pesat, pilih Cassandra. Pertimbangkan juga jika Anda berencana memiliki potongan data yang sangat besar per kunci, dan tidak perlu memuat semuanya di setiap kueri. Dalam "pilih", Cassandra membiarkan Anda memuat hanya kolom yang Anda butuhkan.
Juga pertimbangkan bahwa Mongo DB ditulis dalam C ++, dan pada rilis mayor kedua, sementara Cassandra perlu dijalankan pada JVM, dan rilis mayor pertamanya hanya dalam kandidat rilis sejak kemarin (tetapi rilis 0.X diserahkan dalam produksi perusahaan besar).
Di sisi lain, desain Cassandra sebagian didasarkan pada Amazon Dynamo, dan itu dibangun pada intinya untuk menjadi solusi Ketersediaan Tinggi, tetapi itu tidak ada hubungannya dengan format berbasis kolom. MongoDB juga berskala, tapi tidak seanggun Cassandra.
sumber
Saya akan mengatakan bahwa perbedaan utama adalah cara masing-masing tipe DB ini menyimpan data secara fisik.
Dengan tipe kolom, data disimpan oleh kolom yang dapat mengaktifkan operasi / kueri agregasi yang efisien pada kolom tertentu.
Dengan jenis dokumen, seluruh dokumen secara logis disimpan di satu tempat dan umumnya diambil secara keseluruhan (tidak ada agregasi yang efisien pada "kolom" / "kolom").
Sedikit membingungkan adalah bahwa "baris" kolom lebar dapat dengan mudah direpresentasikan sebagai dokumen, tetapi, seperti yang disebutkan, mereka disimpan secara berbeda dan dioptimalkan untuk tujuan yang berbeda.
sumber