See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 13183|Vastuse: 0

[Allikas] MyISAM on erinevus MySQL andmebaasi salvestusmootori ja InnoDB vahel

[Kopeeri link]
Postitatud 13.04.2020 09:53:49 | | |
MySQL-i puhul oleks raske mõista MyISAM-i ja InnoDB-d, mis on kaks kõige tuntumat ja laialdasemalt kasutatavat MySQL salvestusmootorit. Täna räägin teiega MyISAM-i ja InnoDB erinevusest MySQL-is...

Mis on MyISAM?

MyISAM on MySQL relatsioonilise andmebaasihaldussüsteemi vaikimisi salvestusmootor (enne versiooni 5.5)。 See MySQL tabeli salvestusstruktuur laiendab paljusid kasulikke funktsioone vanast ISAM-koodist. Uues MySQL-i versioonis asendab InnoDB mootor laialdaselt MyISAM-i tänu selle eelistele tehingute, referentsiaalse terviklikkuse ja suurema samaaegsuse osas.
Iga MyISAM tabel vastab kolmele failile kõvakettal. Kõigil kolmel failil on sama failinimi, kuid erinevad laiendused, mis näitavad nende tüübi eesmärki: .frm fail sisaldab tabeli definitsiooni, kuid see fail ei ole osa MyISAM mootorist, vaid serverist; .MYD sisaldab tabeli andmeid; .MYI on tabeli indeksfail.

Mis on InnoDB?

InnoDB on teine MySQL-i salvestusmootor ning MySQL AB poolt välja antud standardi uus versioon on kaasas kõigis binaarpaigalduspakettides.5.5 ja alates vaikimisi salvestusmootorina。 Selle eelised teiste salvestusmootorite ees on ACID-ühilduvate tehingute tugi (sarnane PostgreSQL-ile) ja parameetrite terviklikkus (st võõrvõtmete tugi).

Oracle Corporation omandas Innobase'i 2005. aasta oktoobris. Innobase kasutab topeltautentimise autoriseerimist. See levitatakse GNU abil ning võimaldab ka teistel gruppidel, kes soovivad InnoDB-d kommertstarkvarasse integreerida, saada litsentsi.

Kõige populaarsemad salvestusmootorid on MyISAM ja InnoDB. Peamised erinevused MyISAM-i ja InnoDB vahel on jõudlus ja tehingute kontroll. MyISAM on varajase ISAM-i (Indexed Sequential Access Method) laiendatud rakendus, ISAM ei ole enam toetatud pärast MySQL 5.0-d), ISAM on loodud olukordade lahendamiseks, kus lugemissagedus on palju suurem kui kirjutamissagedus, seega ISAM ja hilisemad MyISAM ei arvesta nende toega, välistavad TPM-i, ei vaja tehingukirjeid, ISAM-i päringute efektiivsus on märkimisväärne ja mälukulu on väga väike.
MyISAM pärib need eelised, hoides samal ajal ajaga kaasas palju kasulikke uusi funktsioone ja seotud tööriistu. Näiteks paralleelsuse kontrolli puhul on olemas tabeli tasemel lukud ning kuigi MyISAM ise ei toeta riketekindlust, saab seda kasutada rikete taastamiseks myisamchk kaudu. Ja kuna MyISAM kasutab iga tabeli jaoks oma sõltumatuid salvestusfaile (MYD andmefail ja MYI indeksfail), on selle varundamine ja taastamine väga mugav (piisab kopeerimise ülekirjutamisest) ning see toetab ka veebipõhist taastamist. Võrreldes teiste salvestusmootoritega on MyISAM-il enamik tööriistu tabelite kontrollimiseks ja parandamiseks. MyISAM tabeleid saab tihendada ja need toetavad täisteksti otsingut. Need ei ole tehingute jaoks turvalised ega toeta võõrvõtmeid, nii et kui su rakendus ei nõua tehinguid ja tegeleb ainult põhiliste CRUD-operatsioonidega, siis on MyISAM õige valik.
InnoDB on loodud kõrge samaaegsuse lugemise ja kirjutamise olukordadeks, kasutades MVCC-d (Multi-Version Concurrency Control) ja reataseme lukke, et pakkuda ACID-nõuetele vastavat tehingute tuge. InnoDB toetab võõrvõtmete viite terviklikkust ja omab rikete taastamise võimalusi. Lisaks on InnoDB jõudlus ametlikult üsna hea, eriti suurte andmemahtude töötlemisel: InnoDB protsessori efektiivsus on võrreldamatu teiste kettapõhiste relatsiooniliste andmebaasi salvestusmootoritega. Kuid InnoDB varundamine ja taastamine on veidi keerulisem, kui just ei kasuta versiooni 4.1 või uuema Mulit-tabeliruumi tuge, sest erinevalt MyISAM-ist ei vasta InnoDB andmefailid iga tabeli jaoks eraldi. Selle asemel kasutatakse jagatud tabeliruumi ning lihtne kopeerimise ülekirjutamise meetod ei sobi talle ning andmed tuleb pärast MYSQL-i peatamist taastada. Tabelipõhise tablespacesd kasutamine muudab iga tabeli vastavaks eraldi tabeliruumi failile, olukord on palju lihtsam. Sellel on samad omadused mis BDB-tüüpidel ning need toetavad ka võõrvõtmeid. InnoDB tabelid on kiired ja pakuvad rikkalikumaid funktsioone kui BDB, seega on see soovitatav, kui vajad tehinguliselt turvalist salvestusmootorit.

