Untuk keperluan diskusi, mari pertimbangkan skenario FourSquare.
Skenario
Entitas:
- Pengguna
- Tempat
Hubungan:
- Checkins: pengguna <-> tempat, banyak ke banyak
- Teman: pengguna <-> pengguna, banyak ke banyak
Desain Basis Data
Ini kemungkinan besar akan memiliki kesalahan, harap tunjukkan.
RDBMS
Tabel:
- Pengguna
- Tempat
- Checkins (persimpangan)
- Teman (persimpangan)
Pro:
- CAP: konsistensi, ketersediaan
Cons:
- CAP: toleransi partisi, alias sharding
- skema = struktur tidak fleksibel
- replikasi yang buruk?
Grafik
Benda:
- Pengguna
- Tempat
Tepi:
- Teman: Pengguna <-> Pengguna
- Checkins: Pengguna -> Places
- mengandung cap waktu
Pro:
- CAP: konsistensi, ketersediaan?
- schemaless, objek dan ujungnya mudah berubah
- kueri grafik lintasan, misalnya:
- pengelompokan
- menemukan kelompok teman
- menemukan restoran yang disukai oleh orang yang sama
- ada pertanyaan umum / berguna lainnya?
- pengelompokan
Cons:
- CAP: toleransi partisi?
Dokumen / Objek
3 database terpisah?
- Pengguna
- Daftar teman
- Checkins
- cap waktu
- pengguna
- tempat
- Tempat
Pro:
- CAP: ketersediaan, toleransi partisi
- schemaless, benda yang mudah berubah
Cons:
- CAP: konsistensi
Pertanyaan
Sebagai catatan, mereka akhirnya menggunakan MongoDB. Selain semua tanda tanya di atas:
- Saya tidak yakin bagaimana menerapkan basis data dokumen.
- Bagaimana database dokumen mendapatkan toleransi partisi?
- Untuk mendapatkan checkin pengguna tunggal, saya menganggap operasi akan menguraikan semua checkin dan memfilter metadata untuk nama pengguna (peta + filter). Kinerja parsing 1.000.000+ dokumen untuk setiap pengguna akan sangat buruk. Saya menganggap ini bukan perilaku yang benar?
- Apa pro / kontra lain yang ada?
Jawaban:
Pertanyaan Anda bisa menjadi topik kuliah selama satu semester. Anda perlu memecahnya menjadi potongan-potongan yang bisa dikelola. Karena itu, saya hanya akan membuang beberapa jawaban parsial.
Salah satu hal pertama yang harus dilihat dalam menentukan jenis database yang akan digunakan adalah jenis pertanyaan apa yang akan Anda jalankan dan apakah Anda akan mengetahui semuanya sebelum membuat database. Database SQL memiliki keunggulan kueri yang kuat dan fleksibel di semua data dalam database. Database grafik memiliki kemampuan permintaan yang sangat khusus yang membuatnya terbaik untuk data grafik dan sangat buruk untuk data non-grafik (meskipun database grafik dapat menjadi komponen dalam database SQL). Basis data NoSQL jauh lebih terbatas dalam kemampuannya untuk mengambil dan mengoperasikan data.
Berikutnya adalah bagaimana perasaan Anda tentang properti ACID: Atomicity, Consistency, Isolasi, dan Durability. Basis data SQL memberikan jaminan kuat tentang semua 4. Basis data NoSQL biasanya tidak menjanjikan semua 4, dan cara mereka berangkat adalah di antara perbedaan utama yang membedakan berbagai implementasi basis data NoSQL. Di sisi lain, tidak mungkin untuk menjamin Konsistensi dan Ketersediaan dalam menghadapi Partisi (lihat Thor Brewer's thorem ), jadi tidak ada database SQL yang akan dilakukan jika Anda bersikeras Ketersediaan penuh dalam menghadapi Partisi. Secara pribadi, saya sangat peduli tentang Daya tahan data dalam database, karena saya biasanya bekerja dengan data di mana bahkan kehilangan 0,0001% data tidak dapat diterima, dan kumpulan data cukup kecil sehingga saya tidak perlu khawatir tentang partisi, jadi saya sangat mendukung database SQL.
Pertimbangan lain yang sangat praktis adalah kualitas kode server, ketersediaan administrator database dan programer, kualitas dukungan yang tersedia untuk masalah yang muncul, kualitas dan ketersediaan pustaka antarmuka untuk menghubungkan aplikasi Anda ke database, dan sebagainya. MySQL telah ada selama hampir 2 dekade, memiliki sebagian besar bug bekerja, sangat banyak digunakan dan memiliki dukungan yang baik dan ketersediaan personel yang besar, dan kemungkinan akan didukung selama 10 tahun ke depan. Anda tidak dapat mengatakan hal-hal itu tentang Riak.
Perhatikan bahwa walaupun Google secara praktis menemukan basis data NoSQL sehingga mereka dapat menyimpan versi yang di-cache dan diindeks dari seluruh web, mereka masih menggunakan MySQL untuk beberapa hal.
sumber