MySQL 5 - strzeż się się tego koszmaru
Posted by Jarosław Zabiełło Mon, 29 May 2006 07:54:00 GMT
Baza MySQL nigdy nie uchodziła za wzór poprawnej pracy, ale to co ostatnio się z nią dzieje woła o pomstę do nieba… Zainstalowałem sobie najnowszą wersję stabilną MySQL 5 pod win32. Wpierw myslałem że znalazłem jakiś błąd we frameworku Django. Ale krótki czat z innymi programistami i przejrzenie netu, pozbawił mnie złudzeń. Błąd leży w silniku samej bazy. Włączyłem logowanie zapytań i uruchomiłem kwerendę bezpośrednio z poziomu klienta.
Otóż okazuje się, że w MySQL5 kompletnie popsuta jest obsługa warunku “LIKE”. Ilość zwracanych rekordów jest większa niż być powinna. I to nie chyba ma nic wspólnego z tym, czy kodowanie tabel jest w UTF8 czy nie, gdyż nadmierna ilość rekordów jest znajdowana nawet, jak wyszukuje się słowo zawiera tylko znaki ASCII.
Inne “kwiatki” związane z MySQL, o których trzeba sobie jasno powiedzieć, to notoryczne niszczenie plików indeksowych w wypadku zbyt dużego obciążenia bazy. Oczywiście to można łatwo naprawić za pomocą kwerendy REPAIR TABLE tabelka. Ale dopóki nie wykona się tej operacja, tabela nie jest dostępna i aplikacja nam się wywali. Tego typu problemy zauważyłem na MySQL 4.x i 4.1. Nie miałem okazji poddać większym obciążeniom bazę MySQL 5.x, ale nie zdziwiłbym się jakby też z nią były problemy.
Zawsze tyle się mówi w branży, że MySQL to niepoważny projekt amatorski (słaba stabilność i niszczenie swoich tabel pod dużym obciążeniem, koszmarnie wolne tabele transakcyjne innodb, słaba obsługa lockowania – tylko na poziomie tabel a nie wierszy itp, itd) Niszczenie swoich tabel indeksowych mogłem jeszcze zdzierżyć, ale błędna obsługa wyszukiwania tak podstawowej operacji jak LIKE? No way. Całe szczęście, że Django ma dobry ORM i można łatwo zmigrować do PostgreSQL. Chyba nie ma innego wyboru jak powiedzieć: “Goodbye MySQL and welcome PostgreSQL!”


Kanały IRC![[Dilber w Onecie]](/images/larry.png)


W 100% sie z toba zgadzam, ale w jakis niewyjasniony sposob Google tego uzywa… MySQL cierpi na syndrom PHP: jakosc odwrotnie proporcjonalna do popularnosci.
Od 6 lat używam PostgreSQL ze względu na od dawna sprawdzony i przetestowany pl/pgsql, od dawna transakcje, foreign keye i wszystko co relacyjna baza danych powinna mieć. MySQL to dla mnie przereklamowany crap z kiepską licencją.
Spotkałem się z opinią, że przy bazach z tabelami z kilkoma GB danych postgresql nie radzi sobie zbyt dobrze (dokładniej, że jest bardzo wolny).
Jest to opinia zasłyszana po przejściu przez parę osób więc tak naprawdę nie wiadomo czy coś warta.
Jak to jest w postgresie tak naprawdę?
Na odwrót, PostgreSQL przy dużych bazach rozwija skrzydła. Na listach mailingowych PostgreSQL są ludzie którzy mają systemy bo 200GB i więcej.
Myślę, że przy znacznie większych bazach danych trzeba już kupić coś komercyjnego. Cieszmy się, że taki PostgreSQL w ogóle jest.
Moze Firebird? Lub SQLite? (w Railsach idealnie mozna ja stosowac)
Firebird nie umie wyszukiwać wg wyrażeń regularnych i nie ma dobrej, darmowej aplikacji klienckiej. A SQLite to zabawka, nie nadaje się w ogóle to internetu (źle obsługuje wiele równoległych połączeń, blokuje cały plik czyli bazę)
Firebird ma doskonałą aplikację. Nazywa się IBExpert. Jeżeli ktoś chce wykorzystywać go komercyjnie to znaczy że zarabia na nim czyli może zapłącić licencję. ale jeżeli chcesz go użyć do własnego użytku to za darmo jest wersja do pobrania.
co do MyShitQL. Niestety. można powiedzieć o nim wszystko tylko nie to że to jewst baza danych. powiedzmy że to jest składnica tabel i do niczergo więcej się nie nadaje.
PostgreSQL to już zupełnie inna bajka na szczęście. wersja 8.2 tak przyspieszyła że fiu fiu.
Jednak dwie rzeczy mi brakują w tym silniku. brak graficznych narzędzi do tworzenia cube’ów oraz brak odpowiednika MS SQL DTS (Integration services).
Na szczęście nad tym ostatnim już pracuję ;)
1. Możesz podać przykład dla wersji 5 gdzie like nie zadziała ?
2. Problem z indeksami w wersji 5 został rozwiązany
pozdrawiam, cr0ne
To wcześniejszy tekst, w następnym rehabilituję MySQL 5.