InnoDB ialah salah satu daripada enjin pangkalan data MySQL Ia kini merupakan enjin storan lalai MySQL dan salah satu piawaian untuk keluaran binari oleh MySQL AB InnoDB menggunakan sistem kebenaran dwi-lagu, satu ialah kebenaran GPL dan satu lagi ialah kebenaran perisian proprietari . InnoDB ialah enjin pilihan untuk pangkalan data transaksi dan menyokong jadual keselamatan transaksi (ACID);
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
Jika anda ingin melihat enjin storan yang digunakan oleh pangkalan data anda secara lalai, anda boleh menggunakan arahan Tunjukkan PEMBOLEH UBAH SEPERTI 'storage_engine';
1
InnoDB ialah salah satu daripada enjin pangkalan data MySQL Ia kini merupakan enjin storan lalai MySQL dan salah satu piawaian untuk keluaran binari oleh MySQL AB. InnoDB telah dibangunkan oleh Innobase Oy dan diperoleh oleh Oracle pada Mei 2006. Berbanding dengan ISAM tradisional dan MyISAM, ciri terbesar InnoDB ialah ia menyokong fungsi transaksi (Transaksi) serasi ACID, serupa dengan PostgreSQL.
InnoDB menggunakan sistem pelesenan dwi-landasan, satu pelesenan GPL dan satu lagi pelesenan perisian proprietari.
1. InnoDB ialah enjin pilihan untuk pangkalan data transaksi, menyokong jadual keselamatan transaksi (ACID)
Atribut ACID transaksi: Iaitu, atomicity dan konsistensi , Pengasingan, Ketahanan
a. Atomicity: Atomicity bermakna set pernyataan ini sama ada dilaksanakan atau tidak dilaksanakan sama sekali Jika ralat berlaku semasa pelaksanaan transaksi, pangkalan data akan Untuk melancarkan kembali ke titik di mana transaksi bermula.
Transaksi ialah satu set pernyataan SQL yang mempunyai fungsi seperti pemilihan, pertanyaan dan pemadaman. Akan ada satu nod untuk setiap pelaksanaan pernyataan. Sebagai contoh, selepas kenyataan padam dilaksanakan, rekod disimpan dalam urus niaga ini menyimpan masa dan perkara yang kami lakukan. Jika sesuatu berlaku, ia akan digulung semula ke kedudukan asal Apa yang saya lakukan sudah disimpan dalam buat semula, dan kemudian ia boleh dilaksanakan secara terbalik. B. Ketekalan: Sebelum dan selepas permulaan transaksi, kekangan integriti pangkalan data tidak rosak. (EG: Contohnya, pemindahan ke B, adalah mustahil untuk menolak wang, tetapi B tidak menerimanya)
C. Pengasingan: Pada masa yang sama, hanya satu permintaan transaksi membenarkan satu permintaan transaksi untuk meminta Tiada gangguan antara transaksi yang berbeza untuk data yang sama; tertentu data berbilang kali, dan berbilang pengubahsuaian dalam urus niaga ini masih belum dilakukan Pada masa ini, transaksi serentak mengakses data, yang akan menyebabkan data yang diperolehi oleh kedua-dua urus niaga menjadi tidak konsisten (baca Diambil data kotor tanpa komitmen daripada Urus niaga lain)
Data, pelbagai pertanyaan dalam skop transaksi mengembalikan nilai data yang berbeza yang diserahkan oleh transaksi sebelumnya telah dibaca, dan nilai data yang sama telah disoal item data)
Item data telah diubah suai daripada "1" kepada "2". Pada masa ini, transaksi T2 memasukkan baris item data ke dalam jadual dan nilai item data ini masih "1" ke pangkalan data. Jika pengguna mengendalikan transaksi T1 melihat data yang baru diubah suai, dia akan mendapati masih terdapat satu baris yang belum diubah suai, baris ini telah ditambah daripada transaksi T2, sebagai jika dia berhalusinasi ); ( membaca data yang dihantar oleh transaksi sebelumnya, adalah untuk satu kumpulan data secara keseluruhan) : Selepas transaksi selesai , semua kemas kini kepada pangkalan data melalui transaksi akan disimpan ke pangkalan data dan tidak boleh ditarik balik 2. InnoDB ialah enjin storan lalai mySQL Tahap pengasingan lalai ialah RR, dan dalam RR Mengambil tahap pengasingan selangkah lebih jauh, kawalan konkurensi berbilang versi (MVCC) digunakan untuk menyelesaikan masalah bacaan yang tidak boleh diulang, dan kunci jurang (iaitu, kawalan konkurensi) ditambahkan untuk menyelesaikan masalah bacaan hantu. Oleh itu, tahap pengasingan RR InnoDB sebenarnya mencapai kesan tahap siri sambil mengekalkan prestasi konkurensi yang lebih baik.
Pangkalan data MySQL menyediakan kita dengan empat tahap pengasingan:
a boleh disiri: boleh mengelakkan bacaan kotor, bacaan tidak berulang dan bacaan hantu berlaku; 🎜>b. Bacaan berulang (repeatable read): dapat mengelakkan berlakunya bacaan kotor dan bacaan tidak berulang; >d, Baca tanpa komitmen (baca tanpa komitmen): tahap terendah, tiada jaminan dalam sebarang situasi
Dari a----d tahap pengasingan dari tinggi ke rendah, semakin tinggi tahap , semakin rendah; kecekapan pelaksanaan
3. InnoDB menyokong kunci peringkat baris. Kunci peringkat baris boleh menyokong konkurensi sepenuhnya, dan kunci peringkat baris dilaksanakan oleh lapisan enjin storan.
Kunci: Fungsi utama kunci adalah untuk mengurus akses serentak kepada sumber yang dikongsi dan digunakan untuk mencapai pengasingan transaksi
Jenis: Kunci kongsi (kunci baca), kunci eksklusif (kunci tulis) Kekuatan kunci: Kunci peringkat meja (overhead rendah, lapisan concurrency rendah),🎜 >
Kunci peringkat baris (overhed tinggi, konkurensi tinggi) , hanya akan dilaksanakan pada peringkat enjin storan
4. InnoDB ialah direka untuk prestasi maksimum dalam memproses sejumlah besar data. Kecekapan CPUnya mungkin tidak dapat ditandingi oleh mana-mana enjin pangkalan data hubungan berasaskan cakera5 Enjin storan InnoDB disepadukan sepenuhnya dengan pelayan MySQL Enjin storan InnoDB dicache dalam memori utama. Ia mengekalkan kumpulan penimbalnya sendiri untuk data dan indeks. InnoDB meletakkan jadual dan indeksnya dalam ruang jadual logik, dan ruang jadual boleh mengandungi beberapa fail (atau fail cakera asal); data dalam jadual, setiap jadual disimpan dalam susunan kunci primer Jika kunci utama tidak dinyatakan apabila jadual ditakrifkan. InnoDB akan menjana ROWID 6-bait untuk setiap baris dan menggunakannya sebagai kunci utama7 InnoDB digunakan dalam banyak tapak pangkalan data besar yang memerlukan prestasi tinggi
8. InnoDB tidak menyimpan bilangan baris dalam jadual (cth: apabila memilih count(*) daripada jadual, InnoDB perlu mengimbas keseluruhan jadual untuk mengira bilangan baris yang ada; keseluruhan jadual, InnoDB menyimpan satu baris Pemadaman satu baris adalah sangat perlahan InnoDB tidak mencipta direktori Apabila menggunakan InnoDB, MySQL akan mencipta fail data lanjutan secara automatik bernama ibdata1 in direktori data MySQL. Dan dua fail log 5MB bernama ib_logfile0 dan ib_logfile1
2. Pelaksanaan asas enjin InnoDB
InnoDB mempunyai dua fail storan, akhiran ialah .frm dan .idb; .frm ialah fail definisi jadual dan .idb ialah fail data jadual.
1 Enjin InnoDB menggunakan struktur B+Tree sebagai struktur indeks
B-Tree (pokok carian berbilang laluan seimbang) : untuk cakera Pepohon carian seimbang yang direka untuk peranti storan luaran
Apabila sistem membaca data dari cakera ke memori, unit asas ialah bit blok cakera Data yang terletak dalam blok cakera yang sama akan jadi Baca semuanya sekali gus bukannya atas permintaan.
Enjin storan InnoDB menggunakan halaman sebagai unit pembacaan data ialah unit terkecil pengurusan cakera Saiz halaman lalai ialah 16k.
Ruang storan blok cakera dalam sistem selalunya tidak begitu besar, jadi setiap kali InnoDB memohon ruang cakera, ia akan menggunakan beberapa blok cakera berturut-turut dengan alamat untuk mencapai saiz halaman 16KB.
InnoDB akan menggunakan halaman sebagai unit asas apabila membaca data cakera ke dalam cakera Apabila menanyakan data, jika setiap bahagian data dalam halaman boleh membantu mencari lokasi rekod data, yang akan mengurangkan bilangan cakera I/O dan meningkatkan kecekapan pertanyaan.
Data dalam struktur B-Tree membolehkan sistem mencari blok cakera dengan cekap di mana data terletak
Setiap nod dalam B-Tree adalah berdasarkan Situasi sebenar boleh mengandungi sejumlah besar maklumat kata kunci dan cawangan, contohnya:
Setiap nod menduduki satu ruang blok cakera, terdapat dua kekunci tertib menaik pada nod dan tiga penunjuk ke nod akar subpokok Penunjuk menyimpan alamat blok cakera di mana nod kanak-kanak berada.
Mengambil nod akar sebagai contoh, kata kunci ialah 17 dan 35. Julat data subpokok yang ditunjuk oleh penuding P1 adalah kurang daripada 17 dan P2 penunjukJulat data subpokok yang ditunjuk ialah 17----35, dan julat data subpokok yang ditunjukkan oleh penuding P3 adalah lebih besar daripada 35
Carian simulasi kata kunci Proses 29:
a. Cari blok cakera 1 berdasarkan nod akar dan baca ke dalam ingatan. [Operasi I/O Cakera buat kali pertama]
b. Bandingkan kata kunci 29 dalam selang (17, 35), cari penunjuk P2 bagi blok cakera 1; > c. Cari blok cakera 3 mengikut penunjuk P2 dan baca ke dalam memori. [Operasi I/O cakera untuk kali kedua]
d. Bandingkan kata kunci 29 dalam selang (26, 30), cari penunjuk P2 bagi blok cakera 3; >
e. Cari blok cakera 8 mengikut penunjuk P2 dan baca ke dalam memori. [Kendalian I/O Cakera kali ketiga]
f. Cari kata kunci 29 dalam senarai kata kunci dalam blok cakera 8.
Storan InnoDB MySQL. enjin direka bentuk dengan pemastautin nod akar dalam ingatan, jadi ia berusaha untuk mencapai kedalaman pokok tidak lebih daripada 3, iaitu, I/O tidak memerlukan lebih daripada tiga kali; > Menganalisis keputusan di atas, kami mendapati bahawa tiga operasi I/O cakera dan tiga operasi carian memori diperlukan. Memandangkan kata kunci dalam ingatan adalah struktur senarai tersusun, carian binari boleh digunakan untuk meningkatkan kecekapan tiga operasi I/O cakera adalah faktor penentu yang mempengaruhi keseluruhan kecekapan carian B-Tree.
B+Tree
B+Tree ialah pengoptimuman berdasarkan B-Tree, menjadikannya lebih sesuai untuk melaksanakan struktur indeks storan luaran Setiap nod dalam B-Tree mempunyai kunci dan data, dan ruang storan setiap halaman adalah terhad Jika data data adalah besar, ia akan menyebabkan setiap nod (iaitu satu halaman) Nombor kunci yang boleh disimpan adalah sangat kecil. Apabila jumlah data yang disimpan adalah besar, kedalaman B-Tree juga akan menjadi lebih besar, yang akan meningkatkan bilangan I/O cakera semasa pertanyaan, sekali gus menjejaskan kecekapan pertanyaan.
Dalam B+Tree, semua nod rekod data disimpan pada nod daun pada lapisan yang sama mengikut urutan nilai kunci Hanya maklumat nilai kunci yang disimpan pada nod bukan daun Ini boleh meningkatkan bilangan nilai utama yang disimpan dalam setiap nod dan mengurangkan ketinggian B+Tree
B+Tree mempunyai dua perubahan berdasarkan B-Tree: (1) Data disimpan dalam nod daun
🎜>
Memandangkan nod bukan daun B+Tree hanya menyimpan maklumat nilai utama, dengan mengandaikan bahawa setiap blok cakera boleh menyimpan 4 nilai utama dan maklumat penunjuk, struktur selepas menjadi B+Tree adalah seperti yang ditunjukkan di bawah:
Biasanya terdapat dua penunjuk kepala pada B+Tree, satu menunjuk ke nod akar dan satu lagi menghala ke daun dengan nod kata kunci terkecil, dan terdapat struktur cincin rantai antara semua nod daun (iaitu, nod data).
Oleh itu, dua operasi carian boleh dilakukan pada B+Tree, satu ialah carian julat dan carian halaman untuk kunci utama, dan satu lagi ialah carian rawak bermula dari nod akar .
B+Tree dalam InnoDB
InnoDB ialah storan data yang diindeks oleh ID
Terdapat dua fail storan data menggunakan enjin InnoDB, satu fail definisi dan satu lagi fail data.
InnoDB mengindeks ID melalui struktur B+Tree, dan kemudian menyimpan rekod dalam nod daun
Jika medan diindeks bukan ID kunci utama, buat indeks untuk medan tersebut, kemudian simpan kunci utama rekod dalam nod daun, dan kemudian cari rekod yang sepadan melalui primer indeks kunci
【Cadangan berkaitan: tutorial video mysql】
Atas ialah kandungan terperinci apa itu mysql innodb. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!