MongoDB vs. MySQL: Bagaimana memilih

Selama gelembung dot-com pada 1990-an, satu tumpukan perangkat lunak yang umum untuk aplikasi web adalah LAMP, yang aslinya adalah singkatan dari Linux (OS), Apache (server web), MySQL (database relasional), dan PHP (bahasa pemrograman server). MySQL adalah database yang disukai terutama karena bersifat open source gratis dan memiliki performa baca yang baik, yang cocok dengan aplikasi "Web 2.0" yang secara dinamis menghasilkan situs dari database.

Kemudian tumpukan MEAN, yang merupakan singkatan dari MongoDB (database dokumen), Express (server web), AngularJS (kerangka kerja front-end), dan Node.js (runtime JavaScript back-end), menjadi terkenal. Tumpukan MEAN menarik, di antara alasan lain, karena satu-satunya bahasa yang perlu Anda ketahui adalah JavaScript. Itu juga membutuhkan lebih sedikit RAM daripada tumpukan LAMP yang setara.

Apa itu MySQL / MariaDB?

Monty Widenius dan David Axmark dari MySQL AB awalnya mengembangkan MySQL mulai tahun 1994. Kata "Saya" dalam nama produk mengacu pada anak perempuan Widenius, bukan kata dalam bahasa Inggris "saya". MySQL dirancang agar kompatibel dengan API dengan mSQL (alias Mini SQL), dengan tambahan lapisan kueri SQL dan lisensi sumber terbuka (sebenarnya lisensi ganda, baik berpemilik maupun GPL). Rilis MySQL publik dimulai pada akhir tahun 1996, dan berlanjut setiap satu atau dua tahun. MySQL saat ini adalah database relasional paling populer.

Sun Microsystems mengakuisisi MySQL AB pada tahun 2008 (seharga $ 1 miliar), dan Oracle mengakuisisi Sun pada tahun 2010. Widenius mengubah MySQL 5.5 menjadi MariaDB sesaat sebelum akuisisi Oracle, di tengah kekhawatiran luas tentang niat Oracle untuk MySQL. MariaDB telah berusaha keras untuk menjaga kompatibilitas dengan versi Oracle MySQL.

MySQL dimulai sebagai database relasional yang cukup low-end dibandingkan dengan database relasional komersial yang lebih mumpuni seperti Oracle Database, IBM DB / 2, dan Microsoft SQL Server, meskipun cukup bagus untuk menjadi penyimpanan pendukung untuk situs web dinamis. Selama bertahun-tahun ia telah menambahkan sebagian besar fitur yang Anda harapkan dari database relasional, termasuk transaksi, batasan integritas referensial, prosedur tersimpan, kursor, pengindeksan dan pencarian teks lengkap, pengindeksan dan pencarian geografis, dan pengelompokan.

MySQL biasanya masih digunakan dalam penerapan kecil hingga menengah, meskipun sekarang sudah mendukung fitur "database besar" seperti penerapan master-slave, digunakan dengan Memcache, dan sharding horizontal. Penskalaan MySQL ke beberapa slave meningkatkan kinerja baca, tetapi hanya master yang menerima permintaan tulis.

AWS menawarkan MySQL sebagai layanan dalam dua bentuk, Amazon RDS dan Amazon Aurora. Yang terakhir memiliki kinerja yang jauh lebih tinggi, dapat menangani terabyte data, memiliki jeda waktu yang lebih rendah untuk memperbarui replika, dan secara langsung bersaing dengan Oracle Database dan SQL Server.

Apa itu MongoDB?

MongoDB adalah database dokumen operasional yang sangat skalabel dan tersedia dalam versi open source dan komersial perusahaan, dan dapat dijalankan di tempat atau sebagai layanan cloud terkelola. Layanan cloud terkelola disebut MongoDB Atlas.

MongoDB adalah database NoSQL yang paling populer. Model data dokumennya memberi pengembang fleksibilitas tinggi, sementara arsitektur terdistribusi memungkinkan skalabilitas yang hebat. Akibatnya, MongoDB sering dipilih untuk aplikasi yang harus mengelola volume data yang besar, yang mendapatkan keuntungan dari skalabilitas horizontal, dan yang menangani struktur data yang tidak sesuai dengan model relasional.

MongoDB adalah toko berbasis dokumen yang juga memiliki penyimpanan berbasis grafik yang diimplementasikan di atasnya. MongoDB sebenarnya tidak menyimpan JSON: ia menyimpan BSON (Binary JSON), yang memperluas representasi JSON (string) untuk menyertakan tipe tambahan seperti int, long, date, floating point, decimal128, dan koordinat geospasial.

MongoDB dapat menghasilkan grafik multi-modal, geospasial, B-tree, dan indeks teks lengkap pada satu salinan data, menggunakan jenis data untuk menghasilkan jenis indeks yang benar. MongoDB memungkinkan Anda membuat indeks pada bidang dokumen apa pun. MongoDB 4 memiliki transaksi multi-dokumen, yang berarti Anda masih bisa mendapatkan properti ACID meskipun Anda harus menormalkan desain data Anda.

Secara default, MongoDB menggunakan skema dinamis, terkadang disebut tanpa skema. Dokumen dalam satu koleksi tidak perlu memiliki kumpulan bidang yang sama, dan tipe data untuk bidang bisa berbeda di seluruh dokumen dalam satu koleksi. Anda dapat mengubah struktur dokumen dengan skema dinamis kapan saja.

