Mengapa saya harus menggunakan basis data berbasis dokumen alih-alih basis data relasional?

188

Mengapa saya harus menggunakan basis data berbasis dokumen seperti CouchDB alih-alih menggunakan basis data relasional. Apakah ada jenis aplikasi atau domain di mana basis data berbasis dokumen lebih cocok daripada basis data relasional?

Bartosz Blimke
sumber
Mungkin basis data berorientasi dokumen mungkin serupa dalam beberapa hal dengan basis data "entitas-atribut-nilai" (EAV).
ChrisW

Jawaban:

167

Mungkin Anda seharusnya tidak :-)

Jawaban kedua yang paling jelas adalah Anda harus menggunakannya jika data Anda tidak berhubungan. Ini biasanya memanifestasikan dirinya dengan tidak memiliki cara mudah untuk menggambarkan data Anda sebagai kumpulan kolom. Contoh yang baik adalah database tempat Anda menyimpan dokumen kertas, misalnya dengan memindai surat kantor. Data adalah PDF yang dipindai dan Anda memiliki beberapa data meta yang selalu ada (dipindai pada, dipindai oleh, jenis dokumen) dan banyak bidang metadata yang mungkin ada kapan saja (nomor pelanggan, nomor pemasok, nomor pesanan, simpan di file sampai, Teks lengkap OCR, dll). Biasanya Anda tidak tahu sebelumnya bidang metadata mana yang akan Anda tambahkan dalam dua tahun ke depan. Hal-hal seperti CouchDB bekerja jauh lebih baik untuk data seperti itu daripada database relasional.

Saya juga secara pribadi menyukai kenyataan bahwa saya tidak memerlukan pustaka klien untuk CouchDB kecuali klien HTTP, yang saat ini termasuk dalam hampir setiap bahasa pemrograman.

Jawaban yang mungkin paling tidak jelas: Jika Anda tidak merasa sakit menggunakan RDBMS, tetaplah menggunakannya. Jika Anda selalu harus bekerja di sekitar RDBMS Anda untuk menyelesaikan pekerjaan Anda, database berorientasi dokumen mungkin layak untuk dilihat.

Untuk daftar yang lebih lengkap, periksa posting Richard Jones ini .

maks
sumber
1
Saya belum pernah melihat skema database dalam dua tahun seperti skema asli yang kami mulai dengan ... jadi semuanya sama (yang bukan ...), Anda harus selalu menggunakan database schemaless = yang berorientasi pada dokumen; yang menurut saya adalah nama yang agak menyesatkan ...
ᆼ ᆺ ᆼ
3
@ int3 Jika Anda tidak dapat mendeskripsikan data Anda sebagai kumpulan kolom bagaimana Anda seharusnya menulis kueri cerdas pada data tersebut?
Clay Smith
46

CouchDB (dari situs web mereka )

  • Server basis data dokumen, dapat diakses melalui API JSON yang tenang. Secara umum, database relasional tidak hanya diakses melalui layanan REST, tetapi membutuhkan SQL API yang jauh lebih kompleks. Seringkali API ini (JDBC, ODBC, dll) cukup kompleks. REST cukup sederhana.

  • Ad-hoc dan bebas skema dengan ruang alamat datar. Database relasional memiliki skema yang kompleks dan tetap. Anda mendefinisikan tabel, kolom, indeks, urutan, tampilan, dan hal lainnya. Sofa tidak memerlukan tingkat perencanaan canggih yang rumit, mahal, dan rapuh ini.

  • Didistribusikan, menampilkan replikasi tambahan yang kuat dan bertahap dengan deteksi dan manajemen konflik dua arah. Beberapa produk komersial SQL menawarkan ini. Karena SQL API dan skema tetap, ini rumit, sulit dan mahal. Untuk Couch, tampaknya sederhana dan murah.

  • Query-mampu dan index-mampu, menampilkan mesin pelaporan berorientasi tabel yang menggunakan Javascript sebagai bahasa query. Begitu pula SQL dan basis data relasional. Tidak ada yang baru di sini.

Begitu. Kenapa CouchDB?

  • REST lebih sederhana dari JDBC atau ODBC.
  • Tidak ada Skema yang lebih sederhana dari Skema.
  • Didistribusikan dengan cara yang tampak sederhana dan murah.
S.Lott
sumber
12
Meskipun saya penggemar berat database NoSQL, klaim pertama (REST lebih sederhana dari JDBC) sangat meragukan.
ᆼ ᆺ ᆼ
2
Protokol REST tampaknya cukup sederhana bagi saya, karena itu hanya HTTP: stateless, beberapa metode, dll., Dll. Mungkin JDBC (di bawah tenda) sederhana; itu tampaknya tidak lebih sederhana, hanya didasarkan pada menjadi negara.
S.Lott
5
@ S.Lott Bukankah seharusnya jawabannya lebih "generik" alih-alih diarahkan ke CouchDb saja?
Pacerier
"perencanaan maju yang rapuh" vs apa? Dalam pengalaman saya, alternatifnya adalah tanpa perencanaan yang mengarah pada struktur data spageti yang dimodifikasi dengan iseng.
Tejay Cardon
26

