La piattaforma MariaDB include una varietà di motori di archiviazione come componenti collegabili di MariaDB Enterprise Server. Ciò ti consente di scegliere il motore di archiviazione più adatto al carico di lavoro di un determinato database o tabella.
Il motore di archiviazione Aria è stato sviluppato come sostituto sicuro per gli arresti anomali di MyISAM ed è in fase di sviluppo attivo dal 2007. Quando MariaDB Server si riavvia dopo un arresto anomalo, Aria ripristina tutte le tabelle allo stato all'inizio di un'istruzione o all'inizio dell'ultima istruzione LOCK TABLES.
Motori di archiviazione MariaDB
Suggerimenti attuali per il motore di archiviazione in base al carico di lavoro:
- Carichi di lavoro pesanti in lettura:Aria
- Uso generale:InnoDB
- ACID:InnoDB
- Carichi di lavoro pesanti in scrittura:MyRocks
- Compressione:MyRocks
- Sharded:Ragno
- Carichi di lavoro analitici:MariaDB ColumnStore
Perché usare Aria per MariaDB
Mentre InnoDB è il motore di archiviazione predefinito per i database creati con MariaDB, Aria viene utilizzato per la maggior parte delle tabelle di sistema interne di MariaDB Enterprise Server 10.4. Aria ha un ingombro ridotto e consente una facile copia tra i sistemi ed è particolarmente adatta per carichi di lavoro pesanti in lettura. Aria dispone di un formato di archiviazione avanzato basato su pagine che consente prestazioni di memorizzazione nella cache superiori ed è ottimizzato per la concorrenza.
Negli ambienti del mondo reale, Aria produce risultati migliori per i costrutti aggregati (come GROUP BY o ORDER BY) che sono prevalenti nell'analisi e nell'elaborazione delle transazioni. L'analisi e l'elaborazione transazionale trovano elementi semplici come totali, massimi e statistiche. La maggior parte delle applicazioni si basa principalmente su query che utilizzano queste funzioni aggregate.
MariaDB utilizza il motore di archiviazione Aria per tutte le tabelle temporanee interne su disco. Poiché queste tabelle vengono spesso create internamente per eseguire query GROUP BY e DISTINCT, questi tipi di query possono trarre vantaggio dalle prestazioni di Aria, anche se la tabella sottoposta a query utilizza un motore diverso.
Il motore di archiviazione Aria è compilato per impostazione predefinita in MariaDB. Aria è inclusa in MariaDB Server (Enterprise e Community) senza installazione o configurazione aggiuntiva.
Considerazioni su Aria
Il modo migliore per utilizzare Aria dipenderà dal caso d'uso, dalla progettazione della tabella, dai modelli di accesso (query SQL), dagli obiettivi di prestazioni e dagli obiettivi di ripristino.
Vantaggi di Aria | Svantaggi di Aria |
| |
| |
| |
| |
| |
| |
| |
| |
|
Considera l'utilizzo di Aria:
- Se la tua applicazione esegue molte ricerche FULL-TEXT.
- Se la tua applicazione esegue molte query GROUP BY.
- Se la tua applicazione non richiede la conformità ACID o chiavi esterne.
- Se la tua applicazione utilizza attualmente MyISAM e richiede un motore più avanzato per consentire una migliore velocità, backup e ripristino automatico degli arresti anomali.
Confronti delle prestazioni
Una cosa è confrontare query isolate e un'altra è guardare esempi del mondo reale. Abbiamo eseguito alcuni test confrontando Aria, InnoDB e MyISAM.
Risultati delle prestazioni
InnoDB | Aria | MyISAM | |
SQL 1 | 2.389 | 0,580 | 0.634 |
SQL 2 | 2.169 | 0,530 | 0,598 |
Semplice benchmark:Aria vs MyISAM vs InnoDB
In questo semplice benchmark, è stata creata una tabella e popolata con 2 milioni di righe. Le query GROUP BY e ORDER BY sono state eseguite e copiate in tutti e tre i motori di archiviazione alternativi:InnoDB, Aria e MyISAM. Ogni test è stato eseguito 10 volte, con il tempo medio (secondi) registrato per tutti i test.
Impostazione e comandi utilizzati per il test:
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;
Continua a eseguire l'inserto sopra finché non ci sono circa 2 milioni di righe nella tabella.
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 |
Conferma che sia presente un buon rapporto tra righe distinte e totali:
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`;
Il mioISAM
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`;
Testa 2 diversi sql su InnoDB, Aria e 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
Riepilogo benchmark
I test mostrano che Aria è molto più veloce a livello GROUP BY rispetto a InnoDB o MyISAM. Aria è leggermente più veloce di MyISAM e garantisce un ambiente a prova di crash. I test delle prestazioni hanno rivelato che Aria è quattro volte più veloce di InnoDB. A causa delle differenze nei casi d'uso, ciascuno dovrebbe essere sottoposto a test in MariaDB Enterprise Server utilizzando sia Aria che InnoDB (o un altro, a seconda delle necessità).
Riepilogo
A seconda del carico di lavoro, Aria potrebbe fornire vantaggi in termini di prestazioni. Poiché è incluso con MariaDB Server e può essere applicato per database o per tabella (ENGINE=ARIA), puoi testare le prestazioni per il tuo carico di lavoro specifico senza costi aggiuntivi e con pochissimo sforzo aggiuntivo:basta collegarlo e provarlo.
Per ulteriori informazioni sui motori di archiviazione e sull'architettura di archiviazione, visita i motori di archiviazione ottimizzati per i carichi di lavoro.