GNU/Linux >> Belajar Linux >  >> Linux

MongoDB vs. MySQL

Pendahuluan

Berbagai macam sistem manajemen basis data (DBMS) yang ditawarkan tidak diragukan lagi merupakan hal yang baik. Namun, itu juga berarti bahwa memilih sistem database yang tepat untuk kebutuhan Anda membutuhkan lebih dari sekadar memilih opsi yang paling populer.

Dari perbedaan model transaksi hingga kualitas dukungan, DBMS hadir dalam berbagai bentuk dan ukuran.

Dalam artikel perbandingan ini, Anda akan membaca tentang perbedaan antara dua solusi DBMS yang populer:MongoDB dan MySQL.

Apa itu MongoDB?

MongoDB adalah sistem manajemen basis data NoSQL lintas platform, seperti Cassandra atau Redis. Namun, tidak seperti sistem tersebut, MongoDB berorientasi pada dokumen. Ini menggunakan dokumen mirip JSON yang disebut file BSON sebagai lokasi penyimpanan dokumennya. Karena file BSON adalah modifikasi dari format JSON, MongoDB sepenuhnya kompatibel dengan Notasi Objek JavaScript.

Fitur penting lainnya dari MongoDB adalah bebas skema. Tidak perlu mendefinisikan struktur tetap selama pembuatan dokumen dan membuatnya lebih mudah untuk mengubah struktur rekaman nanti.

Pengembangan MongoDB dimulai pada 2007, dan pada 2009 menjadi open-source. MongoDB Inc., perusahaan di balik perangkat lunak, menawarkan dukungan komersial untuk sistem tersebut.

Pada saat artikel ini ditulis, rilis terbaru MongoDB adalah 4.4.3 mulai Desember 2020.

Apa itu MySQL?

MySQL adalah sistem manajemen basis data relasional (RDBMS). Ini adalah implementasi open-source dari SQL, Structured Query Language. Database relasional seperti MySQL, Oracle, atau PostgreSQL, serupa karena mereka mengatur data dalam tabel. Tabel ini berisi tipe data terkait yang membantu menyusun data.

MySQL menyimpan data terkait di sejumlah tabel terpisah. Mengkueri dan menghubungkan data dari tabel tersebut difasilitasi oleh operasi JOIN, yang memungkinkan pembuatan tabel sementara dan kumpulan baris menggunakan data dari beberapa tabel.

Oracle adalah perusahaan yang memiliki dan menawarkan dukungan untuk MySQL. Pada saat artikel ini ditulis, rilis stabil terbaru MySQL adalah 5.7.32 mulai Oktober 2020.

MongoDB Vs. MySQL:Ikhtisar Perbandingan

MongoDB dan MySQL adalah dua sistem manajemen basis data yang berbeda secara fundamental. Membandingkan mereka berguna karena mereka adalah perwakilan yang baik dari filosofi manajemen masing-masing. Untuk informasi lebih lanjut, lihat NoSQL Vs. SQL.

Tabel di bawah ini adalah perbandingan langsung dari aspek-aspek penting dari kedua DBMS.

MongoDB MySQL
Jenis basis data NoSQL berorientasi dokumen DBMS Relasional
Bahasa pemrograman C++, C, JavaScript C++, C
Skema Dinamis Statis
Penyimpanan data BSON (format mirip JSON) Tabel (baris dan kolom)
Bahasa kueri MQL (default), tetapi bekerja dengan banyak bahasa SQL
MapReduce Ya Tidak
Konversi basis data Ya Tidak
Analisis kinerja Ya Tidak
Model transaksi DASAR ASAM
Isolasi Tidak Ya
Integritas referensial Tidak Ya
Transaksi kompleks Tidak Ya
Penskalaan Horisontal Vertikal
Lokalitas data Ya Tidak
Sharding otomatis Ya Tidak
Mode replikasi Tuan-Budak Tuan-Budak, Tuan-Tuan

Berikut ini adalah ikhtisar terperinci dari area perbandingan paling signifikan untuk MongoDB dan MySQL.

Struktur Basis Data (Skema)

MongoDB :MongoDB menyimpan data dalam dokumen. Dokumen-dokumen ini memiliki berbagai struktur, tergantung pada kebutuhan database. Sistem menyimpan data terkait bersama-sama untuk memfasilitasi kueri cepat.

Fleksibilitas pendekatan berorientasi dokumen di MongoDB adalah salah satu keuntungan terbesarnya dibandingkan dengan MySQL dan DBMS relasional lainnya. MongoDB tidak memerlukan skema tabel untuk dideklarasikan sebelum mengizinkan input data.

