Perbedaan antara basis data berbasis dokumen dan basis kunci / nilai?

98

Saya tahu ada tiga jenis database non-sql yang berbeda dan populer.

  • Kunci / Nilai: Redis, Kabinet Tokyo, Memcached
  • KolomKeluarga: Cassandra, HBase
  • Dokumen: MongoDB, CouchDB

Saya telah membaca blog panjang tentang itu tanpa memahami begitu banyak.

Saya tahu database relasional dan terbiasa dengan database berbasis dokumen seperti MongoDB / CouchDB.

Bisakah seseorang memberi tahu saya apa perbedaan utama antara ini dan 2 yang pertama dalam daftar?

never_had_a_name
sumber
4
ada lima: (1) Key-Value Stores: Oracle Coherence, Redis, Kyoto Cabinet (2) BigTable-style Database: Apache HBase, Apache Cassandra (3) Document Database: MongoDB, CouchDB (4) Full Text Search Engine: Apache Lucene, Apache Solr (5) Graph Database: neo4j, FlockDB, lihat nosql-data-modelling-
engineering

Jawaban:

75

Perbedaan utama adalah model data dan kemampuan kueri.

Penyimpanan nilai kunci

Jenis pertama sangat sederhana dan mungkin tidak membutuhkan penjelasan lebih lanjut.

Model data: lebih dari penyimpanan nilai kunci

Meskipun ada beberapa perdebatan tentang nama yang benar untuk database seperti Cassandra, saya ingin menyebutnya penyimpanan kolom-keluarga . Meskipun pasangan nilai-kunci adalah bagian penting dari Cassandra, tidak hanya itu saja. Ini memungkinkan Anda untuk menyarangkan pasangan nilai kunci, sehingga sebuah kunci dapat merujuk ke beberapa pasangan sub-nilai kunci.

Namun, Anda tidak dapat menumpuk pasangan nilai kunci tanpa batas. Anda dibatasi pada tiga tingkat (kelompok kolom) atau empat tingkat bersarang (kelompok super-kolom). Dalam hal keluarga kolom istilah tidak membunyikan bel, lihat WTF adalah artikel SuperColumn , itu penjelasan yang baik tentang model data Cassandra.

Database dokumen , seperti CouchDB dan MongoDB menyimpan seluruh dokumen dalam bentuk objek JSON . Anda dapat menganggap objek ini sebagai pasangan nilai kunci bertingkat. Tidak seperti Cassandra, Anda dapat menumpuk pasangan nilai kunci sebanyak yang Anda inginkan. JSON juga mendukung array dan memahami tipe data yang berbeda, seperti string, angka, dan nilai boolean.

Menanyakan

Saya percaya penyimpanan kolom-keluarga hanya dapat ditanyai dengan kunci, atau dengan menulis fungsi pengurangan peta. Anda tidak dapat meminta nilai seperti yang Anda lakukan dalam database SQL. Jika aplikasi Anda membutuhkan kueri yang lebih kompleks, aplikasi Anda harus membuat dan memelihara indeks untuk mengakses data yang diinginkan.

Database dokumen mendukung kueri dengan kunci dan fungsi pengurangan peta juga, tetapi juga memungkinkan Anda untuk melakukan kueri dasar berdasarkan nilai, seperti "Beri saya semua pengguna dengan lebih dari 10 kiriman". Database dokumen lebih fleksibel dengan cara ini.

Niels van der Rest
sumber
2
Jadi penyimpanan nilai kunci seperti redit tidak memungkinkan Anda untuk menyimpan kunci bertingkat: nilai? Dan dari uraian Anda, kemudian menyimpan seluruh database (dari RDBMS) ke Cassandra kedengarannya tidak terlalu pintar karena tidak memungkinkan permintaan yang fleksibel dan memiliki kedalaman bersarang yang terbatas, bukan?
never_had_a_name
7
@ajsie: Benar, penyimpanan nilai kunci tidak mendukung pasangan nilai kunci bertingkat. Kebanyakan dari mereka mendukung nilai-nilai khusus, seperti daftar. Cassandra sangat berbeda dari RDBMS, karena keduanya dirancang untuk memecahkan masalah yang sangat berbeda. Sistem RDBMS ditujukan untuk data relasional yang membutuhkan kueri kompleks, sedangkan Cassandra ditujukan untuk memproses data non-relasional dalam jumlah besar. Tentu saja mungkin untuk memindahkan database RDBMS ke Cassandra, tapi tidak terlalu pintar. Masing-masing memiliki kegunaannya sendiri.
Niels van der Rest
Jadi, apakah setiap database dokumen juga merupakan kunci, penyimpan nilai di mana nilainya hanyalah JSON seperti {value: base64 (val)}?
GroovyDotCom
@GroovyDotCom: Ya, Anda dapat menggunakan database dokumen untuk menyimpan objek kunci / nilai sederhana.
Niels van der Rest
16

Ayende telah memberikan penjelasan yang bagus tentang perbedaan antara Key-Value dan Document database:

Database dokumen, pada intinya, merupakan penyimpanan kunci / nilai dengan satu pengecualian utama. Alih-alih hanya menyimpan gumpalan apa pun di dalamnya, db dokumen mengharuskan data disimpan dalam format yang dapat dipahami database (mis. JSON, XML dll). Di kebanyakan doc dbs, itu berarti kita sekarang dapat mengizinkan query pada data dokumen.

Ashraf Alam
sumber