MariaDB Server pierwotnie wywodził się z MySQL i dlatego odziedziczył architekturę podłączanego silnika pamięci masowej. Różne silniki pamięci masowej mają różne cechy pod względem wydajności, ale także funkcji i możliwości. Dzięki temu użytkownicy mogą wybrać odpowiednie narzędzie do pracy zamiast korzystać z tego samego silnika pamięci masowej, bez względu na to, jaki jest cel danych, jakie są wymagania dotyczące przechowywania danych i sposobu dostępu do danych. W tym poście na blogu chcielibyśmy przyjrzeć się opcjom dostępnym w MariaDB i omówić potencjalne przypadki użycia różnych dostępnych silników pamięci masowej.
Co to jest silnik pamięci masowej?
Najpierw jednak przyjrzyjmy się, czym jest silnik pamięci masowej? MariaDB składa się z wielu warstw, które działają razem. SQL jest analizowany przez jeden z nich, a następnie MariaDB sięga po dane, korzystając ze wspólnego API. Pod maską znajduje się silnik pamięci masowej, który zawiera dane i reaguje na żądania danych, wyodrębnia dane i udostępnia je MariaDB.
Krótko mówiąc, MariaDB wysyła żądanie wiersza, a mechanizm pamięci masowych musi je pobrać i odesłać. MariaDB nie dba o to, jak dokładnie wiersz jest przechowywany ani jak ma być pobierany, wszystko zależy od implementacji w silniku pamięci masowej. Silniki pamięci masowej mogą również implementować różne funkcje. Transakcje są obsługiwane również w całości po stronie silnika pamięci masowej. Dlatego niektóre transakcje wsparcia, a niektóre nie. Dzięki tej architekturze możliwe jest pisanie różnych silników pamięci masowej, przeznaczonych do rozwiązywania różnych problemów.
Silniki pamięci na serwerze MariaDB
MariaDB zawiera zestaw silników pamięci masowej. Możesz sprawdzić, które z nich są dostępne, za pomocą prostego polecenia:
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)
Jak widać, jest ich wiele, omówimy najważniejsze.
InnoDB
InnoDB to oczywiście silnik pamięci masowej. Transakcyjny, zbudowany do radzenia sobie z ruchem OLTP, może zapewnić naprawdę świetną wydajność. Jest to domyślny silnik używany w MariaDB i jeśli nie wiesz, co robisz, prawdopodobnie chcesz go trzymać w swojej bazie danych.
MyISAM
MyISAM to jeden z „oryginalnych” silników pamięci masowej dostępnych w MySQL, a następnie w MariaDB. Nie jest transakcyjny, co sprawia, że nie jest idealny do konfiguracji replikacji, a także, cóż, większości innych środowisk. Jest to nadal bardzo szybki silnik, zwłaszcza w odniesieniu do dostępu do indeksu, dzięki czemu nadaje się do obciążeń tylko do odczytu, na które nie ma wpływu blokowanie wkładek INSERT i ogólna niestabilność MyISAM.
Aria
Aria to silnik stworzony dla MariaDB jako zamiennik MyISAM. Nie jest transakcyjny, ale jest bezpieczny w przypadku awarii, dzięki czemu jest bardziej niezawodny. Obecnie jest używany do tabel systemowych i tymczasowych, ale może być również używany zamiast MyISAM do obciążeń wymagających szybkiego dostępu do danych tylko do odczytu.
Pamięć
Jest to mechanizm all-in-memory, który jest zwykle używany do tymczasowych tabel w pamięci. Nie jest trwały, ale może działać w przypadku niektórych obciążeń tylko do odczytu.
CSV
Ten mechanizm przechowywania jest przeznaczony do przechowywania danych w pliku jako wartości oddzielonych przecinkami. Nie jest to najczęściej używany silnik pamięci masowej, jest bardzo wyspecjalizowany, ale nadal można go używać do łatwego wyodrębniania danych z MariaDB do dowolnego innego oprogramowania bazodanowego, a także Excela lub podobnego oprogramowania.
Silniki pamięci masowej w MariaDB Enterprise Server
MariaDB Enterprise Server jest dostarczany z kilkoma dodatkowymi silnikami pamięci masowej w stosunku do tego, co jest dostępne w wersji Community. Przyjrzyjmy się im również.
Sklep z kolumnami
Jest to dedykowany silnik pamięci masowej dla obciążeń analitycznych. Dzięki specyficznemu sposobowi przechowywania danych przyspiesza pobieranie dużych ilości danych, często potrzebnych do raportowania. Może to być wybrany przez Ciebie silnik pamięci masowej dla obciążeń OLAP (OnLine Analytical Processing).
S3
Silnik S3 umożliwia dostęp do danych znajdujących się w S3. Jest to silnik nietransakcyjny, który ma dać użytkownikom możliwość archiwizacji danych w S3. Dostęp tylko do odczytu jest dostępny po utworzeniu tabeli.
Pająk
Silnik Spider umożliwia łączenie wielu baz danych MariaDB przez sieć, tworząc magazyn sharded. Jest transakcyjny i ułatwia użytkownikom skalowanie, dzieląc dane na wiele serwerów MariaDB Enterprise Server, rozdzielając między nimi ruch i obciążenie.
Moje skały
MyRocks to silnik pamięci masowej opracowany na Facebooku, który ma na celu zmniejszenie wzmocnienia zapisu i zminimalizowanie zużycia dysków SSD. Jest to silnik transakcyjny, który powinien dość dobrze radzić sobie z obciążeniami OLTP, zwłaszcza typowymi dla serwisów społecznościowych. MyRocks jest wyposażony w całkiem dobrą kompresję, lepszą niż InnoDB, co może znacznie zmniejszyć wydatki na pamięć masową, jeśli zestaw danych stanie się zbyt duży, aby InnoDB mógł prawidłowo obsłużyć.
Wnioski
Jak widać, zarówno MariaDB Enterprise, jak i Community Server udostępnia wiele opcji dotyczących sposobu przechowywania danych. Istnieją silniki pamięci masowej, które doskonale sprawdzają się w obciążeniach tylko do odczytu, OLAP lub dużych zestawach danych. Wybór odpowiedniego dopasowania należy do użytkownika. Pamiętaj, że w razie wątpliwości zawsze możesz pozostać przy InnoDB, które zapewnia ogólnie całkiem dobrą wydajność i powinno wystarczyć w większości przypadków. To jest dla tych skrajnych przypadków, w których może być konieczne poszukanie czegoś bardziej odpowiedniego.