Wanneer een database wordt gemaakt, is een vaak over het hoofd geziene, maar kritieke factor voor de prestaties de opslagengine (vooral naarmate de database groeit). In veel gevallen is de verleiding groot om gewoon de standaard te accepteren en door te gaan met het ontwikkelen van uw project. Dit kan later in de levenscyclus van de applicatie leiden tot onverwachte negatieve gevolgen voor de prestaties, back-ups en gegevensintegriteit, bijvoorbeeld wanneer uw team analyses en MySQL-dashboards implementeert.
Om deze mogelijke valkuilen te vermijden, gaan we enkele van de meest gebruikte storage-engines die worden ondersteund door MySQL (vanaf versie 5.7) nader bekijken.
Ondersteunde opslagengines
Wat zijn mijn opties?
Standaard ondersteunt MySQL 5.7 tien opslagengines (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated en Voorbeeld). Gebruik deze opdracht om te zien welke beschikbaar zijn en worden ondersteund door uw server:
mysql> SHOW MOTOREN\G
Dit zal een lijst met opslag-engines weergeven en u vertellen welke beschikbaar zijn, niet beschikbaar, of die momenteel zijn ingesteld op de standaard. In de kolom 'Ondersteuning:' wordt respectievelijk 'JA', 'NEE' of 'DEFAULT' weergegeven.
In sommige toepassingen kan de behoefte ontstaan om verschillende opslagengines te hebben voor verschillende tabellen in dezelfde database. Dit is een voorbeeld van waarom u het datamodel voor uw toepassing zorgvuldig moet plannen. In de meeste gevallen is er echter maar één opslagengine nodig.
Opslag-engine-mogelijkheden
Waar zijn ze goed in?
Laten we enkele van de meest gebruikte opslagengines nader bekijken. Dit geeft ons een idee van waarvoor elke engine is ontworpen en hoe ze het beste kunnen worden gebruikt om onze zakelijke doelen te bereiken.
InnoDB: De standaardoptie in MySQL 5.7, InnoDB is een robuuste opslagengine die het volgende biedt:
- Volledige ACID-conformiteit
- Bevestigen, terugdraaien en crashherstel
- Vergrendeling op rijniveau
- BUITENLANDSE SLEUTEL referentiële integriteitsbeperkingen
- Verhoog de gelijktijdigheid van meerdere gebruikers (via niet-vergrendelende leesbewerkingen)
Met de bovenstaande functionaliteit die InnoDB biedt, is het duidelijk waarom het de standaard engine is in MySQL. Het is een engine die goed presteert en veel van de vereiste attributen biedt die elke database nodig heeft. Een uitgebreide bespreking van al zijn mogelijkheden valt echter buiten het bestek van dit artikel. Dit is de engine die waarschijnlijk in de meeste toepassingen zal worden gebruikt.
MijnISAM: De functionaliteit die MyISAM onderscheidt, is de mogelijkheid voor:
- zoekindexen voor volledige tekst
- vergrendeling op tafelniveau
- gebrek aan ondersteuning voor transacties
Hoewel het een snelle opslagengine is, is het het meest geschikt voor gebruik in leesintensieve en meestal gelezen applicaties zoals datawarehousing en webapplicaties die geen transactieondersteuning of ACID-compliance nodig hebben.
NDB (of NDBCLUSTER):Als uw database zal werken in een geclusterde omgeving, is NDB de opslagengine bij uitstek. Het is het beste wanneer je nodig hebt:
- Gedistribueerde computergebruik
- Hoge redundantie
- Hoge beschikbaarheid
- De hoogst mogelijke uptimes
Houd er rekening mee dat ondersteuning voor NDB niet is opgenomen in de distributie van standaard MySQL Server 5.7-binaries. U moet updaten naar de nieuwste binaire versie van MySQL Cluster. Maar als je in een clusteromgeving ontwikkelt, heb je waarschijnlijk de nodige ervaring om met deze taken om te gaan.
CSV: Een handige opslagengine wanneer gegevens moeten worden gedeeld met andere toepassingen die gegevens in CSV-indeling gebruiken. De tabellen worden opgeslagen als door komma's gescheiden tekstbestanden. Hoewel dit het delen van gegevens met scripts en applicaties gemakkelijker maakt, is een nadeel dat de CSV-bestanden niet worden geïndexeerd. De gegevens moeten dus worden opgeslagen in een InnoDB-tabel tot de import-/exportfase van het proces.
Zwart gat: Deze engine accepteert maar slaat geen gegevens op. Net als bij UNIX /dev/null, retourneren query's altijd een lege set. Dit kan handig zijn in een gedistribueerde databaseomgeving waar u gegevens niet lokaal of in prestatie- of andere testsituaties wilt opslaan.
Archief: Zoals de naam al aangeeft, is deze engine uitstekend geschikt voor historische gegevens waarnaar zelden wordt verwezen. De tabellen zijn niet geïndexeerd en compressie vindt plaats bij het invoegen. Transacties worden niet ondersteund. Gebruik deze opslagengine voor het archiveren en ophalen van gegevens uit het verleden.
Federaal: Deze opslagengine is bedoeld voor het maken van een enkele, lokale, logische database door verschillende fysieke MySQL-servers te koppelen. Er worden geen gegevens opgeslagen op de lokale server en zoekopdrachten worden automatisch uitgevoerd op de respectieve externe server. Het is perfect voor gedistribueerde datamart-omgevingen en kan de prestaties enorm verbeteren bij het gebruik van MySQL voor analytische rapportage.
Een opslagengine aanwijzen
Hoe wijzig ik welke opslagengine wordt gebruikt?
De storage-engine die wordt gebruikt, wordt vastgesteld bij het maken van de tabel. Zoals eerder vermeld, is InnoDB de standaard opslagengine in MySQL-versies 5.5 en hoger. Als u een andere wilt gebruiken, kunt u dit het beste doen in uw CREATE TABLE-statement. Laten we bijvoorbeeld zeggen dat u een tabel hebt geïdentificeerd die de CSV-opslagengine moet gebruiken. Uw overdreven vereenvoudigde CREATE TABLE-instructie kan er als volgt uitzien:
mysql> TABEL MAKEN Shared_Data (
-> Data_ID INTEGER NIET NULL,
-> Naam VARCHAR(50) NOT NULL,
-> Beschrijving VARCHAR(150)
-> ) ENGINE=’CSV’;
Waarna we zoals gewoonlijk een INSERT-instructie zouden uitvoeren:
mysql> INSERT INTO Shared_Data VALUES
-> (1,'apparaat één', 'de nieuwste versie van de beste technologie'),
-> (2,'apparaat twee', 'de snelste op de markt');
Als het gelukt is, als u de databasedirectory inspecteert, zou er nu een 'Shared_Data.CSV'-bestand moeten zijn dat de records bevat die u in de Shared_Data-tabel hebt ingevoegd.
Dezelfde methode kan worden gebruikt voor elk van de vele storage-engines die MySQL ondersteunt. Hoewel het mogelijk is om de opslagengine te wijzigen nadat een tabel is gemaakt met een ALTER TABLE
verklaring, is het de beste gewoonte om dienovereenkomstig te plannen en in het begin in te stellen.
Tot slot
MySQL heeft veel opties
Zoals u kunt zien, biedt MySQL ondersteuning voor opslagengines die zijn ontworpen om zeer verschillende taken in veel verschillende omgevingen uit te voeren. Door te identificeren welke engines we moeten gebruiken en wanneer we ze moeten gebruiken, kunnen we onnodige complicaties en prestatieproblemen voorkomen naarmate onze applicaties schalen.
Of u nu 99,999% uptime en betrouwbaarheid op uw gedistribueerde computercluster nodig heeft of ACID-compatibele transactie-ondersteuning met FOREIGN KEY-beperkingen, MySQL heeft een opslagengine die aan uw behoeften voldoet.
Zoals altijd is een goede planning en identificatie van uw projectdoelen en -vereisten de beste manier om nauwkeurig te bepalen welke storage-engines het meest geschikt zijn voor uw toepassing. Hopelijk is dit artikel een nuttig startpunt om je daarbij te helpen.
Dit artikel verscheen oorspronkelijk hier. Opnieuw gepubliceerd met toestemming. Dien hier uw auteursrechtklachten in.