Rozdział 16 Alternatywne silniki magazynowania

Silniki magazynowania są komponentami MySQL, które obsługują operacje SQL dla różnych typów tabel. InnoDB jest domyślnym i najbardziej uniwersalnym silnikiem magazynowym, a Oracle zaleca używanie go dla tabel z wyjątkiem wyspecjalizowanych przypadków użycia. (Polecenie CREATE TABLE w MySQL 8.0 domyślnie tworzy tabele InnoDB).

Serwer MySQL wykorzystuje architekturę silnika magazynowego, która umożliwia ładowanie i usuwanie silników z uruchomionego serwera MySQL.

Aby określić, które silniki magazynowania obsługuje serwer, użyj polecenia SHOW ENGINES. Wartość w kolumnie Support wskazuje, czy silnik może być używany. Wartość YES, NO lub DEFAULT oznacza, że silnik jest dostępny, niedostępny lub dostępny i obecnie ustawiony jako domyślny silnik pamięci masowej.

mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...

Rozdział ten omawia przypadki użycia specjalnych silników MySQL. Nie dotyczy on domyślnego InnoDB lub NDB silnika magazynowego, które zostały omówione w rozdziale 15, Silnik magazynowy InnoDB oraz rozdziale 23, MySQL NDB Cluster 8.0. Dla zaawansowanych użytkowników zawiera również opis architektury pluggable storage engine (zobacz Sekcja 16.11 „Architektura MySQL Storage Engine”).

Informacje na temat funkcji oferowanych w komercyjnych wersjach serwera MySQL znajdują się w dziale Edycje MySQL, na stronie internetowej MySQL. Dostępne silniki pamięci masowej mogą zależeć od tego, której edycji MySQL używasz.

Odpowiedzi na najczęściej zadawane pytania dotyczące silników magazynowych MySQL znajdują się w sekcji A.2, „MySQL 8.0 FAQ: Silniki magazynowe”.

MySQL 8.0 Obsługiwane silniki magazynowe

  • InnoDB: Domyślny silnik magazynowy w MySQL 8.0. InnoDB jest bezpiecznym dla transakcji (zgodnym z ACID) silnikiem magazynowym dla MySQL, który posiada funkcje commit, rollback oraz crash-recovery chroniące dane użytkownika. InnoDB przechowuje dane użytkownika w indeksach klastrowych, aby zmniejszyć I/O dla typowych zapytań opartych na kluczach głównych. Aby zachować integralność danych, InnoDB obsługuje również ograniczenia FOREIGN KEY referential-integrity constraints. Aby uzyskać więcej informacji na temat InnoDB, zobacz Rozdział 15, Silnik pamięci masowej InnoDB.

  • MyISAM: Te tabele mają niewielką powierzchnię. Blokowanie na poziomie tabeli ogranicza wydajność w obciążeniach typu odczyt/zapis, dlatego jest często stosowane w obciążeniach typu tylko do odczytu lub głównie do odczytu w konfiguracjach sieci Web i hurtowni danych.

  • Memory: Przechowuje wszystkie dane w pamięci RAM, zapewniając szybki dostęp w środowiskach, które wymagają szybkiego wyszukiwania danych niekrytycznych. Ten silnik był wcześniej znany jako silnik HEAP. Jego przypadki użycia maleją; InnoDB ze swoim obszarem pamięci buffer pool zapewnia uniwersalny i trwały sposób przechowywania większości lub wszystkich danych w pamięci, a NDBCLUSTER zapewnia szybkie odszukiwanie kluczy-wartości dla ogromnych rozproszonych zbiorów danych.

  • CSV: Jego tabele to tak naprawdę pliki tekstowe z wartościami rozdzielanymi przecinkami. Tabele CSV pozwalają importować lub zrzucać dane w formacie CSV, aby wymieniać dane ze skryptami i aplikacjami, które odczytują i zapisują ten sam format. Ponieważ tabele CSV nie są indeksowane, zazwyczaj podczas normalnej pracy przechowujesz dane w tabelach InnoDB i używasz tabel CSV tylko na etapie importu lub eksportu.

  • Archive: Te kompaktowe, nieindeksowane tabele są przeznaczone do przechowywania i wyszukiwania dużych ilości rzadko odwoływanych informacji historycznych, archiwalnych lub audytu bezpieczeństwa.

  • Blackhole: Mechanizm przechowywania danych Blackhole przyjmuje, ale nie przechowuje danych, podobnie jak uniksowe urządzenie /dev/null. Zapytania zawsze zwracają pusty zbiór. Tabele te mogą być używane w konfiguracjach replikacyjnych, w których instrukcje DML są wysyłane do serwerów replikujących, ale serwer źródłowy nie przechowuje własnej kopii danych.

  • NDB (znany również jako NDBCLUSTER): Ten klastrowany silnik bazy danych jest szczególnie przydatny w przypadku aplikacji wymagających najwyższego możliwego stopnia bezawaryjności i dostępności.

  • Merge: Umożliwia administratorowi lub programiście MySQL logiczne grupowanie serii identycznych tabel MyISAM i odwoływanie się do nich jako do jednego obiektu. Dobre dla środowisk VLDB, takich jak hurtownie danych.

  • Federated: Oferuje możliwość łączenia oddzielnych serwerów MySQL w celu utworzenia jednej logicznej bazy danych z wielu serwerów fizycznych. Bardzo dobre dla środowisk rozproszonych lub data mart.

  • Example: Ten silnik służy jako przykład w kodzie źródłowym MySQL, który ilustruje, jak rozpocząć pisanie nowych silników pamięci masowej. Jest on interesujący przede wszystkim dla programistów. Silnik magazynowy jest „stubem”, który nic nie robi. Możesz tworzyć tabele, ale żadne dane nie mogą być w nich przechowywane ani z nich pobierane.

