MariaDB Platform bevat een verscheidenheid aan opslag-engines als pluggable componenten van MariaDB Enterprise Server. Hierdoor kunt u de opslagengine kiezen die het beste past bij de werklast van een bepaalde database of tabel.
De Aria-opslagengine is ontwikkeld als een crashveilige vervanging voor MyISAM en is sinds 2007 actief in ontwikkeling. Wanneer MariaDB Server opnieuw wordt opgestart na een crash, herstelt Aria alle tabellen naar de staat vanaf het begin van een instructie of aan het begin van de laatste LOCK TABLES-instructie.
MariaDB-opslagengines
Huidige aanbevelingen voor opslagengine op basis van werkbelasting:
- Lees-zware werkbelasting:Aria
- Algemeen doel:InnoDB
- ACID:InnoDB
- Schrijf-zware werkbelasting:MyRocks
- Compressie:MyRocks
- Sharded:Spin
- Analytische workloads:MariaDB ColumnStore
Waarom Aria gebruiken voor MariaDB
Terwijl InnoDB de standaard opslagengine is voor databases die met MariaDB zijn gemaakt, wordt Aria gebruikt voor de meeste interne systeemtabellen van MariaDB Enterprise Server 10.4. Aria heeft een kleine footprint en zorgt voor eenvoudig kopiëren tussen systemen en is bijzonder geschikt voor leesintensieve workloads. Aria heeft een geavanceerd op pagina's gebaseerd opslagformaat dat superieure cachingprestaties mogelijk maakt en is geoptimaliseerd voor gelijktijdigheid.
In echte omgevingen produceert Aria betere resultaten voor geaggregeerde constructies (zoals GROUP BY of ORDER BY) die veel voorkomen in analyses en transactieverwerking. Analytics en transactieverwerking vinden eenvoudige dingen zoals totalen, maxima en statistieken. De meeste toepassingen zijn sterk afhankelijk van query's die deze aggregatiefuncties gebruiken.
MariaDB gebruikt de Aria-opslagengine voor alle interne tijdelijke tabellen op de schijf. Aangezien deze tabellen vaak intern worden gemaakt om GROUP BY- en DISTINCT-query's uit te voeren, kunnen dit soort query's profiteren van de prestaties van Aria, zelfs als de opgevraagde tabel een andere engine gebruikt.
De Aria-opslagengine is standaard ingecompileerd in MariaDB. Aria is inbegrepen bij MariaDB Server (Enterprise en Community) zonder extra installatie of configuratie.
Aria-overwegingen
Hoe u Aria het beste kunt gebruiken, hangt af van de use case, het tabelontwerp, toegangspatronen (SQL-query's), prestatiedoelen en hersteldoelen.
Voordelen van Aria | Nadelen van Aria |
| |
| |
| |
| |
| |
| |
| |
| |
|
Overweeg om Aria te gebruiken:
- Als uw toepassing veel FULL-TEXT-zoekopdrachten uitvoert.
- Als uw toepassing veel GROUP BY-query's uitvoert.
- Als uw toepassing geen ACID-compliance of externe sleutels nodig heeft.
- Als uw toepassing momenteel MyISAM gebruikt en een geavanceerdere engine vereist voor betere snelheid, back-ups en geautomatiseerd herstel na crashes.
Prestatievergelijkingen
Het is één ding om geïsoleerde zoekopdrachten te vergelijken en heel iets anders om naar praktijkvoorbeelden te kijken. We hebben wat tests gedaan om Aria, InnoDB en MyISAM te vergelijken.
Prestatieresultaten
InnoDB | Aria | MijnISAM | |
SQL 1 | 2.389 | 0,580 | 0.634 |
SQL 2 | 2.169 | 0.530 | 0,598 |
Eenvoudige benchmark:Aria vs MyISAM vs InnoDB
In deze eenvoudige benchmark is een tabel gemaakt en gevuld met 2 miljoen rijen. GROUP BY en ORDER BY-query's werden uitgevoerd en gekopieerd naar alle drie de alternatieve storage-engines:InnoDB, Aria en MyISAM. Elke test werd 10 keer uitgevoerd, waarbij de gemiddelde tijd (seconden) voor alle tests werd geregistreerd.
Setup en commando's gebruikt voor het testen:
INSERT INTO fact VALUES (1,1,'Justin',md5(''), .1); INSERT INTO fact SELECT FLOOR(1+ rand()*9999), FLOOR(1 + rand()*499), (select name from names where id = 1 + rand() * 4), MD5(1+rand()*9999), rand() FROM fact;
Blijf de bovenstaande invoeging uitvoeren totdat er ongeveer 2 miljoen rijen in de tabel staan.
MariaDB [test2]> SELECT count(*) from fact; +----------+ | count(*) | +----------+ | 2097152 | +----------+ MariaDB [test2]> SHOW CREATE TABLE fact; +-------+------------------------------- | Table | Create Table +-------+------------------------------- | fact | CREATE TABLE `fact` ( `dim1` int(11) DEFAULT NULL, `dim2` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `hash` varchar(32) DEFAULT NULL, `measure1` double DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
Bevestig dat er een goede verhouding tussen verschillende en totale rijen aanwezig is:
MariaDB [test2]> SELECT count(distinct (dim1)) from fact; +------------------------+ | count(distinct (dim1)) | +------------------------+ | 9999 | +------------------------+ MariaDB [test2]> SELECT count(distinct (dim2)) from fact; +------------------------+ | count(distinct (dim2)) | +------------------------+ | 499 | +------------------------+ MariaDB [test2]> SELECT count(distinct (name)) from fact; +------------------------+ | count(distinct (name)) | +------------------------+ | 1 | +------------------------+
Aria
CREATE TABLE `test2`.`fact2` ( `dim1` INT(11) NULL DEFAULT NULL, `dim2` INT(11) NULL DEFAULT NULL, `name` VARCHAR(20) NULL DEFAULT NULL, `hash` VARCHAR(32) NULL DEFAULT NULL, `measure1` DOUBLE NULL DEFAULT NULL ) ENGINE=ARIA TRANSACTIONAL=1; INSERT INTO `test2`.`fact2` (`dim1`, `dim2`, `name`, `hash`, `measure1`) SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
MijnISAM
CREATE TABLE `test2`.`fact3` ( `dim1` INT(11) NULL DEFAULT NULL, `dim2` INT(11) NULL DEFAULT NULL, `name` VARCHAR(20) NULL DEFAULT NULL, `hash` VARCHAR(32) NULL DEFAULT NULL, `measure1` DOUBLE NULL DEFAULT NULL ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM; INSERT INTO `test2`.`fact3` (`dim1`, `dim2`, `name`, `hash`, `measure1`) SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
Test 2 verschillende sqls in InnoDB, Aria en MyISAM:
— sql 1:
SELECT dim1, dim2 from fact group by dim1 order by dim1; -- 9999 rows in set
— sql 2:
SELECT dim1, dim2 from fact group by dim2 order by dim2; -- 499 rows in set
Benchmarkoverzicht
Tests tonen aan dat Aria veel sneller is op GROUP BY-niveau dan InnoDB of MyISAM. Aria is iets sneller dan MyISAM en zorgt voor een crashveilige omgeving. Uit de prestatietests bleek dat Aria vier keer sneller is dan InnoDB. Vanwege de verschillen in gebruikssituaties, moet elk ervan worden getest in de MariaDB Enterprise Server met zowel Aria als InnoDB (of een andere, afhankelijk van de behoefte).
Samenvatting
Afhankelijk van uw werklast kan Aria prestatievoordelen bieden. Omdat het wordt meegeleverd met MariaDB Server en kan worden toegepast per database of per tabel (ENGINE=ARIA), kunt u de prestaties voor uw specifieke werklast testen zonder extra kosten en met heel weinig extra inspanning - sluit het gewoon aan en probeer het.
Ga voor meer informatie over storage-engines en storage-architectuur naar voor workloads geoptimaliseerde storage-engines.