Koleksi dokumen MongoDB dapat menampilkan dokumen dengan kumpulan bidang yang berbeda. Tipe data bidang juga dapat bervariasi di seluruh dokumen. Menambah atau menghapus bidang di dalam dokumen dilakukan hanya dengan memperbarui struktur dokumen. Hal yang sama berlaku untuk mengubah tipe data bidang.

Operasi tulis di MongoDB bersifat atomik pada level dokumen. Ini benar bahkan dalam kasus ketika operasi memengaruhi beberapa dokumen yang disematkan. Operasi penulisan multi-dokumen mempertahankan atomisitas pada tingkat dokumen tetapi tidak atomik itu sendiri.

MongoDB mendukung transaksi multi-dokumen pada kumpulan replika dan kluster sharding.

MySQL :Data di MySQL disimpan dalam tabel, yang dibuat sebelum data apa pun ditambahkan. Setiap tabel database terdiri dari baris dan kolom. Baris mewakili entitas database, dan kolom memberikan informasi tentang entitas.

Skema statis menentukan struktur database dan mengharuskan semua baris memiliki struktur yang sama. MySQL memiliki batas keras 4096 kolom per tabel dan ukuran baris maksimum 65.535 byte.

Skema sistem terdiri dari tabel yang berisi informasi yang diperlukan untuk fungsi server MySQL yang tidak terputus. Informasi ini mencakup tabel kamus data dengan metadata objek database dan tabel sistem operasional lainnya.

Karena kekakuan arsitektur MySQL, pembuatan dan pengelolaan basis data memerlukan banyak perencanaan ke depan untuk mempertahankan kinerja tinggi saat basis data mulai berkembang.

Optimasi Indeks

MongoDB :MongoDB menggunakan indeks untuk pengoptimalan. Tanpa indeks, MongoDB menelusuri setiap dokumen dalam koleksi untuk menemukan kecocokan untuk kueri.

MySQL :Sama seperti MongoDB, MySQL menggunakan indeks untuk mengoptimalkan kueri. Jika tidak ada indeks yang relevan untuk kueri tertentu, MySQL akan menelusuri seluruh tabel.

Penerapan Basis Data

MongoDB :Pengguna dapat menggunakan MySQL secara native di Microsoft Windows, OS X, Linux, dan Solaris. MongoDB juga cocok untuk lingkungan terdistribusi seperti kontainer Docker.

MySQL :MySQL memiliki binari untuk berbagai sistem operasi, seperti Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris, dll. Gambar MySQL Docker yang dikelola secara resmi hanya dibuat untuk platform Linux.

Bahasa Kueri

MongoDB :Mesin MongoDB dapat berinteraksi dengan banyak bahasa pemrograman yang berbeda, tergantung pada preferensi programmer. Namun, di luar kotak, MongoDB menggunakan MQL (Bahasa Kueri MongoDB).

MQL adalah bahasa seperti SQL yang dirancang untuk menanyakan data tidak terstruktur. Kueri di MongoDB berbasis JavaScript.

Misalnya, ini adalah cara membuat koleksi di MongoDB:

db.fruit.insertMany([
   { item: "apple", qty: 2, color: “red”, status: "A" },
   { item: "pear", qty: 5, color: “yellow”, status: "A" },
   { item: "cherry", qty: 4, color: “red”, status: "A" }
]);

Mengkueri koleksi dilakukan menggunakan find perintah:

db.fruit.find( { color: "red" } )

MySQL :Seperti banyak RDBMS, MySQL menggunakan SQL. Contoh sintaks menggunakan data dari contoh MQL di atas.

Pertama, pengguna MySQL harus membuat tabel:

CREATE TABLE IF NOT EXISTS `fruit` (
  `item` varchar(200) NOT NULL,
  `qty` int(3) unsigned NOT NULL,
  `color` varchar(200) NOT NULL,
  `status` varchar(200) NOT NULL,
  PRIMARY KEY (`qty`)
) DEFAULT CHARSET=utf8;

Selanjutnya, tabel diisi dengan data:

INSERT INTO `fruit` (`item`, `qty`, `color`, `status`) VALUES
  ('apple', '2', 'red', 'A'),
  ('pear', '5', 'yellow', 'A'),
  ('cherry', '4', 'red', 'A');

Membuat tampilan untuk memfilter data:

CREATE VIEW red_fruit AS SELECT item FROM fruit WHERE color = 'red';

Setelah skema ada, kueri tabel dilakukan menggunakan SELECT pernyataan:

SELECT * FROM red_fruit;

Replikasi dan Pengelompokan Data

MongoDB :Tujuan dari replikasi data adalah untuk menawarkan kelangsungan bisnis dan ketersediaan data. MongoDB menyimpan banyak replika data di server yang terisolasi. Replikasi ini membantu mencegah kehilangan data karena keadaan tak terduga seperti server mogok, listrik padam, dll.

