2012-04-03 6 views
6

Я сделал клиентское приложение, которое использует HTTP для связи с сервером Python 2 с использованием простого API. Сервер использует ORM SQLAlchemy достаточно широко, чтобы обслуживать данные для этих HTTP-запросов. Проблема в том, что использование моего процессора довольно велико даже при наличии нескольких активных клиентов. Этот сервер должен иметь возможность одновременно обслуживать несколько сотен клиентов примерно в 1 запросе на секунду для каждого клиента, поэтому он все равно должен быть управляемым (или я надеюсь).Как улучшить производительность SQLAlchemy?

Как повысить производительность? Я знаю, что проблема в ORM, поскольку cProfile показывает это довольно четко. По-видимому, один запрос выполняет около 10000 команд Python, которые кажутся довольно странными. Я попробовал подключить различные двигатели/серверы баз данных и сменил интерпретатора на Pypy просто для удовольствия, но он явно не помог исходной проблеме, а также не улучшил производительность.

Что я здесь делаю неправильно? Я действительно надеюсь, что это «хорошо, ду!» проблема.

Должны ли мои отношения быть другого типа? нетерпеливый, ленивый, динамичный и т. д.? Прямо сейчас, я не указываю ничего конкретно.

Помощь с благодарностью.

+5

взгляните на мой ответ http://stackoverflow.com/questions/1171166/how-can-i-profile-a-sqlalchemy-powered-application/1175677#1175677 для запуска некоторых мест – zzzeek

ответ

0

Насколько динамичны запросы, это только один тип объекта, который всегда возвращается или это разные модели. Сколько строк вы возвращаетесь? Можете ли вы ограничить количество столбцов или количество строк? При огромных объемах данных, предполагающих, что вы все легко уже исправили, даже преобразование столбцов в правильные типы данных на python может вызвать приличное количество накладных расходов.

Также у меня есть SQLAlchemy только для быстрых проектов, но возможно ли использование процессора, когда оно ожидает результатов? Если это ваша проблема, вы можете погрузиться в профилирование текущих запущенных запросов и убедиться, что они правильно проиндексированы и что orm генерирует их оптимальным образом.

+0

SQL-запросы довольно мало и возвращают очень маленькие карманы предметов. Большая часть времени проводится в самой ORM. – Svenstaro

Смежные вопросы