Кэширование файлов Sitemap в Django
Я реализовал простой класс Sitemap с помощью стандартного приложения Sitemap от django. Поскольку выполнение заняло много времени, я добавил ручное кэширование:
class ShortReviewsSitemap(Sitemap):
changefreq = "hourly"
priority = 0.7
def items(self):
# try to retrieve from cache
result = get_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews")
if result!=None:
return result
result = ShortReview.objects.all().order_by("-created_at")
# store in cache
set_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews", result)
return result
def lastmod(self, obj):
return obj.updated_at
Проблема состоит в том, что memcache допускает только максимальный объект размером 1 МБ. Этот был больше, чем 1 МБ, поэтому хранение в кеше не удалось:
>7 SERVER_ERROR object too large for cache
Проблема в том, что у django есть автоматизированный способ решить, когда он должен делить файл карты сайта на меньшие. Согласно документам (http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):
Вам следует создать индексный файл, если в одном из ваших файлов Sitemap более 50 000 URL-адресов. В этом случае Django автоматически разбивает на страницы карту сайта, и индекс будет отражать это.
Как вы думаете, что было бы лучшим способом включить кэширование карт сайта? - Взломать инфраструктуру django sitemaps, чтобы ограничить один размер файла, скажем, до 10 000 записей, кажется лучшей идеей. Почему 50 000 были выбраны в первую очередь? Гугл совет? случайное число? - Или, может быть, есть способ, позволяющий memcached хранить большие файлы? - Или, возможно, сохраненные файлы должны быть доступны в виде статических файлов? Это будет означать, что вместо кэширования с использованием memcached мне придется вручную сохранять результаты в файловой системе и извлекать их оттуда в следующий раз, когда будет запрошена карта сайта (возможно, ежедневная очистка каталога в задании cron).
Все это кажется очень низким уровнем, и мне интересно, существует ли очевидное решение ...