2012-04-03 19 views
6

Ho creato un'applicazione client che utilizza HTTP per comunicare con un server Python 2 utilizzando una semplice API. Il server utilizza l'ORM di SQLAlchemy in modo piuttosto estensivo per servire i dati per quelle richieste HTTP. Il problema è che l'utilizzo della mia CPU è abbastanza alto anche con pochi client attivi. Questo server dovrebbe essere in grado di servire poche centinaia di client contemporaneamente a circa 1 richiesta al secondo per client, quindi dovrebbe essere ancora gestibile (o almeno così spero).Come migliorare le prestazioni di SQLAlchemy?

Come posso migliorare le prestazioni? So che il problema è l'ORM come cProfile mostra questo abbastanza chiaramente. Apparentemente una singola query esegue circa 10000 istruzioni Python che sembrano abbastanza strane. Ho provato a collegare diversi motori di database/backend e ho cambiato l'interprete in Pypy solo per divertimento ma ovviamente non ha aiutato il problema originale e non ha migliorato le prestazioni.

Cosa sto facendo di sbagliato qui? Spero davvero che questo sia un "bene, duh!" problema.

Le mie relazioni dovrebbero essere di tipo diverso? desideroso, pigro, dinamico, ecc? In questo momento, non specifica nulla in particolare.

Aiuto molto apprezzato.

+5

dai un'occhiata alla mia risposta http://stackoverflow.com/questions/1171166/how-can-i-profile-a-sqlalchemy-powered-application/1175677#1175677 per alcuni posti da avviare – zzzeek

risposta

0

Quanto sono dinamiche le query, è solo un tipo di oggetto che viene sempre restituito o si tratta di molti modelli diversi. Quante file stai restituendo? Puoi limitare il numero di colonne o il numero di righe? A enormi volumi di dati supponendo che tutto sia già facile, anche la conversione in python delle colonne nei tipi di dati corretti può causare una quantità accettabile di sovraccarico.

Inoltre, ho SQLAlchemy solo per progetti rapidi, ma è possibile che l'utilizzo della cpu stia aumentando mentre è in attesa dei risultati? Se questo è il tuo problema, potresti voler analizzare in dettaglio le query effettivamente eseguite e assicurarti che siano indicizzate correttamente e che orm le stia generando in modo ottimale.

+0

Le query SQL sono abbastanza pochi e restituiscono piccole tasche di oggetti. La maggior parte del tempo viene spesa nell'ORM stesso. – Svenstaro

Problemi correlati