Setiap arsitek database yang merancang database MySQL menghadapi masalah dalam memilih mesin penyimpanan yang tepat. Biasanya, aplikasi hanya menggunakan satu mesin:MyISAM atau InnoDB . Tapi mari kita coba sedikit lebih fleksibel dan bayangkan bagaimana mesin penyimpanan yang berbeda dapat digunakan.
Model Data Awal
Untuk memulai, mari kita buat model data yang disederhanakan untuk sistem CRM (manajemen hubungan pelanggan) yang akan kita gunakan untuk mengilustrasikan poinnya. Desain akan mencakup fungsi CRM utama:data penjualan, definisi produk, dan informasi untuk analitik. Ini tidak akan berisi detail yang biasanya digunakan dalam sistem CRM.
Seperti yang Anda lihat, model data ini memiliki tabel yang menyimpan informasi transaksional yang disebut sale
dan sale_item
. Saat pelanggan membeli sesuatu, aplikasi akan membuat baris baru di sale
meja. Setiap produk yang dibeli akan tercermin dalam sale_item
meja. Tabel terkait, sale_status
, adalah untuk menyimpan kemungkinan status (yaitu, tertunda, selesai, dll.).
product
tabel menyimpan informasi tentang barang. Ini mendefinisikan setiap produk dan deskriptor dasarnya. Dalam diagram yang lebih rinci, saya akan menambahkan lebih banyak tabel untuk menangani spesifikasi dan kategorisasi produk. Tapi untuk kebutuhan kita saat ini, itu tidak perlu.
Tabel pelanggan menyimpan data tentang klien. Ini adalah bagian integral dari sistem CRM apa pun dan biasanya melacak aktivitas individu semua pengguna. Jelas, sering kali memiliki informasi yang sangat rinci. Tapi seperti yang saya catat, kami tidak membutuhkan detail ini sekarang.
log
tabel menyimpan apa yang dilakukan setiap pelanggan dalam aplikasi. Dan report_sales
tabel dirancang untuk penggunaan analisis data.
Selanjutnya, saya akan menjelaskan mesin penyimpanan MySQL yang mungkin dapat digunakan dalam desain ini. Dan nanti, kita akan membahas mesin mana yang cocok untuk setiap jenis meja.
Ikhtisar Mesin Penyimpanan MySQL
Mesin penyimpanan adalah modul perangkat lunak yang digunakan MySQL untuk membuat, membaca, atau memperbarui data dari database. Tidak disarankan untuk memilih mesin secara acak, tetapi banyak pengembang senang menggunakan MyISAM atau InnoDB, meskipun opsi lain juga tersedia. Setiap mesin memiliki pro dan kontra sendiri, dan pemilihan mesin yang tepat tergantung pada beberapa faktor. Mari kita lihat mesin yang paling populer.
- MyISAM memiliki sejarah panjang dengan MySQL. Itu adalah mesin default untuk database MySQL sebelum rilis 5.5. MyISAM tidak mendukung transaksi dan hanya memiliki penguncian tingkat tabel. Ini sebagian besar digunakan untuk aplikasi yang banyak membaca.
- InnoDB adalah mesin penyimpanan umum yang menyeimbangkan keandalan tinggi dan kinerja yang baik. Ini mendukung transaksi, penguncian tingkat baris, pemulihan kerusakan, dan kontrol konkurensi multi-versi. Selain itu, ini memberikan batasan integritas referensial kunci asing.
- Memori mesin menyimpan semua data dalam RAM. Ini dapat digunakan untuk menyimpan referensi pencarian.
- Mesin lain, CSV , menyimpan data dalam file teks dengan nilai yang dipisahkan koma. Format ini sebagian besar digunakan untuk integrasi dengan sistem lain.
- Gabungkan adalah pilihan yang baik untuk sistem pelaporan, seperti dalam pergudangan data. Ini memungkinkan pengelompokan logis dari sekumpulan tabel MyISAM yang identik, yang juga dapat direferensikan sebagai satu objek.
- Arsip dioptimalkan untuk penyisipan berkecepatan tinggi. Ini menyimpan informasi dalam tabel yang ringkas dan tidak terindeks dan tidak mendukung transaksi. Mesin penyimpanan Arsip sangat ideal untuk menyimpan sejumlah besar data historis atau arsip yang jarang dirujuk.
- The Federasi engine menawarkan kemampuan untuk memisahkan server MySQL atau membuat satu database logis dari banyak server fisik. Tidak ada data yang disimpan di tabel lokal dan kueri dijalankan secara otomatis di tabel jarak jauh (federasi).
- Lubang Hitam mesin bertindak sebagai "lubang hitam" yang menerima data tetapi tidak menyimpannya. Semua pilihan mengembalikan set data kosong.
- Mesin Contoh digunakan untuk menunjukkan cara mengembangkan mesin penyimpanan baru.
Ini bukan daftar lengkap mesin penyimpanan. MySQL 5.x mendukung sembilan di antaranya langsung dari kotaknya, ditambah lusinan lainnya yang dikembangkan oleh komunitas MySQL. Rincian lebih lanjut tentang mesin penyimpanan dapat ditemukan di dokumentasi resmi MySQL.
Memperbarui Desain Model Data
Lihat kembali model data kami. Jelas, tabel yang berbeda akan digunakan dengan cara yang berbeda. sale
tabel harus mendukung transaksi. Di sisi lain, log
dan report_sales
tabel tidak memerlukan fitur ini. Misi utama log
tabel menyimpan data dengan efisiensi maksimum. Pengambilan cepat adalah persyaratan utama untuk report_sales
meja.
Mari kita ingat poin di atas dan memodifikasi skema database kita. Di Vertabelo, Anda dapat mengatur “Storage engine” di Table Properties panel. Silakan lihat gambar-gambar di bawah ini.
Menyetel mesin penyimpanan
Jadi, mari kita lihat desain database yang diperbarui.
Saya menentukan mesin penyimpanan untuk tabel yang ada dan mengatur ulang report_sales
meja. Seperti yang Anda lihat, tabel dibagi menjadi tiga kelompok:
- Tabel transaksi, yang digunakan dengan aplikasi utama
- Tabel laporan untuk analisis BI
- Tabel log untuk menyimpan semua aktivitas pengguna
Mari kita bahas semuanya secara terpisah.
Tabel Transaksi
Tabel ini berisi data yang dimasukkan oleh pengguna selama operasi rutin harian. Dalam kasus kami, akan ada informasi penjualan, seperti:
- karyawan mana yang melakukan penjualan
- siapa yang membeli produk
- apa yang dijual
- berapa biayanya
Dalam sebagian besar kasus, InnoDB adalah solusi terbaik untuk tabel transaksi. Mesin penyimpanan ini mendukung penguncian baris, dan beberapa pengguna dapat bekerja sama. Demikian juga InnoDB memungkinkan penggunaan transaksi dan kunci asing. Tapi, seperti yang Anda tahu, manfaat ini tidak gratis; mesin dapat melakukan pernyataan pilih lebih lambat dari MyISAM dan menyimpan data dengan kemanjuran kurang dari Arsip.
Semua mesin yang dijelaskan di atas memiliki beberapa perlindungan, jadi pengembang tidak perlu menulis fungsi rollback yang rumit untuk setiap operasi. Dalam aplikasi penjualan biasa, menjaga konsistensi data lebih penting daripada kemungkinan masalah kinerja.
Tabel Laporan
Dalam desain baru, saya membagi satu tabel menjadi beberapa tabel yang lebih kecil. Ini menghemat upaya ketika tiba saatnya untuk mengelola data dan melakukan pemeliharaan tabel dan indeks. Ini juga memungkinkan kita untuk membuat tabel MERGE sale_report
untuk menggabungkan tabel laporan lainnya. Akibatnya, alat BI masih mengambil data dari satu tabel besar (untuk tujuan analitik), tetapi kami mendapat manfaat dari bekerja dengan tabel yang lebih kecil.
Report_sale_{year}
tabel adalah tabel MyISAM. Mesin penyimpanan ini tidak mendukung transaksi dan hanya dapat mengunci tabel secara keseluruhan. Karena MyISAM tidak mengkhawatirkan item kompleks ini, ia melakukan operasi manipulasi data dengan cepat. Karena struktur filenya, mesin penyimpanan ini membaca data lebih cepat daripada InnoDB yang lebih populer.
Tabel Log
Mesin penyimpanan Arsip adalah pilihan yang baik untuk menyimpan data log. Itu dapat menyisipkan baris dan memampatkan data yang disimpan dengan cepat. Ada manfaat besar untuk menyimpan informasi tentang aktivitas pengguna. Namun, Arsip memiliki beberapa batasan. Itu tidak mendukung operasi pembaruan, dan mengambil data dengan lambat. Tetapi dalam tabel log, manfaat yang dijelaskan lebih penting daripada kekurangannya.
Mengintegrasikan Mesin Penyimpanan
Setiap sistem harus terintegrasi dengan kehidupan eksternal. Untuk aplikasi, ini bisa berupa pengguna yang mengisi tabel referensi dan transaksi. Ini bisa berupa layanan dan integrasi melalui REST, SOAP, WCF atau sesuatu seperti ini. Dan yang tak kalah pentingnya, ini bisa berupa integrasi basis data.
MySQL dan Oracle telah mengembangkan dua mesin penyimpanan yang sangat membantu:Federated dan CSV . Yang pertama, Federasi , harus digunakan untuk memuat data dari database MySQL eksternal. Mesin penyimpanan kedua, CSV , memungkinkan basis data menyimpan catatan dalam format CSV dan membaca file yang dipisahkan koma secara langsung, tanpa upaya tambahan apa pun.
Seperti yang Anda lihat, menggunakan mesin penyimpanan yang berbeda untuk tujuan yang berbeda memberikan database Anda fleksibilitas yang lebih besar. Jika seorang arsitek database membuat keputusan mereka setelah mempertimbangkan semua pro dan kontra, maka hasilnya bisa sangat mengesankan.
Apakah Anda memiliki pengalaman menggunakan mesin penyimpanan yang berbeda dalam desain database? Saya ingin melihat tips dan saran Anda. Silakan bagikan di bagian komentar.