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?
database
couchdb
relational
non-relational-database
Bartosz Blimke
sumber
sumber
Jawaban:
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 .
sumber
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?
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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
sumber