Ho implementato una semplice classe Sitemap utilizzando l'app sitemap predefinita di Django. Come è stato tenuto un lungo periodo di tempo per l'esecuzione, ho aggiunto la cache manuale:Sitemap cache in 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
Il problema è che memcache consente solo oggetto max 1MB. Questo era più grande che 1 MB, in modo da memorizzare nella cache non riuscita:
>7 SERVER_ERROR object too large for cache
Il problema è che Django ha un modo automatico di decidere quando deve dividere il file sitemap in quelle smalled. Secondo la documentazione (http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):
È necessario creare un file di indice se uno dei tuoi Sitemap ha più di 50.000 URL. In questo caso, Django sarà che impagina automaticamente la sitemap, e l'indice lo rifletterà.
Quale pensi che sarebbe il modo migliore per abilitare la memorizzazione nella cache delle sitemap? - Hacking nel framework di sitemap django per limitare le dimensioni di una singola Sitemap a, diciamo, 10.000 record sembra l'idea migliore. Perché sono stati scelti 50.000 in primo luogo? Consiglio di Google? numero casuale? - O forse c'è un modo per consentire ai file di grandi dimensioni del negozio memcached? - O forse gli sforzi salvati, le sitemaps dovrebbero essere rese disponibili come file statici? Ciò significherebbe che invece di memorizzare nella cache con memcached dovrei memorizzare manualmente i risultati nel filesystem e recuperarli da lì la prossima volta quando viene richiesta la sitemap (magari pulendo la directory ogni giorno in un cron job).
Tutti coloro sembrano livello molto basso e mi chiedo se esiste una soluzione ovvia ...
Non fare "risultato! = Nessuno", sempre fare "risultato non è nessuno" – stefanw
perché è? qual è la differenza? – michuk
50.000 è indicato nel protocollo Sitemaps. – webjunkie