Kumpulan replika adalah kumpulan instance mongod yang mengelola kumpulan data yang sama. Menjadi proses daemon MongoDB utama, mongod mengelola permintaan data, mengontrol akses data, dan melakukan operasi latar belakang. Sebuah set replika terdiri dari sejumlah node data, di mana satu adalah node utama yang menangani semua operasi tulis, sementara yang lain adalah sekunder.

Setiap kali set replika dimulai, atau ada perubahan dalam set yang berkaitan dengan jumlah node, seperti penambahan node baru atau kehilangan koneksi dengan node utama untuk waktu yang lebih lama dari yang diizinkan, sistem akan memicu pemilihan otomatis . Tujuan pemilihan adalah untuk menentukan apakah node data primer saat ini harus tetap menjadi yang utama.

MongoDB juga mendukung sharding , yang memungkinkan penskalaan horizontal melalui pengelompokan pecahan. Sharding adalah metode distribusi data di beberapa komputer, yang memungkinkan membaca dan menulis data di sepanjang sejumlah node. Tidak ada satu node yang mengelola seluruh data, sehingga data didistribusikan ke semua node dalam satu pecahan.

Saat bekerja dengan kumpulan data besar dan throughput tinggi, sharding membantu mengurangi beban pada satu server dan memungkinkan penskalaan melalui penambahan atau penghapusan server, bergantung pada kebutuhan.

MySQL :MySQL mendukung jenis replikasi berikut di luar kotak:

  • Replikasi master-slave asinkron, di mana proses berjalan dari satu master ke sejumlah slave, dan sebaliknya. Tuan tidak menunggu budak untuk mengkonfirmasi penerimaan acara. Perubahan pada database diantrekan dan ditulis di lain waktu.
  • Replikasi master-slave semi sinkron, dengan master menunggu replikasi hanya untuk satu slave untuk mengonfirmasi penerimaan acara.
  • Replikasi multi-master yang sinkron, memungkinkan data disimpan di banyak komputer dan diperbarui oleh anggota grup mana pun. Semua budak diwajibkan untuk mengonfirmasi penerimaan acara.

Meskipun MySQL tidak mendukung auto sharding dan clustering sendiri, pengguna dapat mencapai beberapa fungsi melalui teknologi MySQL Cluster.

Keamanan

MongoDB :MongoDB menggunakan otentikasi berbasis peran. Fitur keamanan lainnya termasuk audit dan otorisasi, serta dukungan TLS dan SSL untuk tujuan enkripsi.

Keuntungan utama MongoDB terkait keamanan atas MySQL adalah ketahanannya terhadap serangan injeksi SQL. Injeksi SQL adalah kerentanan yang memungkinkan penyerang mendapatkan akses ke kueri database yang dibuat oleh aplikasi. Penyerang dapat menggunakan kerentanan ini untuk mendapatkan akses ke, memodifikasi, atau menghapus data aplikasi. Injeksi SQL bahkan dapat membahayakan server itu sendiri.

Mengingat bahwa arsitektur MongoDB menggunakan dokumen mirip JSON untuk menjelaskan kueri dan bahwa kueri direpresentasikan sebagai objek Binary JSON (BSON) yang aman, injeksi string langsung tidak mungkin dilakukan.

MySQL :MySQL menggunakan model keamanan berbasis hak istimewa. Setiap pengguna diautentikasi dan diberikan hak khusus untuk membuat, membuat kueri, atau mengedit tabel. SSL menyediakan enkripsi koneksi.

Serangan injeksi SQL adalah kerentanan terbesar MySQL. Namun, ada langkah-langkah tertentu yang dapat diambil untuk menurunkan risiko serangan, seperti menggunakan kueri berparameter alih-alih input pengguna yang digabungkan. Ini sangat penting di WHERE klausa dan INSERT atau UPDATE pernyataan.

Skalabilitas

MongoDB :Penskalaan horizontal adalah salah satu keunggulan utama MongoDB dibandingkan dengan MySQL. Menggunakan pengelompokan pecahan, MongoDB mendistribusikan data ke seluruh mesin, yang membantu kasus penggunaan yang mencakup bekerja dengan kumpulan data besar.

MySQL :Seperti disebutkan di atas, MySQL tidak mendukung sharding di luar kotak. Penskalaan basis data di MySQL (dan banyak solusi RDBMS populer lainnya) memerlukan perubahan aplikasi menggunakan basis data atau membiarkan waktu henti hingga migrasi ke server yang lebih besar selesai.

Kecepatan dan Performa

MongoDB :Sebagai database NoSQL, MongoDB lebih cepat daripada MySQL karena model kuerinya, yang memungkinkan variasi tergantung pada jenis dan ukuran pekerjaan. Kecepatan MongoDB sangat jelas terlihat dalam skenario yang menyertakan database besar.

