2010-04-26 8 views
16

Il y a une API pour les applications Twisted pour parler à une base de données de manière évolutive: twisted.enterprise.dbapiBase de données pour Python Twisted

La chose est source de confusion, base de données qui choisir?

La base de données disposera d'une application Twisted qui réalise principalement des insertions et des mises à jour et relativement peu de sélections, puis d'autres clients strictement en lecture seule qui accèdent directement à la base de données.

(Les utilisateurs en lecture seule ne sont pas nécessairement sélectionner les données que l'application Twisted est d'insérer, son pas comme si la base de données est utilisée comme un message file d'attente)

Ma compréhension - que je » souhaitez corriger/ conseillé - est que:

  • Postgres est un grand DB, mais presque toutes les liaisons Python - et il y a un labyrinthe déroutant d'entre eux - sont abandonware
  • Il est psycopg2 pour postgres, mais cela fait beaucoup de bruit à propos de faire sa propre connexion-pooling et des choses; cela coexiste-t-il gracieusement/utilement/de manière transparente avec le pool de connexion de base de données asynchrone Twisted et tel?
  • SQLLite est une excellente base de données pour les petites choses, mais si elle est utilisée de manière multi-utilisateur, elle bloque toute la base de données, donc les performances aspirent dans le modèle d'utilisation que je prévois; il a également des mécanismes différents pour taper des valeurs de colonne?
  • MySQL - après la prise de contrôle d'Oracle, qui voudrait l'adopter maintenant ou adopter une fourchette?
  • Y at-il autre chose?
+0

qu'en est-il de Oracle dbs? –

Répondre

14

Évolutivité

twisted.enterprise.adbapi est pas nécessairement une interface pour parler aux bases de données de manière évolutive. L'évolutivité est un problème que vous devez résoudre séparément. La seule chose que prétend vraiment faire est de vous laisser utiliser les modules DB-API 2.0 sans le blocage qui implique normalement.

Postgres

Oui. C'est la bonne réponse. Je ne pense pas tous les des liaisons Python sont abandonware - psycopg2, par exemple, semble être activement maintenu. En fait, ils ont juste ajouté quelques nouvelles liaisons pour l'accès asynchrone que Twisted pourrait éventuellement offrir une interface.

SQLite3 est assez cool aussi. Vous pourriez vouloir utiliser Postgres ou SQLite3 dans votre application; vos tests unitaires seront certainement plus heureusement lancés contre SQLite3, par exemple, même si vous voulez déployer sur Postgres.

Autre?

Il est difficile de savoir si une autre base de données entièrement (quelque chose de non-relationnel, peut-être) conviendrait mieux à votre application que Postgres. Cela dépend beaucoup des données spécifiques que vous allez stocker et des requêtes que vous devez exécuter. S'il existe des relations intéressantes dans votre base de données, Postgres semble être une très bonne réponse. Si toutes vos requêtes ressemblent à "SELECT foo, bar FROM baz", il pourrait y avoir une option plus simple et plus performante.

+0

des pointeurs sur la résolution de l'évolutivité séparément? – Will

+2

C'est un sujet suffisamment important pour mériter 15 ou 20 questions dédiées, pas quelques phrases dans un commentaire. ;) –

+0

"Si toutes vos requêtes ressemblent à" SELECT foo, bar FROM baz ", il pourrait y avoir une option plus simple et plus performante" -> Qu'avez-vous en tête en écrivant ceci? :) –

9

Il y a la bibliothèque txpostgres qui est une baisse de remplacement pour twisted.enterprise.dbapi, d'une piscine -Au lieu de fil et le blocage DB IO, il est totalement asynchrone, tirant parti de la construit dans les capacités de async psycopg2.

Nous l'utilisons en production dans une grande entreprise et cela nous a très bien servi jusqu'ici. En outre, il est activement développé - un bug que nous avons signalé récemment a été résolu très rapidement.

0

Vous pouvez regarder des bases de données NoSQL comme MongoDB ou CouchDB avec torsadé. La mise à l'échelle peut être plus facile avec les bases de données nosql qu'avec mysql ou postgres.

Questions connexes