InnoDB to mechanizm przechowywania danych dla MySQL, który jest standardem we wszystkich aktualnych plikach binarnych dystrybuowanych przez MySQL AB. Jego głównym ulepszeniem w stosunku do innych silników pamięci masowej dostępnych do użytku z MySQL jest obsługa transakcji zgodna z ACID
MyISAM jest domyślnym silnikiem pamięci masowej dla systemu zarządzania relacyjnymi bazami danych MySQL w wersjach wcześniejszych niż 5.5 1 . Jest oparty na starszym kodzie ISAM, ale ma wiele przydatnych rozszerzeń.
Główną wadą MyISAM jest brak obsługi transakcji.
Wersje MySQL 5.5 i nowsze przeszły na silnik InnoDB, aby zapewnić ograniczenia integralności referencyjnej i wyższą współbieżność.
czy możemy używać obu silników pamięci masowej w tym samym czasie dla naszej bazy danych?
user130561
2
możesz, ponieważ dla każdej tabeli możesz zdefiniować inny mechanizm przechowywania. inne pytanie brzmi, czy powinieneś. w dokumentacji mysql znajduje się kilka wyjaśnień na ten temat.
MyISAM: domyślny silnik pamięci masowej MySQL, który jest najczęściej używany w sieci Web, hurtowniach danych i innych środowiskach aplikacji. MyISAM jest obsługiwany we wszystkich konfiguracjach MySQL i jest domyślnym silnikiem pamięci masowej, chyba że skonfigurowano MySQL tak, aby domyślnie używał innego.
InnoDB: bezpieczny dla transakcji (zgodny z ACID) silnik pamięci masowej dla MySQL, który ma funkcje zatwierdzania, wycofywania i odzyskiwania po awarii w celu ochrony danych użytkownika. Blokowanie na poziomie wiersza InnoDB (bez eskalacji do blokad o grubszej ziarnistości) i spójne odczyty nieblokujące w stylu Oracle zwiększają współbieżność i wydajność wielu użytkowników. InnoDB przechowuje dane użytkownika w indeksach klastrowych, aby zmniejszyć liczbę operacji we / wy dla typowych zapytań opartych na kluczach podstawowych. Aby zachować integralność danych, InnoDB obsługuje również ograniczenia integralności referencyjnej klucza obcego.
Czy więc podczas instalowania MySQL musimy konkretnie określić, który silnik pamięci masowej będzie używany jako nasza baza danych MySQL?
user130561
3
Jak wspomniałem w moim poście, domyślną wartością jest MyISAM. Jeśli chcesz korzystać z funkcji innego mechanizmu przechowywania, takiego jak INNODB, musisz to określić. Nie jest to wykonywane podczas instalacji, a raczej podczas początkowego tworzenia tabeli.
Według dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : „Domyślnym silnikiem jest InnoDB od MySQL 5.5.5 (MyISAM przed 5.5.5)” Tak więc domyślnym silnikiem jest teraz InnoDB. Ta odpowiedź została opublikowana 16 dni po pierwszym
ogólnodostępnym
6
Chciałem dodać, że możliwość określenia konkretnego silnika pamięci masowej na tabelę jest jedną z kluczowych zalet MySQL (oprócz łatwości użytkowania i dobrej wydajności bez modyfikowania). W przypadku wszystkich operacji, w których potrzebne są transakcje, po prostu trzymaj się InnoDB. Jednak MyISAM może naprawdę przyspieszyć działanie, gdy transakcje nie są potrzebne w określonych sytuacjach - i wymaga mniej miejsca na dysku i pamięci RAM w porównaniu do InnoDB.
MyISAM nie śledzi ACID w przeciwieństwie do InnoDB, który śledzi transakcje w celu zachowania integralności danych.
MyISAM obsługuje współbieżne wstawianie: Jeśli tabela nie ma wolnych bloków w środku pliku danych, możesz WSTAWIAĆ do niej nowe wiersze w tym samym czasie, gdy inne wątki czytają z tabeli. MySqlDoc
Dlatego MyISAM jest szybszy i zajmuje mniej miejsca. Na przykład MySQL MyISAM Storage Engine nie obsługuje transakcji. ograniczenia MySQL MYISAM Istnieje bit o nazwie współbieżne wstawianie.
Domyślnie zmienna ma wartość 1 i współbieżne wstawianie jest obsługiwane tak, jak opisano powyżej . Jeśli jest ustawiony na 0, współbieżne wstawianie jest wyłączone. Jeśli jest ustawiony na 2, współbieżne wstawienia na końcu tabeli są dozwolone nawet w przypadku tabel, które mają usunięte wiersze. Polecenie INSERT może zostać wykonane w celu dodania wierszy na końcu tabeli z zaznaczeniem w tym samym czasie, jeśli nie ma żadnych otworów / usuniętych wierszy w środku tabeli (w czasie równoczesnego wstawiania).
Domyślny poziom izolacji w mysql InnoDB to „Read Repeatable”. W przypadku MyISAM nie ma transakcji. InnoDB używa blokowania na poziomie wierszy, podczas gdy MyISAM może używać tylko blokowania na poziomie tabeli, dlatego InnoDB ma lepsze odzyskiwanie po awarii niż MyISAM. Aby uniknąć efektów współbieżności, należy ręcznie uzyskać blokadę poziomu tabeli w MyISAM.
InnoDB to transakcyjny silnik pamięci masowej MySQL, podczas gdy MyISAM jest nietransakcyjnym silnikiem pamięci masowej. Innymi słowy, InnoDB postępuje zgodnie z właściwościami ACID, aby zachować integralność danych, ale MyISAM nie podąża za właściwościami ACID, co nie pozwala na zachowanie integralności danych.
W tabeli InnoDB (transakcyjnej) zmiany transakcyjne można łatwo cofnąć, jeśli wymagane jest wycofanie. Jednak zmian wprowadzonych w tabeli MyISAM (nietransakcyjnej) nie można cofnąć, gdy wymagane jest wycofanie transakcji.
Na przykład chcesz przelać pieniądze ze swojego konta rozliczeniowego na konto oszczędnościowe. Odbywa się to poprzez transakcję, która obejmuje 5 zapytań.
1STARTTRANSACTION;2SELECT balance FROM checking WHERE customer_id =10233276;3UPDATE checking SET balance = balance -200.00WHERE customer_id =10233276;4UPDATE savings SET balance = balance +200.00WHERE customer_id =10233276;5COMMIT;
Załóżmy, że proces ulega awarii w kroku 4. Jeśli w tym miejscu użyto tabeli InnoDB, wycofanie cofnie zmiany i zostaniesz oszczędzony przed ryzykiem utraty pieniędzy. Dosłownie tabela nie jest świadoma żadnej awarii, ponieważ zmiany nie zostaną zatwierdzone do tabeli, chyba że krok 5 zostanie pomyślnie wykonany.
Ale w przypadku tabeli MyISAM nie można cofnąć zmian transakcyjnych, gdy wywoływana jest funkcja wycofywania lub w przypadku awarii prowadzącej do niepowodzenia transakcji. Oznacza to, że jeśli transakcja uległa awarii w kroku 3, pieniądze zostaną pobrane z Twojego konta rozliczeniowego. Ale pieniądze nie zostałyby dodane do twojego konta oszczędnościowego.
Przykład dzięki uprzejmości: „MySQL o wysokiej wydajności: optymalizacja, kopie zapasowe i replikacja” - książka autorstwa Arjena Lentza, Dereka J. Ballinga, Jeremy'ego Zawodnego, Petera Zaitseva i Vadima Tkachenko
Gdy Twój serwer MySQL ulegnie awarii, dane można odzyskać znacznie łatwiej z zestawu tabel MyISAM niż z tego dużego pliku transakcyjnego InnoDB. Każda tabela MyISAM ma oddzielny plik i jeśli podczas awarii nie były wykonywane żadne operacje zapisu w tej tabeli - pozostanie to całkowicie nienaruszone. W przypadku InnoDB cały plik transakcji całego serwera MySQL musi zostać ponownie zindeksowany lub cokolwiek robi po awarii. To może być dość niechlujne.
InnoDB jest domyślnym NOT myISAM
https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html
„InnoDB jest domyślnym silnikiem pamięci masowej MySQL. O ile nie skonfigurowano innego domyślnego silnika pamięci masowej, wydanie Instrukcja CREATE TABLE bez klauzuli ENGINE = tworzy tabelę InnoDB "
Odpowiedzi:
InnoDB
iMYISAM
są silnikami pamięci masowej dlaMySQL
.Te dwa różnią się implementacją blokowania:
InnoDB
blokuje określony wiersz w tabeli iMyISAM
blokuje całąMySQL
tabelę.Możesz określić typ, podając
MYISAM
ORInnoDB
podczas tworzenia tabeli w DB.źródło
Spójrz na
InnoDB i MyISAM
źródło
To silniki magazynowe.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM: domyślny silnik pamięci masowej MySQL, który jest najczęściej używany w sieci Web, hurtowniach danych i innych środowiskach aplikacji. MyISAM jest obsługiwany we wszystkich konfiguracjach MySQL i jest domyślnym silnikiem pamięci masowej, chyba że skonfigurowano MySQL tak, aby domyślnie używał innego.
InnoDB: bezpieczny dla transakcji (zgodny z ACID) silnik pamięci masowej dla MySQL, który ma funkcje zatwierdzania, wycofywania i odzyskiwania po awarii w celu ochrony danych użytkownika. Blokowanie na poziomie wiersza InnoDB (bez eskalacji do blokad o grubszej ziarnistości) i spójne odczyty nieblokujące w stylu Oracle zwiększają współbieżność i wydajność wielu użytkowników. InnoDB przechowuje dane użytkownika w indeksach klastrowych, aby zmniejszyć liczbę operacji we / wy dla typowych zapytań opartych na kluczach podstawowych. Aby zachować integralność danych, InnoDB obsługuje również ograniczenia integralności referencyjnej klucza obcego.
źródło
Chciałem dodać, że możliwość określenia konkretnego silnika pamięci masowej na tabelę jest jedną z kluczowych zalet MySQL (oprócz łatwości użytkowania i dobrej wydajności bez modyfikowania). W przypadku wszystkich operacji, w których potrzebne są transakcje, po prostu trzymaj się InnoDB. Jednak MyISAM może naprawdę przyspieszyć działanie, gdy transakcje nie są potrzebne w określonych sytuacjach - i wymaga mniej miejsca na dysku i pamięci RAM w porównaniu do InnoDB.
To powiedziawszy, InnoDB cały czas się poprawia:
Ulepszenia wydajności i skalowalności InnoDB 1.1
źródło
MyISAM nie śledzi ACID w przeciwieństwie do InnoDB, który śledzi transakcje w celu zachowania integralności danych.
Dlatego MyISAM jest szybszy i zajmuje mniej miejsca. Na przykład MySQL MyISAM Storage Engine nie obsługuje transakcji. ograniczenia MySQL MYISAM Istnieje bit o nazwie współbieżne wstawianie. Domyślnie zmienna ma wartość 1 i współbieżne wstawianie jest obsługiwane tak, jak opisano powyżej . Jeśli jest ustawiony na 0, współbieżne wstawianie jest wyłączone. Jeśli jest ustawiony na 2, współbieżne wstawienia na końcu tabeli są dozwolone nawet w przypadku tabel, które mają usunięte wiersze. Polecenie INSERT może zostać wykonane w celu dodania wierszy na końcu tabeli z zaznaczeniem w tym samym czasie, jeśli nie ma żadnych otworów / usuniętych wierszy w środku tabeli (w czasie równoczesnego wstawiania).
Domyślny poziom izolacji w mysql InnoDB to „Read Repeatable”. W przypadku MyISAM nie ma transakcji. InnoDB używa blokowania na poziomie wierszy, podczas gdy MyISAM może używać tylko blokowania na poziomie tabeli, dlatego InnoDB ma lepsze odzyskiwanie po awarii niż MyISAM. Aby uniknąć efektów współbieżności, należy ręcznie uzyskać blokadę poziomu tabeli w MyISAM.
źródło
InnoDB to transakcyjny silnik pamięci masowej MySQL, podczas gdy MyISAM jest nietransakcyjnym silnikiem pamięci masowej. Innymi słowy, InnoDB postępuje zgodnie z właściwościami ACID, aby zachować integralność danych, ale MyISAM nie podąża za właściwościami ACID, co nie pozwala na zachowanie integralności danych.
Na przykład chcesz przelać pieniądze ze swojego konta rozliczeniowego na konto oszczędnościowe. Odbywa się to poprzez transakcję, która obejmuje 5 zapytań.
Załóżmy, że proces ulega awarii w kroku 4. Jeśli w tym miejscu użyto tabeli InnoDB, wycofanie cofnie zmiany i zostaniesz oszczędzony przed ryzykiem utraty pieniędzy. Dosłownie tabela nie jest świadoma żadnej awarii, ponieważ zmiany nie zostaną zatwierdzone do tabeli, chyba że krok 5 zostanie pomyślnie wykonany.
Ale w przypadku tabeli MyISAM nie można cofnąć zmian transakcyjnych, gdy wywoływana jest funkcja wycofywania lub w przypadku awarii prowadzącej do niepowodzenia transakcji. Oznacza to, że jeśli transakcja uległa awarii w kroku 3, pieniądze zostaną pobrane z Twojego konta rozliczeniowego. Ale pieniądze nie zostałyby dodane do twojego konta oszczędnościowego.
Przykład dzięki uprzejmości: „MySQL o wysokiej wydajności: optymalizacja, kopie zapasowe i replikacja” - książka autorstwa Arjena Lentza, Dereka J. Ballinga, Jeremy'ego Zawodnego, Petera Zaitseva i Vadima Tkachenko
źródło
Gdy Twój serwer MySQL ulegnie awarii, dane można odzyskać znacznie łatwiej z zestawu tabel MyISAM niż z tego dużego pliku transakcyjnego InnoDB. Każda tabela MyISAM ma oddzielny plik i jeśli podczas awarii nie były wykonywane żadne operacje zapisu w tej tabeli - pozostanie to całkowicie nienaruszone. W przypadku InnoDB cały plik transakcji całego serwera MySQL musi zostać ponownie zindeksowany lub cokolwiek robi po awarii. To może być dość niechlujne.
źródło
InnoDB jest domyślnym NOT myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html „InnoDB jest domyślnym silnikiem pamięci masowej MySQL. O ile nie skonfigurowano innego domyślnego silnika pamięci masowej, wydanie Instrukcja CREATE TABLE bez klauzuli ENGINE = tworzy tabelę InnoDB "
źródło