django

2010-05-11 7 views
15

में बड़े पैमाने पर साइटमैप की कुशलतापूर्वक सेवा कैसे करें मेरे साइटमैप में लगभग 150 के पृष्ठ वाली साइट है। मैं साइटमैप बनाने के लिए साइटमैप इंडेक्स जनरेटर का उपयोग कर रहा हूं, लेकिन वास्तव में, मुझे इसे कैशिंग करने का एक तरीका चाहिए, क्योंकि 1,000 सर्वरों के 150 साइटमैप का निर्माण मेरे सर्वर पर क्रूर है। [1]django

मैं इन साइटमैप पृष्ठों में से प्रत्येक को memcached के साथ कैश कर सकता हूं, जो कि मैं साइट पर कहीं और उपयोग कर रहा हूं ... हालांकि, यह इतने सारे साइटमैप हैं कि यह पूरी तरह से memcached भर जाएगा .... तो यह ' टी काम नहीं

मुझे लगता है कि मुझे डेटाबेस के लिए कैश के रूप में उपयोग करने का एक तरीका है, और केवल उन्हें उत्पन्न करने के लिए उन्हें उत्पन्न करने के लिए एक तरीका है (साइटमैप इंडेक्स के परिणामस्वरूप केवल नवीनतम साइटमैप को बदलना पेज, क्योंकि बाकी हमेशा एक ही होते हैं।) [2] लेकिन, जैसा कि मैं कह सकता हूं, मैं केवल एक कैश बैकएंड का उपयोग django के साथ कर सकता हूं।

जब मैं Google डेटाबेस-मे-क्रॉलिन को अपने डेटाबेस को मारने या यादगार किए बिना आता हूं, तो मैं इन साइटमैप को कैसे तैयार कर सकता हूं?

कोई विचार?

[1] मैंने इसे प्रति साइटमैप पेज पर 1,000 लिंक तक सीमित कर दिया है क्योंकि अधिकतम, 50,000 लिंक उत्पन्न करना, बस नहीं हो रहा था।

[2] उदाहरण के लिए, यदि मेरे पास sitemap.xml है? पृष्ठ = 1, पृष्ठ = 2 ... sitemap.xml? पृष्ठ = 50, मुझे केवल sitemap.xml? पृष्ठ = 50 को बदलने की ज़रूरत है यह एक समस्या होने के लिए जारी रखा है:, तो मैं, यह कैश हमेशा के लिए आदि

संपादित यह हमेशा ही इस तरह कर सकते हैं, और पेज 51 पर ध्यान केंद्रित जब तक यह भरा हुआ है, 1000 लिंक के साथ पूर्ण है 2012-05-12 , और अंत में मैंने लगभग एक वर्ष तक फ़ाइल कैश के साथ इसका उपयोग करने के बाद Django के साइटमैप ढांचे को हटा दिया। इसके बजाय अब मैं वास्तव में सरल दृश्य में आवश्यक लिंक उत्पन्न करने के लिए सोलर का उपयोग कर रहा हूं, और फिर मैं उन्हें Django टेम्पलेट में भेज रहा हूं। यह बहुत ने मेरे साइटमैप को सरल बना दिया, जिससे उन्हें ठीक प्रदर्शन किया गया, और अब तक लगभग 2,250,000 लिंक हैं। यदि आप ऐसा करना चाहते हैं, तो बस साइटमैप टेम्पलेट देखें - यह सब वास्तव में वहां से स्पष्ट है। आप यहां इसके लिए कोड देख सकते हैं: https://bitbucket.org/mlissner/search-and-awareness-platform-courtlistener/src/tip/alert/casepage/sitemap.py

+0

नहीं, वे बॉट के लिए हैं। कृपया उन्हें अनदेखा करें। विवरण: sitemaps.org – mlissner

उत्तर

9

मेरे पास एक समान समस्या थी और साइटमैप फ़ाइलों को स्थिर मीडिया में डिस्क पर लिखने के लिए django का उपयोग करने का निर्णय लिया और वेबसर्वर उन्हें सेवा प्रदान करता है। मैंने हर दो घंटे में साइटमैप को पुन: उत्पन्न करने के लिए कॉल किया क्योंकि मेरी सामग्री उस से अधिक बार नहीं बदली थी। लेकिन यह आपकी सामग्री पर निर्भर करेगा कि आपको फ़ाइलों को कितनी बार लिखना होगा।

