web-dev-qa-db-fra.com

Quel moteur de base de données choisir pour Django app?

Je suis nouveau sur Django et n'utilise que sqlite3 comme moteur de base de données dans Django. Maintenant, l'une des applications sur lesquelles je travaille devient assez grosse, à la fois en termes de complexité des modèles et demandes/seconde.

Comment les moteurs de base de données pris en charge par Django se comparent-ils en termes de performances? Des pièges dans leur utilisation? Et le dernier mais non le moindre, est-il facile de passer à un autre moteur une fois que vous avez utilisé un pendant un certain temps? Merci!

36
Ivan Vashchenko

Si vous allez utiliser une base de données relationnelle, la plus populaire dans la communauté Django semble être PostgreSQL. C'est mon favori personnel. Mais, MongoDB semble devenir assez populaire dans Python/Django ainsi (je n'ai jamais fait de projet avec). Il y a aussi beaucoup de projets réussis sur MySQL. Mais, personnellement, je préfère PostgreSQL 9.0 ou 9.1. J'espère que cela vous aidera.

EDIT: Je n'ai pas fait un si bon travail avec ce post. Je veux juste ajouter quelques considérations supplémentaires.

Pour la grande majorité des sites Web, MySQL ou PostgreSQL fonctionnera correctement. Les deux ont leurs forces et leurs faiblesses. Je vous suggère de google "MySQL vs PostgreSQL" Il y a beaucoup de hits pour cette recherche (au moment où j'écris ceci, j'en ai plus de 3 000 000). Voici quelques conseils pour faire votre évaluation.

  1. Privilégiez fortement les articles les plus récents. Essayez de vous assurer que vous comparez MySQL 5.5 à PostgreSQL 9.0 ou 9.1.
  2. MySQL vous laisse choisir votre moteur de stockage. OMI, la clôture Apple à la comparaison des pommes est InnoDB à Postgres.
  3. Gardez à l'esprit que vous n'aurez peut-être pas besoin de toutes les fonctionnalités d'InnoDB ou Postgres. Vous devez également consulter certains des autres moteurs de stockage.

De plus, si vous prévoyez d'utiliser des déclencheurs dans votre système, il y a quelques bugs vraiment désagréables avec MySQL et InnoDB liés à eux et à la conformité ACID. Voici le premier et voici n autre . Vous n'avez peut-être pas besoin de cette fonctionnalité, sachez-en simplement.

Une dernière chose qui pourrait faire une différence pour vous est qu'avec PostgreSQL, vous pouvez écrire des fonctions db avec Python. Voici un lien vers les documents pour cela.

41
David S

MySQL et Postgres sont les deux backends DB les plus courants utilisés dans la communauté Django et ont des performances comparables. Je conviens que Postgres est plus populaire dans la communauté Django même si je n'ai pas de chiffres précis à l'appui. Je ne veux certainement pas choisir MySQL mais je dirais qu'il y a des pièges courants lors de l'utilisation de MySQL avec Django (ou MySQL en général):

  1. Pas de prise en charge des transactions avec MyISAM (plus la valeur par défaut dans 5.5.5)
  2. Pas de prise en charge en millisecondes pour les heures
  3. Pas de prise en charge du fuseau horaire pour les heures
  4. Les champs de caractères uniques doivent contenir moins de 255 caractères
  5. Le classement par défaut ne respecte pas la casse

Il existe des documents sur les différentes fonctionnalités de Django qui ne sont pas pris en charge sur divers backends DB: https://docs.djangoproject.com/en/1.3/ref/databases / .

12
Mark Lavin

Je ne sais pas non plus quelle base de données utiliser, mais si quelqu'un envisage d'utiliser MongoDB, sachez que cela ne fonctionne que pour py2 et non pour py3.

Liens de référence:

Configuration du projet avec Django 1.10, mongodb et Python 3.4.

Erreur lors de la configuration de MongoDB avec Django using Django mongodb engine on windows

Configuration de MongoDB + Django

7
Algor Troy

MySQL et PostgreSQL fonctionnent mieux avec Django. Je suggérerais fortement que lorsque vous en choisissez un, vous modifiez vos paramètres de développement pour l'utiliser pendant le développement (contrairement à l'utilisation de sqlite3 en mode dev et d'une "vraie" base de données en prod) car il existe de subtiles différences de comportement qui peuvent causer beaucoup de maux de tête dans l'avenir.

6
guidoism