MariaDB Server първоначално е извлечен от MySQL и следователно е наследил своята архитектура на механизма за съхранение на данни. Различните двигатели за съхранение имат различни характеристики по отношение на производителност, но също така характеристики и възможности. Това позволява на потребителите да изберат правилния инструмент за работата, вместо да използват една и съща машина за съхранение, независимо каква е целта на данните, какви са изискванията по отношение на съхранението на данни и как трябва да се осъществява достъп до данните. В тази публикация в блога бихме искали да разгледаме наличните опции в MariaDB и да обсъдим потенциални случаи на използване на различните налични машини за съхранение.
Какво е машина за съхранение?
Първо обаче нека да разгледаме какво представлява механизмът за съхранение? MariaDB се състои от множество слоеве, които работят заедно. SQL се анализира от един от тях, след което MariaDB посяга към данни, използвайки общ API. Под капака има двигател за съхранение, който съдържа данните и реагира на заявките за данни, извлича данните и ги прави достъпни за MariaDB.
Накратко, MariaDB изпраща заявка за ред и всичко зависи от механизма за съхранение да го извлече и изпрати обратно. MariaDB не се интересува как точно се съхранява редът или как ще бъде извлечен, всичко зависи от имплементацията в механизма за съхранение. Двигателите за съхранение могат също да изпълняват различни функции. Транзакциите се обработват също изцяло от страна на механизма за съхранение. Ето защо някои от транзакциите за поддръжка, а други не. С тази архитектура е възможно да се пишат различни механизми за съхранение, посветени на решаването на различни проблеми.
Съхранителни машини в MariaDB сървър
MariaDB се предлага с набор от машини за съхранение. Можете да проверите кои са налични чрез проста команда:
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)
Както виждате, има много от тях, ще разгледаме най-важните.
InnoDB
InnoDB, очевидно, е машината за съхранение. Транзакционните, създадени да се справят с OLTP трафик, могат да осигурят наистина страхотна производителност. Това е механизмът по подразбиране, използван в MariaDB и, освен ако не знаете какво правите, вероятно искате да се придържате към него за вашата база данни.
MyISAM
MyISAM е една от „оригиналните“ машини за съхранение, налични в MySQL и след това в MariaDB. Той не е транзакционен, което го прави не идеален за настройките за репликация и, добре, за повечето други среди. Той все още е много бърз двигател, особено по отношение на достъпа до индекси, което го прави подходящ за работни натоварвания само за четене, които няма да бъдат засегнати от заключването на INSERT и цялостната крехкост на MyISAM.
Ария
Aria е двигател, създаден за MariaDB като заместител на MyISAM. Не е транзакционен, но е безопасен при срив, което го прави много по-надежден. Понастоящем се използва за системни и временни таблици, но може да се използва и вместо MyISAM за натоварвания, изискващи бърз достъп само за четене до данни.
Памет
Това е машина за всичко в паметта, която обикновено се използва за временни таблици в паметта. Не е постоянен, но може да работи за някои натоварвания само за четене.
CSV
Този механизъм за съхранение е предназначен да съхранява данни във файл като стойности, разделени със запетая. Това не е най-използваният механизъм за съхранение, той е много специализиран, но все пак може да се използва за лесно извличане на данни от MariaDB във всеки друг софтуер за база данни, както и в Excel или подобен софтуер.
Съхранителни машини в MariaDB Enterprise Server
MariaDB Enterprise Server се предлага с няколко допълнителни механизма за съхранение над това, което е налично в изданието на общността. Нека да разгледаме и тях.
ColumnStore
Това е специална машина за съхранение за аналитично натоварване. Благодарение на специфичния начин на съхранение на данните, той ускорява извличането на големи обеми данни, често необходими за отчитане. Това може да е избраният от вас механизъм за съхранение за OLAP (онлайн аналитична обработка) работни натоварвания.
S3
S3 машината ви позволява достъп до данни, намиращи се в S3. Това е не-транзакционен двигател, предназначен да даде на потребителите възможност да архивират данни в S3. Достъп само за четене е достъпен след създаването на таблицата.
Паяк
Spider engine ви позволява да свързвате множество бази данни на MariaDB в мрежата, създавайки разчленено хранилище. Той е транзакционен и улеснява мащабирането на потребителите, като разделя данните между множество MariaDB Enterprise Servers, разпределяйки трафика и работното натоварване между тях.
MyRocks
MyRocks е двигател за съхранение, разработен във Facebook, предназначен да намали усилването при запис и да сведе до минимум износването на SSD устройства. Това е транзакционен двигател, който трябва да се справи доста добре с натоварването на OLTP, особено натоварванията, типични за уебсайтовете на социалните медии. MyRocks идва с доста добра компресия, по-добра от InnoDB, което може да помогне за значително намаляване на разходите за съхранение, ако наборът от данни стане твърде голям, за да може InnoDB да се справя правилно.
Заключение
Както можете да видите, има множество опции, предоставени както от MariaDB Enterprise, така и от Community Server по отношение на начина, по който могат да се съхраняват данните. Има машини за съхранение, които се отличават с работни натоварвания само за четене, OLAP или големи набори от данни. От потребителя зависи да избере подходящото. Моля, имайте предвид, че когато се съмнявате, винаги можете да се придържате към InnoDB, който осигурява доста добра производителност като цяло и би трябвало да е повече от достатъчен за повечето случаи. Това е за онези крайни случаи, в които може да се наложи да потърсите нещо по-подходящо.