Namun, tata kelola skema tersedia. Mulai MongoDB 3.6, MongoDB mendukung validasi skema JSON, yang dapat Anda aktifkan di ekspresi validator Anda.

Tumpukan LAMP dan MEAN

Ada banyak variasi pada tumpukan LAMP dan MEAN. Alih-alih OS Linux, misalnya, Anda bisa berjalan di Windows (WAMP) atau MacOS (MAMP). Alih-alih server web Apache di Windows, Anda dapat menjalankan IIS (WIMP).

Alih-alih database relasional MySQL di tumpukan LAMP, Anda dapat menjalankan PostgreSQL atau SQL Server. Jika Anda membutuhkan distribusi global, Anda dapat menjalankan CockroachDB atau Google Cloud Spanner. Alih-alih bahasa PHP, Anda dapat membuat kode di Perl atau Python. Jika Anda ingin membuat kode di Java atau C #, ada kelompok tumpukan terpisah yang perlu dipertimbangkan.

Alih-alih database dokumen MongoDB di tumpukan MEAN, Anda dapat menjalankan Couchbase atau Azure Cosmos DB untuk distribusi global yang lebih baik. Alih-alih Express, Anda dapat menggunakan salah satu dari selusin kerangka kerja server web Node.js. Alih-alih kerangka front-end AngularJS, Anda dapat menjalankan Angular 2 atau React.

Bagaimana memilih database untuk aplikasi Anda

Pertanyaan paling penting untuk ditanyakan saat Anda memilih database adalah:

  • Berapa banyak data yang Anda harapkan untuk disimpan saat aplikasi sudah matang?
  • Berapa banyak pengguna yang Anda harapkan untuk menangani secara bersamaan pada beban puncak?
  • Ketersediaan, skalabilitas, latensi, throughput, dan konsistensi data apa yang dibutuhkan aplikasi Anda?
  • Seberapa sering skema database Anda berubah?
  • Bagaimana distribusi geografis dari populasi pengguna Anda?
  • Apa "bentuk" alami dari data Anda?
  • Apakah aplikasi Anda memerlukan pemrosesan transaksi online (OLTP), kueri analitik (OLAP), atau keduanya?
  • Berapa rasio pembacaan dan penulisan yang Anda harapkan dalam produksi?
  • Apakah Anda memerlukan kueri geografis dan / atau kueri teks lengkap?
  • Apa bahasa pemrograman pilihan Anda?
  • Apakah Anda memiliki anggaran? Jika ya, apakah itu akan mencakup lisensi dan kontrak dukungan?

Beberapa dari pertanyaan ini akan cenderung mempersempit pemilihan database, tetapi kami memiliki lebih banyak pilihan yang tersedia daripada saat tumpukan LAMP dirumuskan. Jika Anda membangun aplikasi yang harus tersedia 99,999 persen dari waktu ke pengguna di seluruh dunia dengan konsistensi yang kuat, hanya beberapa database yang sesuai dengan tagihan. Jika aplikasi Anda akan digunakan di satu negara dari pukul 9 pagi hingga 6 sore pada hari kerja dan dapat mentolerir konsistensi akhir, hampir semua basis data akan berfungsi, meskipun beberapa akan lebih mudah bagi pengembang dan operator dan beberapa akan memberikan kinerja yang lebih baik untuk skenario penggunaan utama Anda .

Sementara tumpukan LAMP dan MEAN merupakan solusi yang baik untuk aplikasi web pada satu waktu, tidak ada yang optimal sekarang. Daripada mengadopsi satu atau yang lain secara membabi buta, Anda harus memikirkan kasus penggunaan Anda dan menemukan arsitektur yang akan melayani aplikasi Anda di masa mendatang.

SQL atau NoSQL?

Kapan Anda menginginkan database relasional seperti MySQL untuk aplikasi baru? Selain dukungan yang jelas untuk SQL standar, database relasional memaksa data ke dalam skema tabel dengan pengetikan kolom yang konsisten dan kuat, dan membantu Anda menghindari duplikasi data selama Anda memanfaatkan normalisasi.

Jika Anda perlu menghindari data yang hilang, Anda bisa mendeklarasikan bidang NOT NULLsaat Anda membuat atau mengubah tabel. Jika Anda memerlukan kueri geografis seperti yang ditentukan oleh Open Geospatial Consortium, sebagian besar database relasional menyediakan implementasi yang kuat. Dan jika Anda memerlukan pencarian teks lengkap, kebanyakan database relasional memungkinkan Anda untuk menentukan indeks daftar terbalik pada bidang teks, yang disebut FULLTEXTindeks di MySQL.

Di sisi lain, jika Anda juga memerlukan dokumen bentuk bebas sesekali, MySQL dan banyak database relasional lainnya juga mendukung data JSON seperti yang didefinisikan oleh RFC 7159. Dan jika Anda juga ingin menggunakan dokumen XML dan XPath atau XSLT, sebagian besar database relasional menyediakan kemampuan itu.

Kapan Anda menginginkan database dokumen seperti MongoDB? Jika kasus penggunaan utama Anda perlu mengizinkan data bentuk bebas, bidang yang mengubah jenis dari dokumen ke dokumen, skema yang berubah seiring waktu, atau dokumen bersarang, maka database NoSQL akan memenuhi persyaratan. Selain itu, jika aplikasi Anda ditulis dalam JavaScript, maka format database dokumen JSON akan sesuai.