Платформата MariaDB включва различни машини за съхранение като включващи се компоненти на MariaDB Enterprise Server. Това ви позволява да изберете механизма за съхранение, който най-добре отговаря на работното натоварване на конкретна база данни или таблица.
Двигателят за съхранение на Aria е разработен като безопасен от сривове заместител на MyISAM и е в активно развитие от 2007 г. Когато MariaDB Server се рестартира след срив, Aria възстановява всички таблици до състоянието от началото на изявлението или в началото от последния израз LOCK TABLES.
MariaDB Storage Engines
Текущи препоръки на механизма за съхранение въз основа на работното натоварване:
- Тежки натоварвания при четене:Aria
- Общо предназначение:InnoDB
- ACID:InnoDB
- Натоварвания с тежко писане:MyRocks
- Компресия:MyRocks
- Раздробено:Паяк
- Аналитични натоварвания:MariaDB ColumnStore
Защо да използвате Aria за MariaDB
Докато InnoDB е машината за съхранение по подразбиране за бази данни, създадени с MariaDB, Aria се използва за повечето вътрешни системни таблици от MariaDB Enterprise Server 10.4. Aria има малък отпечатък и позволява лесно копиране между системи и е особено подходяща за тежки натоварвания при четене. Aria има усъвършенстван формат за съхранение, базиран на страници, който позволява превъзходна производителност на кеширане и е оптимизиран за едновременност.
В реални среди, Aria дава по-добри резултати за агрегирани конструкции (като GROUP BY или ORDER BY), които преобладават в анализа и обработката на транзакции. Анализът и обработката на транзакции намират прости неща като суми, максимуми и статистически данни. Повечето приложения до голяма степен разчитат на заявки, които използват тези агрегатни функции.
MariaDB използва механизма за съхранение на Aria за всички вътрешни временни таблици на диска. Тъй като тези таблици често се създават вътрешно за изпълнение на заявки GROUP BY и DISTINCT, тези типове заявки могат да се възползват от производителността на Aria, дори ако запитаната таблица използва различен механизъм.
Машината за съхранение на Aria е компилирана по подразбиране в MariaDB. Aria е включена в MariaDB Server (Enterprise and Community) без допълнителна инсталация или настройка.
Съображения за Ария
Как най-добре да използвате Aria ще зависи от случая на използване, дизайна на таблицата, моделите на достъп (SQL заявки), целите за ефективност и целите за възстановяване.
Предимства на Aria | Недостатъци на Aria |
| |
| |
| |
| |
| |
| |
| |
| |
|
Помислете за използването на Aria:
- Ако приложението ви прави много търсения в ПЪЛЕН ТЕКСТ.
- Ако приложението ви прави много заявки GROUP BY.
- Ако приложението ви не се нуждае от съответствие с ACID или външни ключове.
- Ако приложението ви понастоящем използва MyISAM и изисква по-усъвършенствана машина, за да позволи по-добра скорост, архивиране и автоматично възстановяване при срив.
Сравнения на производителността
Едно е да сравнявате изолирани заявки и съвсем друго е да разглеждате примери от реалния свят. Направихме някои тестове, сравняващи Aria, InnoDB и MyISAM.
Резултати от производителността
InnoDB | Ария | MyISAM | |
SQL 1 | 2,389 | 0,580 | 0,634 |
SQL 2 | 2.169 | 0,530 | 0,598 |
Прост бенчмарк:Aria срещу MyISAM срещу InnoDB
В този прост бенчмарк беше създадена таблица и попълнена с 2 милиона реда. Заявките GROUP BY и ORDER BY бяха направени и копирани в трите алтернативни механизма за съхранение:InnoDB, Aria и MyISAM. Всеки тест се проведе 10 пъти, като средното време (секунди) се записва за всички тестове.
Настройка и команди, използвани за тестване:
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;
Продължете да изпълнявате горното вмъкване, докато около 2 милиона реда не се появят в таблицата.
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 |
Потвърдете, че има добро съотношение на отделни спрямо общите редове:
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 | +------------------------+
Ария
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`;
MyISAM
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`;
Тествайте 2 различни sql в InnoDB, Aria и 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
Обобщение на сравнителния анализ
Тестването показва, че Aria е много по-бърза на ниво GROUP BY от InnoDB или MyISAM. Aria е малко по-бърза от MyISAM и осигурява среда, безопасна при срив. Тестовете за производителност разкриха, че Aria е четири пъти по-бърза от InnoDB. Поради разликите в случаите на използване, всеки от тях трябва да бъде подложен на тестване в MariaDB Enterprise Server, като се използват както Aria, така и InnoDB (или друг, в зависимост от нуждите).
Резюме
В зависимост от вашето работно натоварване, Aria може да осигури предимства за производителност. Тъй като е включен в MariaDB Server и може да се прилага за база данни или за таблица (ENGINE=ARIA), можете да тествате производителността за вашето конкретно работно натоварване без допълнителни разходи и много малко допълнителни усилия – просто го включете и опитайте.
За повече информация относно механизмите за съхранение и архитектурата за съхранение, посетете оптимизирани за натоварване машини за съхранение.