2012-03-02 10 views
21

Jestem nowy w Django i używałem tylko sqlite3 jako silnika bazy danych w Django. Teraz jedna z aplikacji, nad którymi pracuję, jest coraz większa, zarówno pod względem złożoności modeli, jak i żądań/sekund.Który silnik bazy danych do wyboru dla aplikacji Django?

Porównanie silników baz danych obsługiwanych przez Django pod względem wydajności? Jakieś pułapki w korzystaniu z którejkolwiek z nich? I na koniec, ale nie mniej ważne, jak łatwo jest przejść na inny silnik, gdy już go używasz przez jakiś czas? Dzięki!

Odpowiedz

25

Jeśli zamierzasz korzystać z relacyjnej bazy danych, najpopularniejsze w społeczności Django wydaje się być PostgreSQL. To mój osobisty faworyt. Ale MongoDB wydaje się być bardzo popularny także w społeczności Python/Django (jednak nigdy nie robiłem z nim projektu). W MySQL jest także wiele udanych projektów. Ale ja osobiście wolę PostgreSQL 9.0 lub 9.1. Mam nadzieję że to pomoże.

EDYCJA: Nie zrobiłem tak dobrze pracy z tego postu. Po prostu chcesz dodać kilka dodatkowych uwag.

Dla znacznej większości witryn, MySQL lub PostgreSQL będzie działać poprawnie. Obie mają swoje mocne i słabe strony. Sugeruję, abyś google "MySQL vs. PostgreSQL" Istnieje wiele trafień dla tego wyszukiwania (w czasie pisania tego, dostaję ponad 3 000 000). Oto kilka wskazówek dotyczących przeprowadzania oceny.

  1. Daj wyraźne pierwszeństwo nowszym artykułom. Spróbuj upewnić się, że porównujesz MySQL 5.5 do PostgreSQL 9.0 lub 9.1.
  2. MySQL pozwala wybrać silnik pamięci masowej. IMO, zamknięcie porównania Apple to Jabłka to InnoDB do PostgreSQL.
  3. Należy pamiętać, że mogą nie być potrzebne wszystkie funkcje programu InnoDB lub Postgres. Powinieneś również przyjrzeć się innym silnikom Storage.

Ponadto, jeśli planujesz używać jakichkolwiek wyzwalaczy w systemie, istnieje kilka naprawdę nieprzyjemnych błędów związanych z MySQL i InnoDB z nimi związanych oraz zgodność z ACID. Oto the first one i tutaj jest another one. Możesz nie potrzebować tej funkcji, po prostu bądź tego świadomy.

Ostatnią rzeczą, która może zrobić różnicę jest to, że z PostgreSQL można pisać funkcje db z Python. Oto link to the docs do tego.

+3

pamiętać, że MongoDB nie jest relacyjna, tak bardzo różni się od baz danych obsługiwanych wyjęciu z pudełka przez Django. Polecam PostgreSQL lub MySQL. – Alasdair

3

MySQL i PostgreSQL działają najlepiej z Django. Sugerowałbym, że gdy wybierzesz taki, który zmieniasz ustawienia programistyczne, aby używać go podczas programowania (w przeciwieństwie do używania sqlite3 w trybie deweloperskim i "prawdziwej" bazy danych w prod), ponieważ istnieją subtelne różnice w zachowaniu, które mogą powodować wiele bólów głowy w przyszłość.

11

MySQL i Postgres to dwa najpopularniejsze bazy danych DB używane w społeczności Django i mają porównywalną wydajność. Zgadzam się, że Postgres jest bardziej popularny w społeczności Django, chociaż nie mam żadnych twardych liczb, aby to poprzeć. I na pewno nie myśli, aby wybrać na MySQL ale chciałbym powiedzieć, istnieją pewne wspólne pułapek przy użyciu MySQL z Django (lub MySQL w ogóle): wsparcie

  1. No transakcji z MyISAM (już domyślnie w 5,5.5)
  2. Brak wsparcia milisekundy dla datetimes
  3. Brak obsługi stref czasowych dla datetimes
  4. Unikalne pola znakowe musi być mniejsza niż 255 znaków
  5. domyślnym sortowaniem jest wielkość liter

Istnieją pewne Docs na różne funkcje Django, które nie są obsługiwane w różnych bazach danych DB: https://docs.djangoproject.com/en/1.3/ref/databases/.

+2

IMHO PostgreSQL jest znacznie bardziej zaawansowany i odporny niż MySQL, ale MySQL jest bardziej wszechobecny. Wielu dostawców "chmury" ma oferty kompatybilne z MySQL, które bardzo dobrze się skalują. –

+0

@MarkLavin dzięki za listę nieobsługiwanych funkcji, nie miałem pojęcia o niektórych z tych ograniczeń. To sprawia, że ​​odpowiedź jest dla mnie bardziej przejrzysta niż porównywanie MySQL do PostgreSQL. –

+0

Nie ma problemu. Niektóre z nich są nieznaczne, ale kiedy się na nie natkną, mogą być dość zaskakujące lub frustrujące. –

Powiązane problemy