मैंने एक क्रोन नौकरी के साथ एक django कस्टम कमांड का उपयोग किया, लेकिन एक क्रॉन नौकरी के साथ कर्ल आसान है।

यहाँ कैसे मैं कर्ल का उपयोग है, और मैं अपाचे एक स्थिर फ़ाइल के रूप में /sitemap.xml भेज दिया है, Django के माध्यम से नहीं:

curl -o /path/sitemap.xml http://example.com/generate/sitemap.xml 
+1

मैं अब कुछ इसी तरह काम कर रहा हूं। क्या आपके पास कोड उदाहरण है? – mlissner

+1

mlissner - Dar के उत्तर पर विस्तृत करने के लिए: 1) Djem URL को sitemap.xml के लिए /generate/sitemap.xml पर ले जाएं; 2) /path/to/sitemap.xml आपकी मीडिया निर्देशिका में किसी स्थान के पूर्ण सिस्टम पथ होना चाहिए (सुनिश्चित करें कि उपयोगकर्ता द्वारा यह लिखने योग्य है जो क्रॉन नौकरी चलाएगा); 3) एक cron नौकरी सेट करें जो /generate/sitemap.xml यूआरएल से खींचती है और आउटपुट को आपके मीडिया डीआईआर में उस स्थान पर लिखती है। – shacker

+0

मैंने इस विधि को परिष्कृत करना जारी रखा है। उल्लेख करने के लिए अतिरिक्त चीजें जोड़े। 1), Django के साइटमैप जनरेटर के साथ उपयोग की जाने वाली date_field को डेटाबेस इंडेक्स होना चाहिए, क्योंकि इसका उपयोग साइटमैप को सॉर्ट करने के लिए किया जाता है। यह महसूस नहीं किया कि लंबे समय तक, और आश्चर्यजनक रूप से किसी ने इसका उल्लेख नहीं किया है। 2), जब मैं पूर्ण हो जाता हूं तो डिस्क पर सभी साइटमैप को स्थायी रूप से कैश कर देता है (नाक पर 1,000 लिंक), और फिर आइटम बदलते समय कैश को अमान्य करने के लिए Django संकेतों का उपयोग करें। – mlissner

8

ठीक है - मैं इस पर कुछ अधिक जानकारी पाया है और क्या कर रहे हैं अमेज़न उनके 6 मिलियन या तो यूआरएल के साथ।

अमेज़न बस प्रत्येक दिन के लिए एक नक्शा बनाने के लिए और यह करने के लिए जोड़ें:

  1. नया यूआरएल
  2. अद्यतन यूआरएल

तो इसका मतलब है कि वे साइट-नक्शे का भार के साथ खत्म - लेकिन खोज बॉट केवल नवीनतम लोगों को देखेंगे - क्योंकि अपडेट की गई तिथियां हाल ही में हैं।मैं समझ में था कि किसी को नक्शा रीफ्रेश करना चाहिए - और एक बार से अधिक यूआरएल शामिल नहीं करना चाहिए। मुझे लगता है कि यह सच है। लेकिन, अमेज़ॅन इस के आसपास मिलता है क्योंकि साइट मानचित्र लॉग के अधिक हैं। एक यूआरएल बाद के साइट-मैप में दिखाई दे सकता है - जैसा कि यह शायद अपडेट हो सकता है - लेकिन Google पुराने मानचित्रों को तब तक नहीं देख पाएगा जब तक वे पुराने नहीं हैं - बशर्ते कि यह एक प्रमुख पुन: अनुक्रमणिका न हो। यह दृष्टिकोण बहुत समझ में आता है क्योंकि आप बस एक नया नक्शा बनाते हैं - नई और अद्यतन सामग्री के प्रत्येक दिन कहें और इसे Google पर पिंग करें - इस प्रकार Google को केवल इन नए यूआरएल को इंडेक्स करने की आवश्यकता है।