Üldiselt on InnoDB hea valik, kui on vaja tehingute tuge ning sellel on kõrge samaaegne lugemis- ja kirjutamissagedus. BDB-d võib kaaluda, kui samaaegsete lugemiste ja kirjutamiste sagedus ei ole suur, kuid BDB ei ole enam toetatud MySQL 5.1 ja hilisemates versioonides. See valik on kadunud

Vaikimisi on InnoDB tehingud avatud (seadistatud autocommit = 0), mis tähendab, et iga kord, kui kirje lisatakse, käsitleb InnoDB tabel seda eraldi tehinguna. Kui me sisestame 10 000 kirjet ja ei sulge tehingut, siis InnoDB tüübitabel käsitleb seda kui 10 000 tehingut, ja sisestamise koguaeg on sel ajal suur, sel ajal peame tehingu esmalt välja lülitama ja seejärel sisestama, nii et kiirus on väga kiire. Nagu Heapi ja BDB (Berkeley DB) puhul, siis suhteliselt võttes ei ole penetratsioonimäär nii hea kui eelmistel kahel, kuid mõnel juhul, Heap salvestusmootor on endiselt väga rakendatav, mis salvestab andmeid mällu, ja on äärmiselt kiire, sest ketta I/O ei oota. Kuid kuna tegemist on mälusalvestusmootoriga, kaovad kõik tehtud muudatused pärast serveri taaskäivitumist. Heap on suurepärane koht BDB testimiseks, kuna see on MySQL-i esimene tehinguliselt turvaline salvestusmootor. Ehitatud Berkeley DB andmebaasiteegi baasil, on see samuti tehinguliselt turvaline, kuid BDB pole ilmselgelt nii populaarne kui InnoDB, sest enamik MySQL salvestusmootoreid, mis toetavad tehinguid, otsivad samuti MVCC või rea-taseme lukustusmootoreid, samas kui BDB toetab ainult lehekülgede tasandi lukustust.

InnoDB mootor

InnoDB on tehingupõhine salvestusmootor, mis toetab tagasipöördeid ja on loodud pakkuma kõrge jõudlusega teenuseid suurte andmemahtude töötlemisel ning loob mälus puhvri basseine käitusajal, et puhverdada andmeid ja indekseid.

InnoDB mootori eelised:

1. Toeta tehingute töötlemise ja ACID tehingute funktsioone;

2. Teostatakse neli SQL-standardi isolatsioonitaset;

3. Toeta rea tasemel lukustus- ja võõrvõtmete piiranguid;

4. Andmete taastamiseks saab kasutada tehingulogisid.

5. Lukutase on realukk, mis sobib sagedaseks tabeli muutmiseks kõrge samaaegsusega ning kõrge samaaegsus on parem kui MyISAM. Puuduseks on see, et süsteemi tarbimine on suur.

6. Indeks mitte ainult ei vahemällu salvesta iseennast, vaid ka andmeid, mis vajavad rohkem mälu kui MyISAM.

InnoDB mootori puudused:

Kuna see ei salvesta tabeli ridade arvu, skaneeritakse kogu tabel COUNT statistika kasutamisel.

MyISAM mootor

