MariaDB
 sql >> Database >  >> RDS >> MariaDB

Scelta del motore di archiviazione:Aria

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
  • Inserimento simultaneo nella stessa tabella da più fonti
  • Caricamento di massa inefficiente
  • Capacità cache per pagina
  • Blocco a livello del tavolo
  • Backup efficiente di MariaDB Enterprise Backup

  • Manca il supporto nativo per la chiave esterna
  • Formato di riga PAGE migliorato:a prova di crash per impostazione predefinita; operazioni; fornisce un notevole miglioramento della velocità per la memorizzazione nella cache dei dati, specialmente su Windows
  • Manca il supporto INSERT RITARDATO.
  • Tabelle e indici a prova di crash
  • Limitazioni di memorizzazione nella cache:cache di chiavi multiple e dipende dalla cache del disco del sistema operativo
  • Ripristino in crash all'inizio di un'ultima istruzione o blocco
  • overhead del formato PAGE:dimensione minima del file 16K; stoccaggio di piccole file; stessa dimensione della pagina per indice e dati.
  • INDICE DI CARICO ottimizzato
  • Non supporta le transazioni (es. ROLLBACK e COMMIT)
  • Compatibile con i formati MyISAM ROW e PAGE
  • Basso sovraccarico
  • 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.