MySQL :Meskipun MySQL lebih lambat dari keduanya, kinerjanya dapat ditingkatkan secara signifikan dengan penyetelan.

Dukungan dan Dokumentasi

MongoDB :MongoDB Inc. menawarkan Dukungan Tingkat Perusahaan 24/7 dan add-on untuk dukungan siklus hidup yang diperpanjang. Dukungan tersebut mencakup basis pengetahuan yang kaya, rilis pemeliharaan, pembaruan, tambalan, dan perbaikan bug. Menjadi pemain baru di pasar, MongoDB memiliki komunitas online yang lebih kecil daripada MySQL.

MySQL :Sebagai produk Oracle, MySQL menawarkan Dukungan Seumur Hidup Oracle 24/7 dalam tiga tingkatan:Dukungan Premier mencakup versi hingga 5 tahun, Tingkat diperpanjang untuk versi antara 6 dan 8 tahun, sementara Sustain mendukung semua versi yang lebih lama dari delapan tahun . Komunitas online yang sangat aktif membantu pengguna dengan cepat menemukan solusi untuk banyak masalah.

Kasus Penggunaan

MongoDB :MongoDB, seperti solusi NoSQL lainnya, berkinerja terbaik dalam kasus penggunaan yang memerlukan cara yang fleksibel dan lancar untuk memanipulasi data, seperti:

  • Analisis waktu nyata
  • Gudang data
  • Aplikasi seluler
  • Sistem pengelolaan konten

Daftar perusahaan yang menggunakan MongoDB di tumpukan teknologi mereka termasuk Lyft, Adobe, Codecademy, dll.

MySQL :Institusi yang menangani transaksi keuangan dan lainnya yang memerlukan kepatuhan ACID memilih MySQL daripada MongoDB. Daftar perusahaan yang menggunakan MySQL lebih panjang dan mencakup Airbnb, Netflix, Amazon, Shopify, dll.

Penting untuk dicatat bahwa beberapa perusahaan, seperti Uber, menggunakan MongoDB dan MySQL untuk skenario penggunaan yang berbeda di dalam perusahaan.

Bagaimana Memilih?

Tidak ada pemenang yang jelas dalam perbandingan antara MongoDB dan MySQL karena kedua sistem manajemen basis data ini melayani dua bidang yang sangat berbeda. Memilih solusi yang tepat membutuhkan analisis yang cermat terhadap kebutuhan khusus seseorang.

Pilih MongoDB jika Anda perlu:

  • Tingkatkan ketersediaan – Teknologi replikasi data MongoDB dan penggunaan beberapa node untuk penyimpanan data memastikan ketersediaan yang lebih tinggi. MySQL juga dapat mereplikasi data di seluruh node, tetapi prosesnya rumit dan memakan waktu.
  • Mempercepat pengembangan – fleksibilitas format JSON sangat bermanfaat bagi pengembang aplikasi, yang lebih suka merepresentasikan data dalam larik dan subdokumen daripada dalam baris dan kolom yang kaku.
  • Skalakan secara horizontal – MongoDB memungkinkan penskalaan horizontal tanpa membuat perubahan pada aplikasi atau melalui waktu henti.

Pilih MySQL jika Anda:

  • Menangani transaksi uang yang aman – Transaksi MySQL diperlakukan sebagai unit tunggal, dan tidak akan dihapus sampai setiap tahap operasional individu berhasil diselesaikan. Jika salah satu tahapan gagal, seluruh operasi gagal. Fitur MySQL ini memastikan integritas data yang diperlukan untuk transaksi keuangan.
  • Membutuhkan dukungan transaksional yang komprehensif – Transaksi MySQL mengikuti standar ACID, yang berarti transaksi tersebut bersifat atomik, konsisten, terisolasi, dan tahan lama.
  • Perlu dukungan yang lebih baik – MySQL telah ada lebih lama dari MongoDB, jadi menemukan solusi untuk masalah umum di internet jauh lebih mudah jika Anda menggunakan MySQL. Pada tingkat yang lebih tinggi, mengelola database NoSQL seperti MongoDB membutuhkan lebih banyak keahlian teknis dibandingkan dengan MySQL.

Linux
  1. Konfigurasikan replikasi sumber-sumber MySQL

  2. Jatuhkan tabel di MySQL

  3. Impor Database MySQL

  1. Metode koneksi MySQL

  2. Penjadwal Acara MySQL

  3. Pencadangan MySQL 1.2 (MySQL 5.5+)

  1. Instal MariaDB atau MySQL di Linux

  2. Optimalkan database MySQL

  3. Pencadangan MySQL 1.1