Mam jedną bazę danych o wielkości około 4,5 GB działającą na serwerze z 8 GB pamięci RAM. Zdecydowana większość tabel to MyIsam (około 4,3 GB), ale wkrótce zamierzam przekonwertować niektóre z nich na InnoDB. (To będzie powolny proces, początkowo skupiający się na tabelach najbardziej intensywnych).
Czy jest coś nie tak z uruchomieniem dedykowanego serwera, na którym istnieją oba typy silników pamięci masowej?
mysql
innodb
myisam
storage-engine
Derek Downey
źródło
źródło
Is there anything wrong with running a dedicated server where both types of storage engines exist?
Może przeformułowanie naMultiple types
?Odpowiedzi:
Nie ma nic złego w używaniu wielu silników pamięci masowej na tej samej maszynie fizycznej, o ile rozumiesz zalety i wady każdego z nich. Istnieją względy wydajności, ograniczenia funkcji i przypadki użycia dla wszystkich typów pamięci wtyczek.
Na przykład, jeśli masz mały stolik, który pisze w 90%, możesz wybrać MyISAM. Jeśli dane można łatwo zregenerować i jest to mała tabela, powiedzmy do kolejkowania, możesz wybrać Pamięć. Jeśli masz tabelę, która odczytuje w 90%, a dane muszą tam być, gdy ich szukasz, prawdopodobnie wybierzesz silnik pamięci masowej obsługujący transakcje i konfigurowalną atomowość, taki jak InnoDB. Jeśli chcesz mieć dostęp przez system plików bez szkodliwych danych, możesz wybrać CSV.
Niemniej jednak można bezpiecznie używać wielu silników pamięci masowej w tym samym schemacie, a także hosta fizycznego.
Zauważmy jednak, że twoje bufory odgrywają rolę w tym całym bałaganie. Jeśli korzystasz zarówno z MyISAM, jak i InnoDB, musisz uważać, aby Twój key_buffer i innodb_buffer_pool nie rywalizowały. To z twojej strony wymaga starannego planowania, ale to właśnie robimy.
źródło
Nie mogę powiedzieć, czy jest to powszechna praktyka. Mogę powiedzieć o własnym doświadczeniu.
Zawsze używam najlepszego narzędzia do pracy, więc cały czas miksuję silniki. Większość moich projektów używa MyISAM jako domyślnego silnika.
Kiedy potrzebuję specjalnych funkcji dostępnych tylko w InnoDB, wybieram to.
Kiedy tabela jest w większości tylko do odczytu, wybieram silnik archiwizujący, zanim będę mógł mrugnąć.
Wiedząc, że serwer maszynowy ma wystarczającą ilość pamięci, wszystkie moje dane tymczasowe są przechowywane w tabelach sterty.
Widziałem w przeszłości pewne spowolnienia mieszające MyISAM i InnoDB, ale nie jest to specyficzny problem MySQL. Jest to problem projektowy, który nie pojawia się, gdy używasz tylko jednego silnika. Właściwie użycie niewłaściwego silnika powoduje, że większe spowolnienie nie ma znaczenia, czy jest to tylko MyISAM, tylko InnoDB lub połączenie obu. Trudno zdefiniować formułę, aby wiedzieć, kiedy nastąpi spowolnienie. Tylko rzeczywiste testy mogą ci to powiedzieć.
Oczywiście nie można było zachować integralności i spójności, łącząc InnoDB i MyISAM w jednym zapytaniu.
źródło
Staram się unikać mieszania tabel MyISAM i InnoDB w tej samej bazie danych, ale dzieje się to raczej ze względów higienicznych niż praktycznych. Uważam jednak, że przydatne jest posiadanie bazy danych z tabelami MyISAM do wyszukiwania pełnotekstowego, dzięki czemu mogę uruchomić ją na stronach. Przechowywanie go w osobnej bazie danych z kluczem obcym dla każdego wpisu ułatwia innym programistom pracującym na bazie danych, aby zobaczyć, co się dzieje.
źródło