2012-03-02 59 views
21

Soy nuevo en Django y solo he usado sqlite3 como motor de base de datos en Django. Ahora una de las aplicaciones en las que estoy trabajando se está haciendo bastante grande, tanto en términos de complejidad de modelos como de solicitudes/segundo.¿Qué motor de base de datos elegir para la aplicación Django?

¿Cómo se comparan los motores de base de datos compatibles con Django en términos de rendimiento? ¿Alguna trampa en el uso de cualquiera de ellos? Y lo último, pero no menos importante, ¿qué tan fácil es cambiar a otro motor una vez que haya usado uno por un tiempo? ¡Gracias!

Respuesta

25

Si vas a utilizar una base de datos relacional, la más popular en la comunidad de Django parece ser PostgreSQL. Es mi favorito personal. Pero, MongoDB parece ser muy popular en la comunidad de Python/Django también (nunca he hecho un proyecto con él). También hay muchos proyectos exitosos en MySQL. Pero, personalmente prefiero PostgreSQL 9.0 o 9.1. Espero que esto ayude.

EDITAR: No hice un gran trabajo con esta publicación. Solo quiero agregar un par de consideraciones más.

Para la gran mayoría de sitios web, MySQL o PostgreSQL funcionarán bien. Ambos tienen sus fortalezas y debilidades. Le sugiero que busque "MySQL vs. PostgreSQL" Hay muchos resultados para esta búsqueda (en el momento de escribir esto, recibí más de 3.000.000). Aquí hay algunos consejos para hacer su evaluación.

  1. Dale una fuerte preferencia a los artículos más recientes. Intenta asegurarte de que estás comparando MySQL 5.5 con PostgreSQL 9.0 o 9.1.
  2. MySQL le permite elegir su motor de almacenamiento. IMO, la comparación de cerrar Apple a manzanas es InnoDB a Postgres.
  3. Tenga en cuenta que es posible que no necesite todas las características de InnoDB o Postgres. También debe mirar algunos de los otros motores de almacenamiento.

Además, si planeas utilizar cualquier activador en tu sistema, hay un par de errores realmente desagradables con MySQL e InnoDB relacionados con ellos y el cumplimiento de ACID. Aquí está the first one y aquí está another one. Es posible que no necesite esta funcionalidad, solo tenga en cuenta.

Una última cosa que puede hacer una diferencia para usted es que con PostgreSQL puede escribir funciones de db con Python. Aquí hay un link to the docs para esto.

+3

nota que MongoDB es no relacional, de modo muy diferente a las bases de datos soportadas fuera de la caja por Django. Yo recomendaría PostgreSQL o MySQL. – Alasdair

3

MySQL y PostgreSQL funcionan mejor con Django. Sugeriría que cuando eliges uno cambias tu configuración de desarrollo para usarlo durante el desarrollo (opuesto a usar sqlite3 en modo dev y una base de datos "real" en prod) ya que hay diferencias de comportamiento sutiles que pueden causar muchos dolores de cabeza en el futuro.

11

MySQL y Postgres son los dos servidores de bases de datos más utilizados en la comunidad de Django y tienen un rendimiento comparable. Estoy de acuerdo en que Postgres es más popular en la comunidad de Django, aunque no tengo ningún número difícil para respaldarlo. Desde luego, no me refiero a recoger en MySQL pero yo diría que hay algunos errores comunes al usar MySQL con Django (o MySQL en general): soporte

  1. Sin transacción con MyISAM (ya no es el predeterminado en 5.5.5)
  2. No hay soporte milisegundos para datetimes
  3. No hay soporte zona horaria para datetimes
  4. campos de caracteres únicos deben tener menos de 255 caracteres
  5. intercalación
  6. defecto es sensible a las mayúsculas

Hay algunos documentos sobre las diversas características de Django que no son compatibles con varios back-ends DB: https://docs.djangoproject.com/en/1.3/ref/databases/.

+2

IMHO PostgreSQL es mucho más avanzado y robusto que MySQL, pero MySQL es más omnipresente. Muchos proveedores de "nube" tienen ofertas compatibles con MySQL que se escalan muy bien. –

+0

@MarkLavin gracias por la lista de funciones no compatibles, no tenía idea acerca de algunas de estas limitaciones. Esto hace que la respuesta sea mucho más clara para mí que simplemente comparar MySQL versus PostgreSQL. –

+0

No hay problema. Algunos de ellos son un poco menores, pero cuando te topas con ellos pueden ser bastante sorprendentes o frustrantes. –

Cuestiones relacionadas