2010-04-26 12 views
16

C'è un'API per le applicazioni intrecciati a parlare con un database in modo scalabile: twisted.enterprise.dbapidatabase per Python ritorto

La cosa confusa è, quale database per raccogliere?

Il database dispone di un'app Twisted che esegue principalmente inserimenti e aggiornamenti e relativamente pochi selezioni, quindi altri client di sola lettura che accedono al database effettuando direttamente selezioni.

(La sola lettura gli utenti non sono selezionando necessariamente i dati che l'applicazione ritorto viene Inserimento; la sua non è come se il database viene utilizzato come un messaggio-coda)

mia comprensione - che ho' d come corretti/avvertita - è che:

  • Postgres è un grande DB, ma quasi tutti i binding Python - e non v'è un labirinto di confusione di loro - sono abandonware
  • c'è psycopg2 per postgres, ma questo fa molto rumore nel fare la propria connessione-pooling e cose; questo coesiste in modo garbato/utile/trasparente con il pool di connessioni di database Twisted asincrono e così via?
  • SQLLite è un ottimo database per piccole cose ma se utilizzato in un modo multiutente esegue il blocco dell'intero database, quindi le prestazioni faranno schifo nel modello di utilizzo che immagino; ha anche diversi meccanismi per digitare i valori delle colonne?
  • MySQL: dopo l'acquisizione di Oracle, chi vorrebbe adottarlo ora o adottare una forcella?
  • C'è qualcos'altro là fuori?
+0

che dire di Oracle dbs? –

risposta

14

scalabilità

twisted.enterprise.adbapi non è necessariamente un'interfaccia per parlare con i database in modo scalabile. La scalabilità è un problema che puoi risolvere separatamente. L'unica cosa che twisted.enterprise.adbapi afferma è di utilizzare i moduli DB-API 2.0 senza il blocco che normalmente implica.

Postgres

Sì. Questa è la risposta corretta. Non credo che all dei binding Python siano abandonware - psycopg2, ad esempio, sembra essere mantenuto attivamente. In effetti, hanno appena aggiunto alcune nuove associazioni per l'accesso asincrono che Twisted potrebbe eventualmente offrire un'interfaccia.

SQLite3 è anche bello. Potresti voler rendere possibile utilizzare Postgres o SQLite3 nella tua app; i tuoi test unitari saranno sicuramente più felici contro SQLite3, ad esempio, anche se vuoi schierare contro Postgres.

Altro?

È difficile sapere se un altro database interamente (qualcosa di non relazionale, forse) si adatta alla tua applicazione meglio di Postgres. Ciò dipende molto dai dati specifici che si stanno archiviando e dalle query che è necessario eseguire contro di esso. Se ci sono relazioni interessanti nel tuo database, Postgres sembra una buona risposta. Se tutte le tue query sono come "SELECT foo, bar FROM baz", tuttavia, potrebbe esserci un'opzione più semplice e più performante.

+0

puntatori sulla risoluzione della scalabilità separatamente? – Will

+2

Questo è un argomento abbastanza grande che merita 15 o 20 domande dedicate, non un paio di frasi in un commento. ;) –

+0

"Se tutte le tue query sono come" SELECT foo, bar FROM baz ", tuttavia, potrebbe esserci un'opzione più semplice e più performante" -> cosa avevi in ​​mente mentre scrivevi questo? :) –

9

C'è la biblioteca txpostgres che è un rimpiazzo per twisted.enterprise.dbapi, -invece di un pool di thread e il blocco DB IO, è completamente asincrona, sfruttando il costruito nel funzionalità asincrone di psycopg2.

Lo stiamo utilizzando in produzione in una grande azienda e finora ci sta servendo molto bene. Inoltre, è attivamente sviluppato: un bug che abbiamo segnalato di recente è stato risolto molto rapidamente.

0

si poteva guardare i database NoSQL come MongoDB o CouchDB con contorto. Lo scaling out potrebbe essere piuttosto semplice con i database basati su nosql che con mysql o postgres.