Ketika database dibuat, salah satu faktor yang sering diabaikan tetapi penting dalam kinerja adalah mesin penyimpanan (terutama saat database tumbuh). Dalam banyak kasus, godaannya adalah hanya menerima default dan melanjutkan pengembangan proyek Anda. Hal ini dapat menyebabkan dampak negatif yang tidak terduga pada kinerja, pencadangan, dan integritas data di kemudian hari dalam siklus hidup aplikasi, seperti saat tim Anda mengimplementasikan analitik dan dasbor MySQL.
Untuk menghindari potensi jebakan ini, kita akan melihat lebih dekat beberapa mesin penyimpanan yang paling banyak digunakan yang didukung oleh MySQL (mulai versi 5.7).
Mesin Penyimpanan yang Didukung
Apa saja pilihan saya?
Secara default, MySQL 5.7 mendukung sepuluh mesin penyimpanan (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated, dan Example). Untuk melihat mana yang tersedia dan didukung oleh server Anda, gunakan perintah ini:
mysql> TAMPILKAN MESIN\G
Ini akan menampilkan daftar mesin penyimpanan dan memberi tahu Anda mana yang tersedia, tidak tersedia, atau yang saat ini disetel ke default. Kolom “Support:” masing-masing akan menampilkan ‘YA’, ‘TIDAK’, atau ‘DEFAULT’.
Dalam beberapa aplikasi, mungkin timbul kebutuhan untuk memiliki mesin penyimpanan yang berbeda untuk tabel yang berbeda dalam database yang sama. Ini adalah contoh mengapa Anda perlu hati-hati merencanakan model data untuk aplikasi Anda. Namun, dalam kebanyakan kasus, hanya satu mesin penyimpanan yang diperlukan.
Kemampuan Mesin Penyimpanan
Apa yang mereka kuasai?
Mari kita lihat lebih dekat beberapa mesin penyimpanan yang paling umum digunakan. Ini akan memberi kita gambaran tentang apa yang dirancang untuk dilakukan oleh setiap mesin dan bagaimana mesin tersebut dapat digunakan sebaik mungkin untuk memenuhi tujuan bisnis kita.
InnoDB: Opsi default di MySQL 5.7, InnoDB adalah mesin penyimpanan tangguh yang menawarkan:
- Kepatuhan terhadap ACID penuh
- Komit, rollback, dan pemulihan error
- Penguncian tingkat baris
- Kendala integritas referensial KUNCI ASING
- Meningkatkan konkurensi multi-pengguna (melalui pembacaan tanpa penguncian)
Dengan fungsionalitas di atas yang ditawarkan InnoDB, jelas mengapa itu adalah mesin default di MySQL. Ini adalah mesin yang berkinerja baik dan menawarkan banyak atribut yang diperlukan yang dibutuhkan oleh basis data mana pun. Namun, diskusi komprehensif tentang semua kemampuannya berada di luar cakupan artikel ini. Ini adalah mesin yang kemungkinan besar akan digunakan di sebagian besar aplikasi.
MyISAM: Fungsionalitas yang membedakan MyISAM adalah kemampuannya untuk:
- indeks penelusuran teks lengkap
- penguncian tingkat tabel
- kurangnya dukungan untuk transaksi
Meskipun merupakan mesin penyimpanan yang cepat, ini paling cocok untuk digunakan dalam aplikasi yang banyak membaca dan sebagian besar membaca seperti pergudangan data dan aplikasi web yang tidak memerlukan dukungan transaksi atau kepatuhan ACID.
NDB (atau NDBCLUSTER):Jika lingkungan berkerumun adalah tempat database Anda akan bekerja, NDB adalah mesin penyimpanan pilihan. Yang terbaik adalah saat Anda membutuhkan:
- Komputasi terdistribusi
- Redundansi tinggi
- Ketersediaan tinggi
- Uptime setinggi mungkin
Perhatikan bahwa dukungan untuk NDB tidak termasuk dalam distribusi biner MySQL Server 5.7 standar. Anda harus memperbarui ke rilis biner terbaru dari MySQL Cluster. Padahal, jika Anda mengembangkan dalam lingkungan cluster, Anda mungkin memiliki pengalaman yang diperlukan untuk menangani tugas-tugas ini.
CSV: Mesin penyimpanan yang berguna saat data perlu dibagikan dengan aplikasi lain yang menggunakan data berformat CSV. Tabel disimpan sebagai file teks nilai yang dipisahkan koma. Meskipun ini membuat berbagi data dengan skrip dan aplikasi lebih mudah, satu kelemahannya adalah file CSV tidak diindeks. Jadi, data harus disimpan dalam tabel InnoDB hingga tahap proses Impor/Ekspor.
Lubang Hitam: Mesin ini menerima tetapi tidak menyimpan data. Mirip dengan UNIX /dev/null, kueri selalu mengembalikan set kosong. Ini dapat berguna dalam lingkungan database terdistribusi di mana Anda tidak ingin menyimpan data secara lokal atau dalam performa atau situasi pengujian lainnya.
Arsip: Seperti namanya, mesin ini sangat baik untuk data historis yang jarang dirujuk. Tabel tidak diindeks dan kompresi terjadi saat dimasukkan. Transaksi tidak didukung. Gunakan mesin penyimpanan ini untuk mengarsipkan dan mengambil data sebelumnya.
Federasi: Mesin penyimpanan ini untuk membuat satu, lokal, database logis dengan menghubungkan beberapa server MySQL fisik yang berbeda. Tidak ada data yang disimpan di server lokal dan kueri dijalankan secara otomatis di server jarak jauh masing-masing. Ini sempurna untuk lingkungan data mart terdistribusi dan dapat sangat meningkatkan kinerja saat menggunakan MySQL untuk pelaporan analitis.
Menunjuk mesin penyimpanan
Bagaimana cara mengubah mesin penyimpanan yang digunakan?
Mesin penyimpanan yang digunakan dibuat berdasarkan pembuatan tabel. Seperti yang dinyatakan sebelumnya, InnoDB adalah mesin penyimpanan default di MySQL versi 5.5 dan lebih tinggi. Jika Anda ingin menggunakan yang lain, yang terbaik adalah melakukannya dalam pernyataan CREATE TABLE Anda. Misalnya, Anda telah mengidentifikasi tabel yang perlu menggunakan mesin penyimpanan CSV. Pernyataan CREATE TABLE Anda yang terlalu disederhanakan mungkin terlihat seperti ini:
mysql> BUAT TABEL Shared_Data (
-> Data_ID INTEGER NOT NULL,
-> Nama VARCHAR(50) NOT NULL,
-> Deskripsi VARCHAR(150)
-> ) ENGINE='CSV';
Setelah itu kita akan melakukan pernyataan INSERT seperti biasa:
mysql> INSERT INTO Shared_Data VALUES
-> (1,'perangkat satu', 'versi terbaru dari teknologi terbaik'),
-> (2,'perangkat dua', 'yang tercepat di pasar');
Setelah berhasil, jika Anda memeriksa direktori database, seharusnya sekarang ada file 'Shared_Data.CSV' di dalamnya yang berisi catatan yang telah Anda sisipkan ke tabel Shared_Data.
Metodologi yang sama dapat digunakan untuk salah satu dari banyak mesin penyimpanan yang didukung MySQL. Meskipun dimungkinkan untuk mengubah mesin penyimpanan setelah tabel dibuat dengan ALTER TABLE
pernyataan, adalah praktik terbaik untuk merencanakan sesuai dan menetapkannya di awal.
Sebagai penutup
MySQL memiliki banyak opsi
Seperti yang Anda lihat, MySQL menawarkan dukungan untuk mesin penyimpanan yang dirancang untuk menangani tugas yang sangat berbeda di banyak lingkungan yang berbeda. Mengidentifikasi mesin mana yang akan digunakan dan kapan menggunakannya dapat membantu kami menghindari komplikasi yang tidak perlu dan masalah kinerja seiring skala aplikasi kami.
Baik Anda memerlukan waktu aktif dan keandalan 99,999% pada cluster komputasi terdistribusi atau Anda memerlukan dukungan transaksi yang sesuai dengan ACID dengan batasan FOREIGN KEY, MySQL memiliki mesin penyimpanan yang sesuai dengan kebutuhan Anda.
Seperti biasa, perencanaan yang tepat dan identifikasi tujuan dan persyaratan proyek Anda adalah cara terbaik untuk secara akurat mengidentifikasi mesin penyimpanan mana yang paling cocok untuk aplikasi Anda. Semoga artikel ini menjadi titik awal yang berguna untuk membantu Anda dalam hal itu.
Artikel ini awalnya muncul di sini. Diterbitkan ulang dengan izin. Kirim keluhan hak cipta Anda di sini.