2012-09-11 10 views
2

У меня есть приложение django, работающее на gunicorn с mysql в качестве базы данных. Я добавил gevent, чтобы иметь дело с несколькими файловыми загрузками, но я не уверен, что является моим лучшим вариантом драйвера для того, чтобы gevent хорошо играли с базой данных mysql., который является лучшим вариантом для того, чтобы заставить mysql хорошо играть с gevent в приложении django.

(Пожалуйста, обратите внимание, что база данных уже содержит большое количество данных, поэтому переход к Postgres является непривлекательным опция)

ответ

1

Вы проверили Projects Using Gevent?

Редактировать: В соответствии с вышеприведенной страницей gevent-MySQL больше не поддерживается. Это делает возможным только ultramysql.

+0

Спасибо за ссылку и предложение. Единственная проблема с ultramysql заключается в том, что, похоже, не так много документов для интеграции и использования в проектах. – Finglish

+0

Да, это своего рода недостаток. Сам gevent по-прежнему относительно новый в мире Python. Также читайте где-то, что ultramysql на самом деле не работает с основными библиотеками (SQLAlchemy, возможно, Django ORM). –

+0

Спасибо, я проголосовал за вашего ансера, но я оставлю вопрос открытым после изменения, есть ответ. – Finglish

1

Возможно, вы захотите использовать pymysql, так как он может быть заражен обезьяной. Я не использовал его сам еще, но вот видео YouTube из презентации под названием «Джанго на GEvent» Коди Soyland на DjangoCon в начале этого года: http://www.youtube.com/watch?v=nocGRsytBkk

Pymysql можно найти здесь: https://github.com/petehunt/PyMySQL

0

набор CONN_MAX_AGE положительное значение для повторного соединения с базой данных, и соединение патча Джанго, как это:

from django.db import connections 
from django.db.utils import ConnectionHandler 


_original_get_item = ConnectionHandler.__getitem__ 


def _new_get_item(self, alias): 
    conn = _original_get_item(self, alias) 
    conn.allow_thread_sharing = True 
    return conn 


class _Dummy(object): 
    pass 


def apply_patch(): 
    ConnectionHandler.__getitem__ = _new_get_item 
    connections._connections = _Dummy() 

Примечание:

  1. Python-MySQL основан на С привязок, который имеет прирост производительности по сравнению с клиентами MySQL чистым питона
  2. с привязки не взаимодействует с GEvent поэтому соединение может быть безопасно использовать повторно несколькими greenlets
  3. постоянное соединение может избежать затрат на подключение установить и разбить
  4. с помощью стрельбы из лука, вы можете легко увеличить количество рабочих работников, чтобы полностью использовать производительность базы данных.