我使用django的默認站點地圖應用程序實現了一個簡單的站點地圖類。由於需要很長時間來執行,我添加了手動緩存:在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只允許最大1MB的對象。這是一個大是1MB,所以存儲到緩存失敗:
>7 SERVER_ERROR object too large for cache
的問題是,Django的有決定何時應該劃分網站地圖文件到smalled的傳輸的自動方法。根據該文檔(http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):
您應該創建一個索引文件,如果一個 您的Sitemaps有超過50,000 網址。在這種情況下,Django會自動將 分頁, 並且索引將反映這一點。
您認爲啓用緩存站點地圖的最佳方式是什麼? - 黑客進入Django站點地圖框架來限制單個站點地圖大小,比方說,10,000條記錄似乎是最好的主意。爲什麼首先選擇了50,000個? Google的建議?隨機數? - 或者也許有辦法允許memcached存儲更大的文件? - 或者可能已保存,網站地圖應作爲靜態文件提供?這意味着,不要使用memcached緩存,我必須手動將結果存儲在文件系統中,並在下次請求站點地圖時從中檢索結果(可能每天在cron作業中清理目錄)。
所有這些似乎非常低的水平,我想知道,如果一個顯而易見的解決方案存在...
不要做「結果!=無」,總是做「結果不是無」 – stefanw 2010-01-17 19:13:39
這是爲什麼?有什麼不同? – michuk 2010-01-28 23:33:27
50,000是在Sitemaps協議中給出的。 – webjunkie 2010-08-15 10:12:55