में कैशिंग साइटमैप मैंने 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
समस्या यह है कि मेम्कैश केवल अधिकतम 1 एमबी वस्तु की अनुमति देता है: जैसा कि यह एक लंबे समय निष्पादित करने के लिए ले जा रहा था, मैं मैनुअल कैशिंग गयी। यह एक बड़ा था कि 1 एमबी है, तो कैश में संग्रहीत करने में विफल रहा है:
>7 SERVER_ERROR object too large for cache
समस्या Django निर्णय लेने से जब यह smalled लोगों में साइटमैप फ़ाइल को विभाजित करना चाहिए की एक स्वचालित तरीका होता है। डॉक्स (http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/) के अनुसार:
आप एक सूचकांक फ़ाइल यदि आपके साइटमैप में से एक 50,000 से अधिक URL हैं बनाना चाहिए। इस मामले में, Django स्वचालित रूप से साइटमैप, पर अंकुश करेगा और सूचकांक इसे प्रतिबिंबित करेगा।
कैशिंग साइटमैप को सक्षम करने का सबसे अच्छा तरीका आपको क्या लगता है? - एकल साइटमैप आकार को प्रतिबंधित करने के लिए django साइटमैप ढांचे में हैकिंग, मान लीजिए, 10,000 रिकॉर्ड सबसे अच्छे विचार की तरह दिखते हैं। पहली जगह 50,000 क्यों चुना गया था? Google सलाह? यादृच्छिक संख्या? - या शायद memcached स्टोर बड़ी फ़ाइलों को अनुमति देने का एक तरीका है? - या शायद बचाया जा सकता है, साइटमैप स्थिर फाइलों के रूप में उपलब्ध कराया जाना चाहिए? इसका मतलब यह होगा कि memcached के साथ कैशिंग के बजाय मुझे परिणामों को मैन्युअल रूप से फाइल सिस्टम में संग्रहीत करना होगा और साइटमैप से अनुरोध होने पर उन्हें वहां से पुनर्प्राप्त करना होगा (शायद क्रॉन नौकरी में निर्देशिका को साफ करना)।
उन सभीबहुत कम स्तर लगते हैं और मैं सोच रहा हूँ एक स्पष्ट समाधान मौजूद है अगर ...
"परिणाम! = कोई नहीं" मत करो, हमेशा "परिणाम कोई नहीं है" – stefanw
वह क्यों है? क्या फर्क पड़ता है? साइटमैप प्रोटोकॉल में – michuk
50,000 दिया गया है। – webjunkie