Ускорить часто используемые Django случайный запрос - PullRequest
3 голосов
/ 23 августа 2011

У меня настроен запрос, который помещает 28 случайных записей из базы данных в ответ JSON. Эта страница часто просматривается, каждые несколько секунд, но в настоящее время она слишком медленная, на мой взгляд.

В ответе JSON у меня есть:

  • идентификаторы
  • Usernames
  • миниатюра Base64

Все это из трех связанных таблиц.
Я хотел бы услышать о некоторых других решениях, вместо того, чтобы пользователи просто заходили на страницу, просматривали 28 случайных записей и выплевывали ответ. У меня была одна идея:

  • Запустите процесс, который каждые 30 секунд создает кэшированную страницу с ответом JSON.

Это хороший вариант? Если это так, я хотел бы услышать, как это будет сделано.

Еще раз спасибо,
Надеюсь, все хорошо

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Django поддерживает различные методы кэширования, как встроенные, так и memcached. Я бы выбрал один из методов в документации и создал бы конкретное представление для вашего ответа json. Затем вы можете использовать декоратор @cache_page и указать конкретное время.

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

https://docs.djangoproject.com/en/1.3/topics/cache/

0 голосов
/ 23 августа 2011

Если таблицы связаны через внешний ключ, может быть с использованием select_related ? По ссылке, пример, который они приводят (вам нужно немного прокрутить вниз):

>>> e = Entry.objects.select_related().get(id=2)
>>> print e.blog  # Doesn't hit the database; uses cached version.
>>> print e.blog  # Doesn't hit the database; uses cached version.

Я не уверен насчет трех таблиц, но он хорошо работает для двух.

...