2009-08-08 5 views
5

Moje doświadczenia z bazami danych dotyczą dość małych aplikacji internetowych, ale teraz pracuję z zestawem danych dotyczących wyborców dla całego stanu. Jest około 3,5 miliona wyborców i będę musiał zrobić sporo raportów na ich temat, biorąc pod uwagę ich adres, historię głosowania, wiek itp. Aplikacja internetowa będzie napisana z Django, więc mam kilka opcji wyboru bazy danych, w tym MySQL i PostgreSQL.Czy MySQL jest odpowiedni dla ciężkiej bazy danych o wielkości 3,5 m + wiersze? Jeśli tak, to jaki silnik?

W przeszłości prawie używałam MySQL, ponieważ był on tak łatwo dostępny. Zdaję sobie sprawę, że 3,5 miliona rzędów w tabeli to naprawdę niewiele, ale jest to największy zestaw danych, z którym osobiście współpracowałem, więc nie znajduję się w mojej osobistej strefie komfortu. Ponadto ten projekt nie jest aplikacją typu "throw-away", więc chcę mieć pewność, że wybiorę najlepszą bazę danych do pracy, a nie tylko tę najbardziej wygodną.

Jeśli MySQL jest odpowiednim narzędziem do pracy, chciałbym również wiedzieć, czy używanie InnoDB lub MyISAM ma sens. Rozumiem podstawowe różnice między tymi dwoma, ale niektóre źródła podają użycie MyISAM dla prędkości, ale InnoDB, jeśli chcesz "prawdziwą" bazę danych, podczas gdy inni mówią, że wszystkie nowoczesne zastosowania MySQL powinny używać InnoDB.

Dzięki!

Odpowiedz

7

Uruchomiłem DB znacznie większy niż ten na MySQL - powinieneś być w porządku. Dokładnie dostosuj swoje indeksy.

InnoDB obsługuje lepszą semantykę blokowania, więc jeśli pojawią się przypadkowe lub częste zapisy (lub jeśli chcesz poprawić integralność danych), proponuję rozpocząć od tego, a następnie przetestować test myisam w późniejszym czasie, jeśli nie możesz osiągnąć swoich celów skuteczności .

+1

+1 - moje uczucia dokładnie. Nie używam MyISAM, chyba że mam ku temu konkretny powód. Jest bardzo zdolny, zwykłem pracować z tabelami z 20 milionami + rekordów bez żadnych problemów, ale możliwości transakcyjne InnoDB zwykle przewyższają wszelkie różnice w wydajności, które prawdopodobnie będą potrzebne, dopóki nie napotkasz określonych problemów z wydajnością. – zombat

+0

Dzięki Tim! Czy mogę poprosić o rozwinięcie "dokładnie nastroić swoje indeksy"? Dostaję cel indeksów, ale nie jestem pewien, co to jest kompromis - tzn. Dlaczego nie wszystko indeksować. Jestem też nieco zdezorientowany tym, co to znaczy dostroić indeks - byłem pod wrażeniem, że zdecydowałeś się zaindeksować kolumnę lub nie i to było to. –

+3

Podczas tworzenia indeksu dodajesz dodatkowe obciążenie podczas wykonywania wstawek (niewiele, tylko trochę, ale się sumuje). Jeśli zindeksujesz wszystko, to może naprawdę spowolnić działanie. Indeksy mogą być oparte na jednym polu, pierwszych N bajtów (lub znaków) pola lub co najmniej dwóch polach. Musisz pracować z narzędziem "wyjaśnij zapytanie" i przetestować system, aby znaleźć najlepszą mieszankę dla danego zestawu danych i wyszukiwań, które zwykle uruchamiasz. Sprawdź dokumentację mysql tutaj: http://dev.mysql.com/doc/refman/5.0/en/create-index.html, aby uzyskać więcej informacji. –

6

MyISAM ma sens tylko wtedy, gdy potrzebujesz tak dużej prędkości, że jesteś gotów zaakceptować wiele błędów w zakresie integralności danych, aby to osiągnąć. Możesz skończyć z database corruption na każdym nieczystym zamknięciu, jest no foreign keys, no transactions, to naprawdę ograniczone. A ponieważ 3,5 miliona wierszy na nowoczesnym sprzęcie jest trywialnym zbiorem danych (chyba że twoje wiersze są ogromne), na pewno nie jesteś w punkcie, w którym jesteś zmuszony do optymalizacji pod kątem wydajności zamiast niezawodności, ponieważ nie ma innego sposobu na osiągnięcie wydajności cele - to jedyna sytuacja, w której powinieneś się zmierzyć z MyISAM.

Jeśli chodzi o wybór PostgreSQL zamiast tego, tak naprawdę nie zauważy się dużej różnicy w wydajności między tymi dwoma aplikacjami. Jeśli znasz już MySQL, możesz z pewnością usprawiedliwić użycie go ponownie, aby utrzymać swoją krzywą uczenia się.

Nie podoba mi się MySQL, ponieważ istnieje wiele sposobów, aby uzyskać złe dane w bazie danych, w której PostgreSQL nie toleruje tego zachowania (patrz Comparing Speed and Reliability), złe zachowanie MyISAM jest tylko podzbiorem tamtejszych problemów. Biorąc pod uwagę, jak trudna jest teraz społeczność MySQL i niepewności co do tego, co Oracle zamierza z nią zrobić, warto rozważyć spojrzenie na PostgreSQL, aby mieć więcej opcji w przyszłości. Jest o wiele mniej dramatów wokół zawsze darmowego licencjonowanego serwera PostgreSQL z licencją BSD, a podczas gdy mniejszy co najmniej cała społeczność deweloperów dąży do tego samego kierunku.

+0

Dzięki Greg, polityka MySQL zdecydowanie mnie przeraża. Wygląda na to, że powinienem trochę przeczytać na PostgreSQL i sprawdzić, czy mogę dopasować trochę czasu do mojego harmonogramu rozwoju. –

1

Ponieważ jest to stolik do odczytu, zalecam używanie typu stołu MyISAM. Jeśli nie używasz obcych kluczy, możesz uniknąć błędów, takich jak this i that.

Tworzenie kopii zapasowej lub kopiowanie tabeli na inny serwer jest tak proste, jak kopiowanie plików frm, MYI i MYD.

0

Jeśli chcesz wyliczyć raporty i skomplikowane agregaty, pamiętaj, że optymalizator zapytań postgres jest dość inteligentny i pomysłowy, a optymalizator "mysql" jest dość prosty i głupi.

Na dużym sprzęcie różnica może być ogromna.

Jedyną zaletą MySQL jest to, że może trafić w indeksy bez uderzania w tabele.

Powinieneś załadować swój zestaw danych w obu bazach danych i eksperymentować z większymi zapytaniami, które zamierzasz uruchomić. Lepiej spędzić kilka dni na eksperymentowaniu, niż utknąć przy złym wyborze.