legutóbbi módosítás: 2020. július 10.
Ez a fejezet a MySQL tárolómotorokról szól.
A tárolómotor egy olyan szoftvermodul, amelyet az adatbázis-kezelő rendszer az adatok létrehozására, olvasására, frissítésére használ egy adatbázisból. A MySQL-ben kétféle tárolómotor létezik: tranzakciós és nem tranzakciós.
A MySQL 5.5 és újabb verziók esetében az alapértelmezett tárolómotor az InnoDB.Az 5.5 verzió előtti MySQL alapértelmezett tárolómotorja a MyISAM volt. A megfelelő tárolómotor kiválasztása fontos stratégiai döntés, amely hatással lesz a jövőbeli fejlesztésekre. Ebben a bemutatóban a MyISAM, InnoDB, Memory ésCSV tárolómotorokat fogjuk használni. Ha Ön új a MySQL-ben, és a MySQL adatbázis-kezelő rendszert tanulmányozza, akkor ez nem jelent különösebb gondot. Ha egy termelési adatbázist tervez, akkora dolgok bonyolultabbá válnak.
Tárolómotorok listája
MySQL támogatott tárolómotorok:
- InnoDB
- MyISAM
- Memory
- CSV
- Merge
- Archive
- Federated
- Blackhole
- Example
AzInnoDB a legszélesebb körben használt tranzakciótámogatott tárolómotor. Ez egy ACID kompatibilis tárolómotor. Támogatja a sorszintű zárolást, az összeomlás utáni helyreállítást és a többverziós párhuzamossági ellenőrzést. Ez az egyetlen olyan motor, amely idegen kulcsú referenciális integritási korlátozást biztosít. Az Oracle az InnoDB használatát ajánlja a táblákhoz, kivéve a speciális felhasználási eseteket.
A MyISAM az eredeti tárolómotor. Ez egy gyors tárolómotor.Nem támogatja a tranzakciókat. A MyISAM biztosítja a táblák kiegyenlítését. Leginkább a webes és adattárházakban használják.
A memóriatároló motor a táblákat a memóriában hozza létre. Ez a leggyorsabbmotor. Táblaszintű zárolást biztosít. Nem támogatja a tranzakciókat.A memóriatároló motor ideális ideiglenes táblák létrehozására vagy gyors keresésekre.Az adatok az adatbázis újraindításakor elvesznek.
A CSV CSV fájlokban tárolja az adatokat. Nagy rugalmasságot biztosít, mivel az ilyen formátumú adatok könnyen integrálhatók más alkalmazásokba.
Az összevonás a mögöttes MyISAM táblákon működik. Az egyesítő táblák segítségével könnyebben kezelhetők a nagy mennyiségű adatok. Logikailag egy sor azonos MyISAM táblát csoportosít, és egy objektumként hivatkozik rájuk.Jó adattárházi környezetekben.
Az archív tárolómotor nagy sebességű beszúrásra optimalizált. Az adatokat beszúráskor tömöríti. Nem támogatja a tranzakciókat. Ideális nagy mennyiségű, ritkán hivatkozott történelmi, archivált adatok tárolására és visszakeresésére.
A Blackhole tárolómotor elfogadja, de nem tárolja az adatokat. A lekérdezések mindig üres halmazt adnak vissza. A funkció használható olyan elosztott adatbázis-tervezésben, ahol az adatok automatikusan replikálódnak, de nem tárolódnak helyben. Ez a tárolómotor teljesítménytesztek vagy egyéb tesztek elvégzésére használható.
A föderált tárolómotor lehetőséget nyújt a MySQL szerverek szétválasztására, hogy több fizikai szerverből egy logikai adatbázist hozzon létre.A helyi szerveren lévő lekérdezések automatikusan végrehajtódnak a távoli (föderált) táblákon. A helyi táblákon nem tárolódnak adatok.Jó elosztott környezetekhez.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engineTransactions: NO XA: NO Savepoints: NO...
A SHOW ENGINES
parancs megmutatja az összes elérhető motort, amelyet a kiszolgáló támogat.
A megfelelő motor kiválasztása
Nincs olyan tárolómotor, amely minden körülmények között ideális lenne. Egyesek bizonyos körülmények között a legjobban teljesítenek, míg más helyzetekben rosszabbul. Vannak kompromisszumok, amelyeket figyelembe kell venni. A biztonságosabb megoldás több erőforrást igényel; lehet, hogy lassabb, több CPU-időt és lemezterületet igényel. A MySQL nagyon rugalmas abban a tényben, hogy több különböző tárolómotort biztosít. Ezek közül néhányat, például az Archive motort, speciális helyzetekben való használatra hozták létre.
Egyes esetekben a válasz egyértelmű. Amikor bizonyos fizetési rendszerekkel van dolgunk, kötelességünk a legbiztonságosabb megoldást használni. Nem engedhetjük meg magunknak, hogy ilyen érzékeny adatokat elveszítsünk. Az InnoDB a megfelelő megoldás. Ha teljes szöveges keresést akarunk, akkor választhatjuk a MyISAM-ot vagy az InnoDB-t.. Csak az InnoDB támogatja az idegen kulcsú referenciális integritási korlátozást, és ha ezt a korlátozást tervezzük használni, akkor a választás egyértelmű.
Tárolómotorok megadása és módosítása
A tárolómotor megadása a tábla létrehozásakor történik.
mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';
A ENGINE
kulcsszó megadja az adott táblához használt tárolómotort.
Ha nem adjuk meg kifejezetten a tárolómotort, akkor az alapértelmezett tárolómotort használjuk. A MySQL 5.5 előtt az alapértelmezett tárolómotor a MyISAM volt. A MySQL 5.5 és újabb verziók esetében az alapértelmezett tárolómotor az InnoDB.
Egy másik tárolómotorra való áttérés lehetséges. Vegye figyelembe, hogy a nagy táblák migrálása hosszú időt vehet igénybe. A táblák migrálásakor is problémákba ütközhetünk. Előfordulhat, hogy egyes funkciók nem támogatottak mindkét táblában.
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)
Ez az SQL utasítás kideríti a mydb
adatbázisban lévő Cars
táblához használt tárolómotort. Használhatjuk a SELECT CREATE TABLE Cars
SQL utasítást is. A information_schema
egy olyan tábla, amely a tábláinkkal kapcsolatos technikai információkat tárolja.
mysql> ALTER TABLE Cars ENGINE='MyISAM';
Ez az SQL utasítás a Cars
tábla tárolómotorját MyISAM-ra változtatja.
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| MyISAM |+--------+1 row in set (0,00 sec)
Most a tábla tárolómotorja a MyISAM.
A MySQL oktatóanyagnak ebben a részében a tárolómotorokkal foglalkoztunk.