Kapan menggunakan database nosql seperti mongodb di mysql?

13

Saya baru mengenal konsep database nosql dan tidak pernah menggunakannya. Berdasarkan apa yang saya baca dan sedikit yang saya mengerti saya masih tidak melihat bagaimana mereka bisa sangat berguna jika Anda tidak dapat membuat referensi antara data, jika tidak ada konsep kunci asing.

Bagaimana cara saya mencontoh permintaan sesuatu yang sederhana seperti 'temukan semua komentar yang diposting oleh pengguna ini', 'temukan semua foto yang dimiliki entitas album' dll.

Apakah sistem nosql menjauh dari model data relasional statis tetapi masih membiarkan Anda melacak referensi tersebut, apakah ada sesuatu yang analog dengan kunci asing yang dapat Anda gunakan dalam kueri?

akomada
sumber

Jawaban:

19

Penggunaan Umum

  • Jika Anda memiliki struktur data yang tidak didefinisikan secara jelas pada saat Anda membuat sistem. Saya cenderung menyimpan pengaturan pengguna di nosql, misalnya. Contoh lain adalah sistem di mana pengguna harus dapat menambahkan bidang saat runtime - sangat menyakitkan di RDBMS dan mudah di NoSQL.

  • Jika struktur model Anda sebagian besar berpusat di sekitar satu atau beberapa objek model dan sebagian besar hubungan sebenarnya adalah objek anak-anak dari objek model utama. Dalam hal ini Anda akan menemukan bahwa Anda akan memiliki sedikit kebutuhan untuk bergabung secara aktual. Saya menemukan bahwa sistem manajemen kontak dapat diimplementasikan dengan cukup baik di nosql misalnya. Seseorang dapat memiliki banyak alamat, telepon, dan email. Alih-alih menempatkan mereka masing-masing ke dalam tabel yang terpisah, mereka semua menjadi bagian dari model yang sama dan Anda memiliki objek satu orang.

  • Jika Anda ingin mendapat manfaat dari pengelompokan data Anda di beberapa server daripada memiliki satu server monolitik, yang biasanya diperlukan oleh RDBMS.

  • Caching. Bahkan jika Anda ingin tetap menggunakan RDBMS sebagai basis data utama Anda, akan berguna untuk menggunakan basis data NoSQL untuk menyimpan hasil kueri atau menyimpan data, seperti penghitung.

  • Menyimpan dokumen. Jika Anda ingin menyimpan dokumen yang koheren, dalam database beberapa database NoSQL (seperti MongoDB) sebenarnya khusus menyimpannya.

Bagaimana dengan bergabung?

Sejujurnya, hal no join juga terdengar menakutkan bagi saya pada awalnya. Tetapi triknya adalah berhenti berpikir dalam SQL. Anda harus benar-benar berpikir dengan objek yang ada dalam memori saat Anda menjalankan aplikasi. Ini harus lebih atau kurang hanya disimpan ke dalam basis data NoSQL karena daerah mereka.

Karena Anda dapat menyimpan grafik objek lengkap Anda, dengan objek anak, sebagian besar kebutuhan untuk bergabung dihilangkan. Dan jika Anda membutuhkannya, Anda harus menggigit peluru dan mengambil kedua objek dan bergabung dalam kode aplikasi Anda.

Untungnya, sebagian besar driver dapat melakukan penggabungan untuk Anda, jika Anda mengatur skema Anda dengan benar.

Untuk bacaan lebih lanjut, saya benar-benar merekomendasikan Martin Fowler .

ced-b
sumber
2

Saya pasti akan menggunakan database seperti itu selama tahap perencanaan proyek (sebelum pengembangan, bahkan sebelum desain) untuk merekam data yang struktur, hubungan, dan karakteristiknya belum diketahui dan harus dianalisis. Saya akan mencoba membuat semuanya sesuai dengan model relasional setelah itu.

Mike Nakis
sumber
2
Apa? ... Kenapa? ...
Robert Harvey
Jadi seseorang dapat, dalam praktiknya, menggunakan model relasi untuk data yang diketahui tidak akan banyak berubah seperti informasi pengguna, dengan nama khas, email dll, dalam contoh mysql. Dan kemudian menggunakannya bersamaan dengan database nosql untuk menangani data tidak terstruktur dan tidak teratur seperti log aktivitas pengguna. Semacam tanggung jawab terpisah. ? Atau apakah Anda menyarankan dengan mulai dengan database nosql dan melakukan migrasi lengkap ke model relasional setelah semuanya diatur?
akomada
Dalam skenario di mana Anda sudah memiliki data sebelum analisis bahkan dimulai, (katakanlah, Anda dipanggil untuk menulis ulang perangkat lunak yang mengontrol pabrik yang ada, di mana sensor sudah memuntahkan data,) Saya akan segera mulai mengambil data dalam database nosql, dan kemudian saya akan mencoba, jika mungkin, untuk memasangnya dalam model relasional. Jika tidak memungkinkan, maka saya akan melanjutkan dengan nosql.
Mike Nakis
0

Dalam beberapa kasus, Anda tidak memerlukan kunci asing. Contohnya:

Temukan semua komentar yang diposting oleh pengguna ini

bisa sesederhana memuat commentsbagian dokumen yang sesuai dengan pengguna. Ini disebut denormalisasi : alih-alih memiliki dua set dengan gabungan, Anda memiliki satu dokumen dan semua yang Anda butuhkan ada di dalam dokumen. Satu permintaan, tanpa bergabung, kinerja lebih baik .

Tetapi dalam beberapa keadaan, ini dapat menyebabkan duplikasi data , jadi menghubungkan dari satu dokumen ke dokumen lain mungkin cocok. Dalam hal ini, Anda mungkin tertarik dengan normalisasi MongoDB, kunci asing dan bergabung , halaman Referensi Database dan terutama fitur DBRefs.

Arseni Mourzenko
sumber