2010-04-26 19 views
16

Hay una API para aplicaciones Twisted para hablar con una base de datos de una manera escalable: twisted.enterprise.dbapibase de datos para Python Twisted

Lo confuso es que la base de datos para recoger?

La base de datos tendrá una aplicación Twisted que está haciendo inserciones y actualizaciones y relativamente pocas selecciones, y luego otros clientes estrictamente de lectura que están accediendo directamente a la base de datos haciendo selecciones.

(de sólo lectura a los usuarios no están seleccionando necesariamente los datos que la aplicación Twisted está insertando; no es como si la base de datos está siendo utilizada como un mensaje en cola)

Mi opinión - la que I' Quisiera corregido/aconsejó - es que:

  • Postgres es una gran base de datos, pero casi todos los enlaces Python - y hay un laberinto confuso de ellos - son abandonware
  • No es psycopg2 para postgres, pero eso hace mucho ruido al hacer su propia agrupación de conexiones y cosas; ¿coexiste esto con gracia/utilidad/transparencia con la agrupación de conexiones de la base de datos asincrónica torcida y tal?
  • SQLLite es una gran base de datos para cosas pequeñas, pero si se usa de forma multiusuario, bloquea todo el conjunto de bases de datos, por lo que el rendimiento apestaría al patrón de uso que preveo; también tiene diferentes mecanismos para escribir valores de columna?
  • MySQL: después de la adquisición de Oracle, ¿quién querría adoptarla ahora o adoptar un tenedor?
  • ¿Hay algo más por ahí?
+0

¿qué hay de Oracle dbs? –

Respuesta

14

Escalabilidad

twisted.enterprise.adbapi no es necesariamente una interfaz para hablar con las bases de datos de forma escalable. La escalabilidad es un problema que puede resolver por separado. Lo único que afirma hacer es twisted.enterprise.adbapi es permitirle usar módulos DB-API 2.0 sin el bloqueo que normalmente implica.

Postgres

Sí. Esta es la respuesta correcta. No creo que todos de los enlaces de Python son abandonware - psycopg2, por ejemplo, parece que se mantiene activamente. De hecho, acaban de agregar algunos enlaces nuevos para el acceso asincrónico que Twisted eventualmente podría ofrecer una interfaz.

SQLite3 es muy bueno también. Es posible que desee hacer posible el uso de Postgres o SQLite3 en su aplicación; sus pruebas unitarias definitivamente serán más felices ejecutando contra SQLite3, por ejemplo, incluso si desea implementar contra Postgres.

¿Otro?

Es difícil saber si otra base de datos completa (algo no relacional, tal vez) se ajustaría mejor a su aplicación que Postgres. Depende mucho de los datos específicos que va a almacenar y las consultas que necesita para ejecutar en su contra. Si hay relaciones interesantes en su base de datos, Postgres parece una buena respuesta. Si todas sus consultas parecen "SELECCIONAR foo, bar FROM baz", podría haber una opción más simple y de mayor rendimiento.

+0

punteros sobre cómo resolver la escalabilidad por separado? – Will

+2

Ese es un tema lo suficientemente grande como para merecer 15 o 20 preguntas dedicadas, ni un par de oraciones en un comentario. ;) –

+0

"Si todas sus consultas parecen" SELECCIONAR foo, barra DESDE baz ", podría haber una opción más simple y de mayor rendimiento" -> ¿qué tenía en mente al escribir esto? :) –

9

Existe la biblioteca txpostgres que es una gota en el reemplazo para twisted.enterprise.dbapi, -en lugar de un grupo de subprocesos y el bloqueo de DB IO, que está totalmente asíncrona, aprovechando el construido en capacidades asíncronas de psycopg2.

Lo estamos utilizando en producción en una gran corporación y nos ha estado sirviendo muy bien hasta ahora. Además, se ha desarrollado activamente; un error que informamos recientemente se resolvió muy rápidamente.

0

Se podría buscar en bases de datos NoSQL como mongodb o couchdb con trenzado. El escalado podría ser bastante más fácil con las bases de datos basadas en nosql que con mysql o postgres.