Anda tidak pernah dapat berbicara tentang apa yang disebut database "NoSQL" tanpa membawa teorema CAP (Konsistensi, Ketersediaan, Partisi: pilih dua). Jika Anda harus memilih mengatakan, antara MongoDB (Partisi, Konsistensi) dan CouchDB (Ketersediaan, Partisi), yang pertama Anda perlu pikirkan adalah "Apakah saya perlu data yang benar atau saya perlu akses sepanjang waktu?".
Database baru itu dibuat untuk dipartisi. Tetapi bagaimana jika saya tidak melakukannya ? Bagaimana jika saya pikir cukup keren untuk memiliki Kunci / Nilai, Kolom, Dokumen, basis data apa pun alih-alih yang relasional, dan hanya membuat satu contoh server dan tidak pernah membuangnya? Dalam hal itu, bukankah saya akan memiliki ketersediaan dan konsistensi? MongoDB tidak perlu mereplikasi apa pun, jadi itu akan tersedia. Dan CouchDB hanya akan memiliki satu sumber data, jadi itu akan sangat konsisten.
Jadi itu berarti bahwa, dalam hal ini, MongoDB dan CouchDB akan memiliki sedikit perbedaan dalam hal use case? Yah, kecuali tentu saja kinerja, API, dan al, tapi itu akan lebih seperti memilih antara PostgreSQL dan MySQL daripada memiliki dua set persyaratan yang berbeda secara fundamental.
Apakah saya di sini? Bisakah saya mengubah database AP atau CP menjadi AC dengan tidak membuat lebih dari satu instance? Atau ada sesuatu yang saya lewatkan?
Mari kita ajukan pertanyaan secara terbalik. Bagaimana jika saya mengambil basis data relasional, katakanlah MySQL, dan letakkan di konfigurasi master / slave. Saya tidak menggunakan transaksi ACID Jika saya meminta agar setiap tulisan segera disinkronkan ke slave, bukankah itu membuatnya menjadi basis data CP? Dan bagaimana jika saya menyinkronkannya beberapa interval yang telah ditentukan, dan tidak masalah jika klien membaca data basi dari seorang budak. Bukankah itu membuatnya menjadi database AP? Bukankah itu berarti bahwa jika saya melepaskan kepatuhan ACID saya masih dapat menggunakan model hubungan untuk database yang dipartisi?
Intinya: apakah skalabilitas tentang apa yang Anda siap untuk menyerah dalam teorema CAP, lebih dari model data yang mendasarinya? Apakah memiliki Kolom, Dokumen, Nilai Utama, apa pun yang memberi dorongan pada skalabilitas atas model relasional? Bisakah kita merancang basis data relasional yang dirancang dari bawah ke atas untuk toleransi partisi? (Mungkin sudah ada). Bisakah kita membuat ACID database NoSQL sesuai?
Maaf, ini banyak pertanyaan, tetapi saya telah membaca banyak tentang basis data NoSQL baru-baru ini dan bagi saya manfaat terbesar dari penggunaannya adalah mereka lebih sesuai dengan "bentuk" data Anda, daripada hanya partisi, CAP dan menyerah kepatuhan ACID. Bagaimanapun, tidak semua orang memiliki begitu banyak data sehingga mereka perlu mempartisi itu. Apakah ada manfaat kinerja / skalabilitas untuk tidak menggunakan model relasional sebelum saya bahkan berpikir tentang mempartisi data saya?