Nie jesteś ograniczony do używania tego samego silnika dla całego serwera lub schematu. Możesz określić mechanizm przechowywania danych dla każdej tabeli. Na przykład aplikacja może używać głównie tabel InnoDB, z jedną tabelą CSV do eksportowania danych do arkusza kalkulacyjnego i kilkoma tabelami MEMORY dla tymczasowych przestrzeni roboczych.

Wybór silnika magazynowania

Różne silniki magazynowania dostarczone z MySQL są zaprojektowane z myślą o różnych przypadkach użycia. Poniższa tabela zawiera przegląd niektórych mechanizmów magazynowania MySQL, z uwagami wyjaśniającymi po tabeli.

Tabela 16.1 Storage Engines Feature Summary

.

.

.

.

Feature MyISAM Memory InnoDB Archive NDB
B-.indeksy drzew Tak Tak Tak Nie Nie
Backup/punkt-w-czasie Tak
Indeksy klastrowane Nie Nie Tak Nie Nie Nie
Dane skompresowane Tak (uwaga 2) Nie Tak Tak Tak Nie
Pamięć podręczna danych Nie N/A Tak Tak Nie Tak
Dane szyfrowane Tak (uwaga 3) Tak (uwaga 3) Tak (uwaga 3) Tak (uwaga 4) Tak (uwaga 3) Tak (uwaga 3)
Obsługa kluczy obcych Nie Nie Tak Tak (uwaga 5)
Wypełnij-indeksy wyszukiwania tekstowego Tak Nie Tak (uwaga 6) Nie Nie
Obsługa typów danych geoprzestrzennych obsługa typów danych Tak Nie Tak Tak Tak
Indeksowanie geoprzestrzenne wsparcie Tak Nie Tak (uwaga 7) Nie Nie
Indeksy Hash Nie Tak Nie (uwaga 8) Nie Tak
Schowki indeksów Tak N/A Tak Nie Tak
Ziarnistość blokowania Tabela Row Row Row Row
MVCC No Nie Tak Nie
Nie
Obsługa replikacji (uwaga 1) Tak Ograniczona (uwaga 9) Tak Tak Tak Tak Tak
Limity pamięci masowej 256TB RAM 64TB Nie 384EB
T- Tak
Update statistics for data dictionary Tak Tak Tak Tak

Notatki:

1. Zaimplementowane w serwerze, a nie w silniku pamięci masowej.

2. Skompresowane tabele MyISAM są obsługiwane tylko w przypadku korzystania z formatu skompresowanych wierszy. Tabele wykorzystujące format skompresowanych wierszy z MyISAM są tylko do odczytu.

3. Zaimplementowane w serwerze za pomocą funkcji szyfrowania.

4. Zaimplementowane w serwerze za pomocą funkcji szyfrowania; W MySQL 5.7 i nowszych obsługiwane jest szyfrowanie danych w stanie spoczynku.

5. Obsługa kluczy obcych jest dostępna w wersji MySQL Cluster NDB 7.3 i nowszych.

6. Obsługa indeksów FULLTEXT jest dostępna w wersji MySQL 5.6 i nowszych.

7. Obsługa indeksowania geoprzestrzennego jest dostępna w wersji MySQL 5.7 i nowszych.

8. InnoDB wykorzystuje indeksy haszowe wewnętrznie w funkcji Adaptive Hash Index.

9. Zobacz omówienie w dalszej części tego rozdziału.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.