MyISAM on vaikimisi mootor enne MySQL 5.5.5 versiooni ja on loodud kiireks lugemiseks.

MyISAM mootori eelised:

1. Kõrge jõudlusega lugemine;

2. Kuna see salvestab tabeli ridade arvu, ei skaneerita kogu tabelit COUNT statistika kasutamisel;

MyISAM mootori puudused:

1. Lukutase on laualukk ning kellaluku eeliseks on see, et ülemine osa on väike ja lukk kiire; Puudusteks on luku granulaarsus suur, lukuimpulsi tõenäosus kõrge ja samaaegsuse võimekus madal, mis sobib päringupõhistele teenustele.

2. See mootor ei toeta tehinguid ega võõrvõtmeid.

3. INSERT ja UPDATE operatsioonid peavad lukustama kogu tabeli;

4. See salvestab tabeli ridade arvu, nii et kui SELECT COUNT(*) FROM TABLE, peab ta lugema ainult salvestatud väärtusi otse ilma kogu tabelit skaneerimata.

Rakendatavad stsenaariumid

MyISAM sobib: (1) paljude arvutuste tegemiseks; (2) Harv sisestamine ja väga sagedased päringud; (3) Äri ei ole.

InnoDB sobib: (1) kõrge usaldusväärsuse nõuete või tehingute jaoks; (2) Tabeli uuendused ja päringud on üsna sagedased ning tabeli lukustumise tõenäosus on suhteliselt suur.

Tabeli võrdlus

OmadusedMyISAMHunnikBDBInnoDB
TehingudEi toetaEi toetaAbistavat kätt andma kellelegiAbistavat kätt andma kellelegi
Luku teravusLaualukkLaualukkLehe lukustus (leht, 8KB)Lukustus
ladustamineFailide jagamineMälestusesÜks fail igas tabelisTabeliruum
IsolatsioonitaseeieiLoe pühendunudKõik
Kaasaskantav formaatolemaPuudubeiolema
Viidete täielikkuseieieiolema
Andmete esmane võtieieiolemaolema
MySQL vahemällu salvestab andmekirjeideiJahJahJah
KasutatavusTäisversioonTäisversioonMySQL-MaxTäisversioon


Mõned erinevused detailides


1. InnoDB ei toeta TÄISTEKSTI tüüpi indekseid, mida on toetatud alates MySQL 5.6-st (eksperimentaalne).

2. InnoDB ei salvesta tabeli kindlat ridade arvu, st kui käivitatakse select count() tabelist, peab InnoDB skaneerima kogu tabeli, et arvutada, mitu ridu on, kuid MyISAM peab lihtsalt ette lugema salvestatud ridade arvu. Pane tähele, et kui count() lause sisaldab tingimust, kus on operatsioon mõlema tabeli jaoks sama.

3. AUTO_INCREMENT tüüpi väljade puhul peab InnoDB sisaldama indeksit ainult selle väljaga, kuid MyISAM tabelis saab luua ühise indeksi teiste väljadega.

4. Kui KUSTUTA TABELIST, siis InnoDB ei loo tabelit uuesti, vaid kustutab selle rida-realt.

5. LOAD TABLE FROM MASTER-operatsioon ei tööta InnoDB puhul, lahendus on esmalt muuta InnoDB tabel MyISAM tabeliks, importida andmed ja seejärel muuta see InnoDB tabeliks, kuid see ei kehti tabelile, mis kasutab täiendavaid InnoDB funktsioone (näiteks võõrvõtmeid).

6. Lisaks ei ole InnoDB tabeli realukustus absoluutne, kui MySQL ei suuda SQL-lause täitmisel määrata skaneeritavat vahemikku, lukustab InnoDB tabel ka kogu tabeli.

7. InnoDB ei toeta täisteksti indekseerimist, samas kui MyISAM toetab. Täisteksti indekseerimine tähendab iga sõna jaoks charis, varcharis ja tekstis (v.a stopp-sõnad) vastupidise järjekorra indeksi loomist. MyISAM-i täistekstindeks on tegelikult kasutu, kuna see ei toeta hiina sõnade segmenteerimist ning kasutaja peab selle pärast sõnasegmentatsiooni andmetabelisse kirjutama ning sõnad, millel on alla 4 hiina märki, ignoreeritakse nagu stopp-sõnad.





Eelmine:Koosta eksperimentaalsed küsimused
Järgmine:SQL-lause Varchari tüübile
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com