Подтвердить что ты не робот

Возможно ли выполнить асинхронный/параллельный запрос базы данных в приложении Django?

У меня есть веб-страницы, которые принимают 10-20 запросов к базе данных, чтобы получить все необходимые данные.

Обычно после отправки запроса поток/процесс Django блокируется, ожидая возвращения результатов, затем он возобновляет выполнение, пока не достигнет следующего запроса.

Можно ли асинхронно выдать все запросы, чтобы они могли обрабатываться сервером базы данных параллельно?

Я использую MySQL, но хотел бы услышать о решениях для других баз данных. Например, я слышал, что Postgresql имеет асинхронную клиентскую библиотеку - как я буду использовать это в этом случае?

4b9b3361

Ответ 1

Эта очень недавняя запись в блоге, по-видимому, подразумевает, что она не встроена в рамки django или rails. Я думаю, что он хорошо освещает проблему и вполне заслуживает внимания вместе с комментариями.

http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/

Я думаю, что я помню, как Кэл Хендерсон упоминал этот недостаток где-то в его прекрасной речи http://www.youtube.com/watch?v=i6Fr65PFqfk

Моя наивная догадка заключается в том, что вы можете взломать что-то с отдельными библиотеками python, но вы потеряете много ленивых оценочных материалов ORM/шаблона, которые django дает, чтобы вы могли использовать другой стек. Опять же, если вы только оптимизируете несколько просмотров в большом проекте django, это может быть хорошо.

Ответ 2

У меня была аналогичная проблема, и я решил ее с помощью javascript/ajax

Просто загрузите шаблон с базовой разметкой, а затем выполните severl ajax requsts для выполнения запросов и загрузки данных. Вы даже можете показать анимацию загрузки. У пользователя будет ощущение web 2.0, а не просто мрачная загрузка страницы. Конечно, это означает еще несколько HTTP-запросов на страницу, но вам решать.

Вот как выглядит мой пример: http://artiox.lv/en/search?query=test&where_to_search=all (неработающая ссылка)

Ответ 3

Попробуйте Celery, немного накладных расходов на запуск сервера ampq, но он может делать то, что вы хотите, Не уверен о concurrency БД. Кроме того, если вы хотите скорость для своей БД, я бы рекомендовал MongoDB (но для этого вам понадобится django-nonrel).