MariaDB Server is oorspronkelijk afgeleid van MySQL en heeft daarom de pluggable storage engine-architectuur geërfd. Verschillende storage-engines hebben verschillende kenmerken in termen van prestaties, maar ook functies en mogelijkheden. Hierdoor kunnen gebruikers de juiste tool voor de taak kiezen in plaats van dezelfde opslagengine te gebruiken, ongeacht het doel van de gegevens, wat de vereisten zijn met betrekking tot gegevensopslag en hoe de gegevens moeten worden geopend. In deze blogpost willen we kijken naar de beschikbare opties in MariaDB en mogelijke use-cases bespreken voor de verschillende beschikbare storage-engines.
Wat is een opslagengine?
Maar laten we eerst eens kijken naar wat de opslagengine is? MariaDB bestaat uit meerdere lagen die samenwerken. SQL wordt door een van hen geparseerd, waarna MariaDB gegevens zoekt met behulp van een gemeenschappelijke API. Onder de motorkap bevindt zich een opslagengine die de gegevens bevat en reageert op de verzoeken om gegevens, de gegevens extraheert en beschikbaar stelt aan MariaDB.
Kortom, MariaDB verzendt een verzoek voor een rij en het is allemaal aan de opslagengine om het op te halen en terug te sturen. Het maakt MariaDB niet uit hoe de rij precies wordt opgeslagen of hoe deze wordt opgehaald, het is allemaal aan de implementatie binnen de opslagengine. Opslagengines kunnen ook verschillende functies implementeren. Transacties worden ook volledig aan de kant van de storage-engine afgehandeld. Dat is de reden waarom sommige van de ondersteuningstransacties en andere niet. Met deze architectuur is het mogelijk om verschillende storage-engines te schrijven, speciaal voor het oplossen van verschillende problemen.
Opslag-engines in MariaDB Server
MariaDB wordt geleverd met een set opslagengines. U kunt controleren welke beschikbaar zijn via een eenvoudig commando:
MariaDB [(none)]> SHOW STORAGE ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)
Zoals je kunt zien, zijn er veel, we zullen de belangrijkste bespreken.
InnoDB
InnoDB is duidelijk DE opslagengine. Transactioneel, gebouwd om met OLTP-verkeer om te gaan, kan echt geweldige prestaties leveren. Het is de standaardengine die in MariaDB wordt gebruikt en, tenzij u weet wat u doet, wilt u zich er waarschijnlijk aan houden voor uw database.
MijnISAM
MyISAM is een van de "originele" storage-engines die beschikbaar zijn in MySQL en vervolgens MariaDB. Het is niet transactioneel, waardoor het niet ideaal is voor de replicatie-instellingen en, nou ja, ook voor de meeste andere omgevingen. Het is nog steeds een zeer snelle engine, vooral met betrekking tot indextoegang, waardoor het geschikt is voor alleen-lezen workloads die niet worden beïnvloed door het vergrendelen van INSERT's en de algehele kwetsbaarheid van MyISAM.
Aria
Aria is een engine die voor MariaDB is gemaakt als vervanging voor MyISAM. Het is niet transactioneel, maar het is crashveilig waardoor het veel betrouwbaarder is. Momenteel wordt het gebruikt voor systeem- en tijdelijke tabellen, maar het kan ook worden gebruikt in plaats van MyISAM voor workloads die snelle, alleen-lezen toegang tot gegevens vereisen.
Geheugen
Dit is een all-in-memory engine die doorgaans wordt gebruikt voor tijdelijke in-memory tabellen. Het is niet persistent, maar zou kunnen werken voor sommige alleen-lezen werkbelastingen.
CSV
Deze opslagengine is ontworpen om gegevens in een bestand op te slaan als door komma's gescheiden waarden. Het is niet de meest gebruikte opslagengine, het is zeer gespecialiseerd, maar het kan nog steeds worden gebruikt om eenvoudig gegevens uit MariaDB te extraheren in andere databasesoftware, evenals in Excel of vergelijkbare software.
Opslag-engines in MariaDB Enterprise Server
MariaDB Enterprise Server wordt geleverd met een paar extra storage-engines ten opzichte van wat beschikbaar is in de community-editie. Laten we ze ook eens bekijken.
Kolomwinkel
Dit is een speciale opslagengine voor analytische werklast. Dankzij de specifieke manier van opslaan van de gegevens kunnen grote hoeveelheden gegevens, die vaak nodig zijn voor rapportage, sneller worden opgehaald. Dit kan de opslagengine van uw keuze zijn voor OLAP-workloads (OnLine Analytical Processing).
S3
S3-engine geeft je toegang tot gegevens in S3. Het is een niet-transactionele engine die bedoeld is om gebruikers de mogelijkheid te geven om gegevens in de S3 te archiveren. Alleen-lezen toegang is beschikbaar nadat de tabel is gemaakt.
Spin
Met de Spider-engine kun je meerdere MariaDB-databases via het netwerk verbinden, waardoor een shard-opslag ontstaat. Het is transactioneel en het maakt het voor gebruikers gemakkelijker om uit te schalen door de gegevens te splitsen over meerdere MariaDB Enterprise-servers, waardoor het verkeer en de werklast onder hen worden verdeeld.
MyRocks
MyRocks is een opslagengine die is ontwikkeld in Facebook en bedoeld is om de schrijfversterking te verminderen en de slijtage van SSD-schijven te minimaliseren. Het is een transactie-engine die de OLTP-werklast redelijk goed zou moeten verwerken, vooral de werklasten die typisch zijn voor sociale-mediawebsites. MyRocks wordt geleverd met een redelijk goede compressie, beter dan InnoDB, wat kan helpen om de kosten voor opslag aanzienlijk te verlagen als de dataset te groot wordt voor InnoDB om correct te verwerken.
Conclusie
Zoals je kunt zien, zijn er talloze opties die zowel MariaDB Enterprise als Community Server bieden met betrekking tot de manier waarop gegevens kunnen worden opgeslagen. Er zijn storage-engines die uitblinken in alleen-lezen workloads, OLAP of grote datasets. Het is aan de gebruiker om een goede pasvorm te kiezen. Houd er rekening mee dat u bij twijfel altijd bij InnoDB kunt blijven, dat over het algemeen vrij goede prestaties levert en in de meeste gevallen meer dan genoeg zou moeten zijn. Het is voor die randgevallen waar je misschien iets meer geschikts moet zoeken.