यह लॉग दृष्टिकोण कोड के लिए एक सिंचन है - जैसा कि आपको केवल एक स्थिर डेटा-स्टोर मॉडल है जो प्रत्येक मानचित्र के लिए XML डेटा संग्रहीत करता है। आपका क्रॉन जॉब एक ​​नक्शा बना सकता है - दैनिक या साप्ताहिक और फिर कच्चे एक्सएमएल पेज को ब्लॉब फ़ील्ड में स्टोर करें या आप क्या हैं। फिर आप सीधे हैंडलर और इंडेक्स मानचित्र से भी पृष्ठों की सेवा कर सकते हैं।

मुझे यकीन नहीं है कि दूसरों को क्या लगता है लेकिन यह एक बहुत ही व्यावहारिक दृष्टिकोण और लोड ऑफ सर्वर की तरह लगता है - विशाल मानचित्र पुनर्निर्माण की तुलना में सिर्फ कुछ पेज बदल सकते हैं।

मैं भी है कि यह तो एक सप्ताह नक्शे में नक्शे की कीमत एक सप्ताह की कमी और एक महीने में नक्शे 4 सप्ताह तक संभव हो सकता है पर विचार किया है - तो आप वर्तमान में प्रत्येक सप्ताह के लिए एक नक्शा मासिक नक्शे के साथ खत्म हो, महीने और फिर पिछले 7 दिनों के लिए एक नक्शा। यह मानते हुए कि तिथियां सभी बनाए रखी गई हैं, यह प्रक्रिया को साफ करने वाले मानचित्रों की संख्या को कम कर देगी - मैं साल के प्रत्येक दिन के लिए 365 मानचित्रों को कम करने के मामले में सोच रहा हूं।

यहां साइट मानचित्रों पर एक पीडीएफ है और अमेज़ॅन और सीएनएन द्वारा उपयोग किए जाने वाले दृष्टिकोण।

http://www2009.org/proceedings/pdf/p991.pdf

+0

यह दिलचस्प है। दस्तावेज़ साझा करने के लिए धन्यवाद। – Tony

3
मैं जब डेटा अद्यतन फाइल सिस्टम और उस फ़ाइल को अद्यतन करने के लिए कैशिंग sitemap.xml के लिए django-staticgenerator एप्लिकेशन का उपयोग कर रहा

settings.py:

STATIC_GENERATOR_URLS = (
    r'^/sitemap', 
) 
WEB_ROOT = os.path.join(SITE_ROOT, 'cache') 

models.py:

from staticgenerator import quick_publish, quick_delete 
from django.dispatch import receiver 
from django.db.models.signals import post_save, post_delete 
from django.contrib.sitemaps import ping_google 

@receiver(post_delete) 
@receiver(post_save) 
def delete_cache(sender, **kwargs): 
    # Check if a Page model changed 
    if sender == Page: 
     quick_delete('/sitemap.xml') 
     # You may republish sitemap file now 
     # quick_publish('/', '/sitemap.xml') 
     ping_google() 

nginx विन्यास में मैं कैश फ़ोल्डर को sitemap.xml अनुप्रेषित और वापस आने के लिए उदाहरण django:

location /sitemap.xml { 
    root /var/www/django_project/cache; 

    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 

    if (-f $request_filename/index.html) { 
     rewrite (.*) $1/index.html break; 
    } 
    # If file doesn't exist redirect to django 
    if (!-f $request_filename) { 
     proxy_pass http://127.0.0.1:8000; 
     break; 
    }  
} 

इस विधि के साथ, sitemap.xml हमेशा अद्यतन किया जाएगा और क्लाइंट (जैसे Google) हमेशा xml फ़ाइल स्थिर हो जाता है। मुझे लगता है कि यह अच्छा है! :)

0

उन लोगों के लिए जो (किसी भी कारण से) अपने साइटमैप गतिशील रूप से जेनरेट करना पसंद करेंगे (जैसे ताजगी, आलस्य)। django-sitemaps आज़माएं। यह मानक साइटमैप का एक स्ट्रीमिंग संस्करण है। ड्रॉप-इन प्रतिस्थापन। बहुत तेजी से प्रतिक्रिया समय और waaaayay कम स्मृति का उपयोग करता है।