2012-03-02 14 views
21

Sono nuovo di Django e ho usato solo sqlite3 come motore di database in Django. Ora una delle applicazioni su cui sto lavorando sta diventando piuttosto grande, sia in termini di complessità dei modelli che di richieste/secondo.Quale motore di database scegliere per l'app Django?

In che modo i motori di database supportati da Django si confrontano in termini di prestazioni? Qualche insidia nell'usare qualcuno di loro? E l'ultimo ma non meno importante, quanto è facile passare a un altro motore dopo averne usato uno per un po '? Grazie!

risposta

25

Se si utilizza un database relazionale, il più popolare nella comunità Django sembra essere PostgreSQL. È il mio preferito. Ma MongoDB sembra essere diventato molto popolare anche nella comunità Python/Django (non ho mai fatto un progetto con esso, però). Ci sono molti progetti di successo anche su MySQL. Ma, personalmente preferisco PostgreSQL 9.0 o 9.1. Spero che questo ti aiuti.

EDIT: Non ho fatto un gran lavoro con questo post. Voglio solo aggiungere un paio di altre considerazioni.

Per la maggior parte dei siti Web, MySQL o PostgreSQL funzioneranno correttamente. Entrambi hanno i loro punti di forza e di debolezza. Ti suggerisco google "MySQL vs. PostgreSQL" Ci sono molti successi per questa ricerca (al momento della stesura di questo, ottengo oltre 3.000.000). Ecco alcuni suggerimenti per fare la tua valutazione.

  1. Dare una forte preferenza agli articoli più recenti. Cerca di assicurarti di confrontare MySQL 5.5 con PostgreSQL 9.0 o 9.1.
  2. MySQL consente di scegliere il proprio motore di archiviazione. IMO, il confronto tra Apple e Apple è InnoDB to Postgres.
  3. Ricorda che potresti non aver bisogno di tutte le funzionalità di InnoDB o Postgres. Si dovrebbe anche guardare alcuni degli altri motori di archiviazione.

Inoltre, se si prevede di utilizzare qualsiasi trigger nel proprio sistema, sono presenti un paio di bug molto brutti con MySQL e InnoDB correlati a loro e conformità ACID. Ecco the first one e qui è another one. Potresti non aver bisogno di questa funzionalità, basta esserne consapevole.

Un'ultima cosa che potrebbe fare la differenza per te è che con PostgreSQL puoi scrivere funzioni db con Python. Ecco un link to the docs per questo.

+3

Nota che MongoDB è non relazionale, in modo molto diverso da database supportati dalla scatola da Django. Consiglierei PostgreSQL o MySQL. – Alasdair

3

MySQL e PostgreSQL funzionano meglio con Django. Ti suggerisco caldamente di sceglierne una che modifica le impostazioni di sviluppo per usarla durante lo sviluppo (a differenza di usare sqlite3 in modalità dev e un database "reale" in prod) in quanto ci sono sottili differenze comportamentali che possono causare molti mal di testa il futuro.

11

MySQL e Postgres sono i due backend DB più comuni utilizzati nella comunità Django e hanno prestazioni paragonabili. Concordo sul fatto che Postgres è più popolare nella comunità di Django anche se non ho alcun numero difficile da sostenere. Io di certo non intendo prendersela con MySQL, ma direi che ci sono alcuni errori comuni quando si utilizza MySQL con Django (o MySQL in generale): il supporto

  1. Nessuna transazione con MyISAM (non più l'impostazione predefinita in 5.5.5)
  2. Nessun supporto millisecondo per datetimes
  3. Nessun supporto fuso orario per datetimes
  4. campi carattere unico deve essere inferiore a 255 caratteri
  5. predefinito di confronto è case-insensitive

Ci sono alcuni documenti su le varie funzionalità di Django che non sono supportate su vari backend DB: https://docs.djangoproject.com/en/1.3/ref/databases/.

+2

IMHO PostgreSQL è molto più avanzato e robusto di MySQL, ma MySQL è più ubiquitario. Molti fornitori di "cloud" hanno offerte compatibili con MySQL che si adattano molto bene. –

+0

@MarkLavin grazie per l'elenco delle funzionalità non supportate, non avevo idea di alcune di queste limitazioni. Ciò rende la risposta molto più chiara per me rispetto al semplice confronto tra MySQL e PostgreSQL. –

+0

Nessun problema. Alcuni di loro sono in qualche modo minori ma quando li incontri possono essere abbastanza sorprendenti o frustranti. –

Problemi correlati