Untuk menyimpan dan melayani data server lainnya dengan bodoh.

Dalam beberapa minggu terakhir saya telah bermain dengan aplikasi lifestream yang mengumpulkan umpan saya (lezat, flickr, github, twitter ...) dan menyimpannya di couchdb. Keindahan couchdb adalah memungkinkan saya menyimpan data asli dalam struktur aslinya tanpa overhead. Saya menambahkan bidang 'kelas' ke setiap dokumen, menyimpan server sumber, dan menulis kelas render javascript untuk setiap sumber.

Generalisasi, setiap kali server Anda berkomunikasi dengan server lain, penyimpanan skema-kurang adalah yang terbaik karena Anda tidak memiliki kendali atas skema. Sebagai bonus, couchdb menggunakan protokol asli server dan klien - JSON untuk representasi dan HTTP REST untuk transportasi.

Daonb
sumber
Mengapa tidak menyimpannya dalam file, atau file per feed?
j_random_hacker
6
karena couchdb juga memungkinkan Anda membuat tampilan menarik menggunakan peta / perkecil. Misalnya, saya bisa membuat tampilan berdasarkan sumber data, atau saya bisa menghitung total untuk setiap sumber.
daonb
4
Itu poin yang cemerlang ... jika Anda mengonsumsi data dan tidak memiliki kendali atas skema data masuk - gunakan penyimpanan dokumen.
Joshua Robinson
1
Ini adalah argumen pertama yang sangat meyakinkan yang saya dengar untuk nilai database NoSQL
Caleb McNevin
20

Pengembangan aplikasi yang cepat muncul di pikiran.

Ketika saya terus-menerus mengembangkan skema saya, saya selalu frustrasi karena harus mempertahankan skema di MySQL / SQLite. Meskipun saya belum melakukan terlalu banyak dengan CouchDB, saya suka betapa sederhananya untuk mengembangkan skema selama proses RAD.

Kasus di mana Anda mungkin tidak ingin menggunakan database non-relasional adalah ketika Anda memiliki banyak hubungan banyak-ke-banyak; Saya belum memahami cara membuat fungsi MapReduce yang baik di sekitar hubungan semacam ini, terutama jika Anda perlu memiliki metadata dalam hubungan yang bergabung. Saya tidak yakin, tetapi saya tidak berpikir fungsi CouchDB Map dapat memanggil kueri mereka sendiri pada database, karena itu berpotensi menyebabkan loop tak terbatas.

pixelcort
sumber
1
Poin luar biasa. Datastore dokumen (dan skema lainnya) sangat bagus untuk pengembangan tahap awal yang cepat. Namun, untuk alasan yang sama mereka bagus untuk prototyping tahap awal, mereka bermasalah untuk aplikasi produksi yang kuat.
Tejay Cardon
6

Gunakan basis data berbasis dokumen saat Anda tidak perlu menyimpan data dalam tabel dengan bidang berukuran seragam untuk setiap catatan. Sebagai gantinya, Anda memiliki kebutuhan untuk menyimpan setiap catatan sebagai dokumen yang memiliki karakteristik tertentu. Sejumlah bidang dengan panjang berapa pun dapat ditambahkan secara dinamis ke dokumen kapan saja tanpa perlu "memodifikasi tabel" terlebih dahulu. Fields dalam berbasis dokumen juga dapat berisi beberapa bagian data.

smdelfin
sumber
1

Untuk menguraikan smdelfin: fleksibilitas. Anda dapat menyimpan data dalam struktur apa pun (tidak terstruktur dan semuanya) dan setiap dokumen bisa sangat berbeda. CouchDB secara khusus berguna karena dengan indeks "view" mereka, Anda dapat memfilter dokumen tertentu dan meminta hanya tampilan itu ketika Anda menginginkan subset dari database Anda.

Titik kemenangan terbesar saya dari basis data dokumen yang menyimpan data dalam format JSON: ini adalah format asli untuk JavaScript. Oleh karena itu, aplikasi web JavaScript bekerja sangat baik dengan CouchDB. Baru-baru ini saya membuat aplikasi web yang menggunakan CouchDB dan sangat cepat sementara juga mampu menangani struktur data yang terus berubah.

MitchB
sumber
0

Basis data berbasis dokumen memiliki keuntungan besar dibandingkan basis data relasional karena mereka tidak memerlukan pendefinisian skema di muka - sebelum dapat memasukkan data apa pun.

Selain itu, Anda harus menggunakan database dokumen jika data Anda bukan relasional dan tidak dapat disimpan dalam sebuah tabel melainkan kumpulan gambar, atau misalnya artikel surat kabar.

Keuntungan lain adalah kemudahan untuk menggunakan database berbasis dokumen dalam pengembangan web. Untuk perbandingan model basis data NoSQL yang lebih mendalam, periksa sumber ini: https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

pembuktian
sumber