Кэширование файлов 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).

Все это кажется очень низким уровнем, и мне интересно, существует ли очевидное решение ...

Ответы на вопрос(4)

Ваш ответ на вопрос