Caching von Sitemaps in Django

Ich habe eine einfache Sitemap-Klasse mit Djangos Standard-Sitemap-App implementiert. Da die Ausführung sehr lange dauerte, habe ich manuelles Caching hinzugefügt:

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

Das Problem ist, dass Memcache nur maximal 1 MB Objekt zulässt. Dieser war größer als 1 MB, daher schlug das Speichern im Cache fehl:

>7 SERVER_ERROR object too large for cache

Das Problem ist, dass Django eine automatisierte Methode hat, um zu entscheiden, wann die Sitemap-Datei in kleine Dateien aufgeteilt werden soll. Nach den Dokumenten (http://docs.djangoproject.com/de/dev/ref/contrib/sitemaps/):

Sie sollten eine Indexdatei erstellen, wenn eine Ihrer Sitemaps mehr als 50.000 URLs enthält. In diesem Fall paginiert Django die Sitemap automatisch, und der Index gibt dies wieder.

Was ist Ihrer Meinung nach der beste Weg, um Caching-Sitemaps zu aktivieren? - Das Hacken in das Django-Sitemaps-Framework, um eine einzelne Sitemap-Größe auf beispielsweise 10.000 Datensätze zu beschränken, scheint die beste Idee zu sein. Warum wurden überhaupt 50.000 ausgewählt? Google-Rat? Zufallszahl? - Oder gibt es eine Möglichkeit, im Memcached Store größere Dateien zuzulassen? - Oder vielleicht einmal gespeichert, sollten die Sitemaps als statische Dateien zur Verfügung gestellt werden? Dies würde bedeuten, dass ich anstelle des Cachings mit memcached die Ergebnisse manuell im Dateisystem speichern und von dort abrufen müsste, wenn die Sitemap das nächste Mal angefordert wird (möglicherweise wird das Verzeichnis täglich in einem Cron-Job gesäubert).

All diese scheinen sehr niedrig zu sein und ich frage mich, ob es eine offensichtliche Lösung gibt ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage