Saya berencana untuk merancang dan mengatur database untuk menyimpan entri kamus (biasanya kata tunggal) dan artinya dalam bahasa lain. Jadi, misalnya, Daftar Istilah tabel harus memiliki entri dan definisi dan setiap catatan tabel memiliki referensi ke id catatan yang disimpan di Tag
(Setiap entri harus memiliki tag atau kategori).
Karena data saya memiliki struktur, saya pikir menggunakan database SQL (seperti MySQL) bukan ide yang buruk; tetapi orang mengatakan MongoDB jauh lebih baik untuk kinerja.
Di sisi klien, aplikasi harus dapat menyediakan kotak pencarian dengan pelengkapan otomatis yang menggunakan API REST yang disediakan oleh backend. Apakah aman menggunakan MySQL dalam skenario seperti itu? atau haruskah saya menggunakan MongoDB atau ElasticSearch dari solusi lain untuk ini? Ratusan ribu catatan seharusnya disimpan dan diakses dengan cara ini.
Jawaban:
Saya tidak bisa memberi tahu Anda mengapa itu ide yang buruk. Saya dapat memberi tahu Anda banyak alasan mengapa database relasional adalah ide yang baik .
Ingat bahwa tidak semua orang berkonsultasi dengan kamus untuk definisi. Lebih sering daripada tidak, kamus digunakan untuk menemukan ejaan yang benar. Ini berarti Anda tidak hanya menemukan jarum di tumpukan jerami , Anda sedang mencari tumpukan jerami untuk jarum yang mirip dengan yang dijelaskan oleh pengguna (jika saya dapat menggunakan idiom).
Anda tidak akan hanya melakukan pencarian kunci primer. Anda akan melakukan pencarian kata kunci
Kata-kata dapat dihubungkan, baik dalam arti atau ejaan ( baca, baca , merah dan buluh )
Setiap kali Anda melihat kata "terkait" pikirkan "Database Relasional"
Jika Anda membutuhkan kecepatan, Anda perlu caching di atas database relasional Anda, bukan model data relasional yang rusak
Basis data yang dinormalkan dengan benar mempercepat pencarian kunci utama dan pencarian karena hanya ada sedikit bit yang harus disaring.
Orang-orang yang mengatakan database yang dinormalisasi lebih lambat mengacu pada 0,1% kasus di mana ini benar. Dalam 99,9% kasus lainnya mereka belum benar - benar bekerja dengan database yang benar-benar normal untuk melihat kinerja secara langsung, jadi abaikan saja. Saya telah bekerja dengan database yang dinormalisasi. Suka. Tidak mau kembali. Dan saya bukan orang basis data. Saya seorang pria C # / JavaScript / HTML / Ruby.
Kata-kata memiliki asal. Bahkan, banyak kata dalam bahasa yang sama dapat memiliki asal yang sama, yang merupakan kata lain dalam bahasa yang berbeda. Misalnya, resume (hal yang kami unggah ke situs web perekrut sehingga kami bisa mendapatkan panggilan telepon dan email tanpa henti selama 7 tahun ke depan) adalah kata dalam bahasa Prancis.
Kamus juga mendefinisikan jenis kata apa itu (kata benda, kata kerja, kata sifat, dll). Ini bukan hanya sepotong teks: "kata benda" itu memiliki makna juga. Ditambah dengan database relasional Anda dapat mengatakan hal-hal seperti "berikan saya semua kata benda untuk bahasa Inggris" dan karena database yang dinormalisasi akan menggunakan kunci asing, dan kunci asing memiliki (atau seharusnya memiliki) indeks, pencarian akan menjadi mudah.
Pikirkan bagaimana kata-kata diucapkan. Khususnya dalam bahasa Inggris, banyak kata memiliki pengucapan yang sama (lihat contoh saya di atas dengan baca dan alang-alang, atau baca dan merah).
Pelafalan suatu kata adalah kata itu sendiri. Database relasional akan memungkinkan Anda untuk menggunakan kunci asing untuk pengucapan apa pun. Informasi itu tidak akan diduplikasi dalam basis data relasional. Itu digandakan seperti orang gila di database no-SQL.
Dan sekarang mari kita bicara tentang versi kata jamak dan tunggal. :) Pikirkan "perahu" dan "perahu". Atau fakta bahwa sebuah kata "tunggal" atau "jamak".
Oh! Dan sekarang mari kita bicara tentang past tense, present tense, future tense dan present participle (jujur, saya tidak tahu apa itu "present participle". Saya pikir itu ada hubungannya dengan kata-kata yang berakhiran "ing" di Bahasa Inggris atau sesuatu).
Cari "lari" dan Anda akan melihat bentuk lainnya: berlari, berlari, berlari
Bahkan, "tegang" adalah hubungan lain itu sendiri.
Bahasa Inggris tidak banyak melakukan hal ini, tetapi gender adalah hal lain yang mendefinisikan sebuah kata. Bahasa seperti Spanyol memiliki akhiran yang menentukan apakah subjek dari kata benda adalah pria atau wanita. Jika Anda perlu mengisi bagian yang kosong untuk kalimat, gender sangat penting dalam banyak bahasa.
Karena Anda tidak selalu dapat bergantung pada konvensi bahasa untuk menentukan jenis kelamin (dalam bahasa Spanyol, kata-kata yang berakhiran "o" adalah maskulin / laki-laki, tetapi itu tidak berlaku untuk semua kata), Anda memerlukan nilai identifikasi: Pria atau Wanita. Ini adalah hubungan lain yang ditangani oleh database yang dinormalisasi dengan anggun bahkan pada jutaan catatan.
Dengan semua aturan yang bengkok dan hubungan antara kata-kata, dan bahkan bahasa yang berbeda, sulit bagi saya untuk membayangkan penyimpanan data ini sebagai "penyimpanan dokumen" seperti yang disediakan oleh solusi no-SQL. Ada begitu banyak dan begitu banyak variasi hubungan antara kata dan komponennya sehingga database relasional adalah satu-satunya solusi yang masuk akal.
sumber
Jika Anda menggunakan kunci-nilai toko (yang menawarkan Anda model pemrograman yang lebih miskin) dan ternyata Anda membutuhkan lebih banyak struktur (dalam kasus Anda, katakanlah, tambahkan bahasa ketiga), atau Anda perlu melakukan kueri yang lebih kompleks yang melibatkan gabungan , Anda akan menghabiskan banyak waktu mengatur ulang kunci Anda, mendenormalkan data Anda, dan / atau mengulang semua data untuk menemukan apa yang Anda butuhkan.
Jika Anda mulai dengan database relasional, Anda dapat bekerja melalui desain, kode aplikasi Anda, dan mencobanya lebih berkonsentrasi pada model data alami untuk aplikasi Anda, daripada memilihnya menjadi bentuk nilai kunci.
Setelah aplikasi selesai, Anda dapat bekerja pada kinerja, dengan mengukur berbagai opsi. Ada beberapa trik kinerja yang harus dilakukan dalam SQL sebelum perlu beralih teknologi. Anda akan belajar banyak tentang aplikasi Anda dan akan berada dalam posisi yang jauh lebih baik untuk memutuskan apakah hubungan merugikan Anda dan apakah nilai kunci akan bekerja untuk model data Anda.
Jika ternyata nilai kunci persis seperti yang dibutuhkan aplikasi Anda, Anda dapat beralih tanpa membuang-buang investasi yang signifikan dalam model relasional, sedangkan sebaliknya Anda mungkin berakhir dengan membuang-buang waktu membuat model nilai kunci melakukan hal-hal yang sepele dalam model relasional.
Pertimbangkan basis data relasional sebagai akselerator untuk membuat aplikasi Anda dirancang, ditulis, dan dijalankan, dalam menghadapi persyaratan yang terus berubah saat Anda mempelajari lebih lanjut tentang domain dan pengguna Anda.
Ketika Anda memiliki jutaan pengguna, Anda hampir pasti perlu memperbaiki desain, walaupun Anda telah memilih nilai kunci untuk memulainya.
sumber
Untuk database sekecil ini, mungkin tidak akan membuat banyak perbedaan untuk kinerja. RDBMS standar bukan ide yang buruk di sini karena mungkin, seharusnya ada lebih banyak membaca daripada menulis entri yang diberikan. Performa sepertinya tidak menjadi pendorong utama untuk ini. Caching di lapisan aplikasi juga mengurangi kekhawatiran tersebut.
Pertimbangan lainnya adalah replikasi dan ketahanan. Database relasional cenderung dirancang berdasarkan satu instance. Anda harus membaca teorema CAP dan mempertimbangkan apa yang paling penting bagi Anda.
sumber
Basis data NoSQL ini selalu terdengar seperti ide yang bagus sejak awal, tetapi Anda akan dijamin akan mengalami masalah ketika Anda mulai berurusan dengan kasus tepi (misalnya, di mana kata kunci harus dilihat dengan melihat nilainya (atau bagian dari) misalnya.
Ini akan menjadi pilihan yang lebih aman untuk pergi dengan database relasional pada awalnya dan kemudian tidak normal lagi. MySQL mengagumkan untuk tujuan semacam ini (database relasional sederhana dengan pencarian berbasis teks), tidak ada terlalu banyak kasus penggunaan di mana Anda akan merasa kesulitan dengan data semacam ini. Pastikan indeks Anda sudah diatur dengan benar dan Anda akan menemukannya akan bekerja pada tingkat yang sebanding (atau lebih baik ketika melakukan pencarian teks) ke database NoSQL, dan itu akan memberi Anda fleksibilitas untuk memodifikasi logika aplikasi Anda tanpa menjadi terikat pada struktur data yang konkret.
Ketika Anda menemukan penggunaan data yang paling umum (dan jika Anda merasa itu tidak memenuhi kebutuhan kinerja Anda), Anda kemudian dapat melanjutkan untuk menormalkan data dengan mengeluarkan ke format yang dapat dimasukkan ke (dan diambil dari) skema NoSQL.
sumber