2011-05-30 5 views
7

मैं एक MySQL डेटाबेस में डेटा से अपने पृष्ठों को उत्पन्न करने के लिए एक सिम्फनी 2 का उपयोग कर रहा हूं। अधिकांश सामग्री के लिए, उपयोगकर्ताओं को प्रमाणीकृत होना पड़ता है लेकिन सामग्री स्वयं अक्सर बदलती नहीं है और उपयोगकर्ताओं के लिए अनुकूलित करने की आवश्यकता नहीं होती है। तो अभी भी ऑथ चेक बनाए रखने के दौरान डेटाबेस कॉल से बचने के लिए एक अच्छी कैशिंग रणनीति क्या है?ऑथ जानकारी बनाए रखने के दौरान उत्पन्न सामग्री की आक्रामक कैशिंग

+0

टीएफएम में कुछ सभ्य जानकारी है - http://symfony.com/doc/current/book/http_cache.html - मुझे लगता है कि ऐप कैश में आपके लिए आवश्यक सभी उपहार हैं, केवल यह जांचने की आवश्यकता हो सकती है कि अनुरोध प्रमाणित किया गया था या नहीं , या प्रतिक्रिया को कैश करने से पहले एक गैर-सार्वजनिक संसाधन के लिए। – smcphill

+2

वह अपनी समस्या का समाधान नहीं करेगा। वह MySQL के लिए HTTP अनुरोधों के लिए क्वेरी कैश करने की तलाश में है। –

उत्तर

0

मैं अंदर Zend_Cache का उपयोग करके इस हल के लिए उपयोग कर सकते हैं प्रस्तुत टेम्पलेट परिणाम को स्टोर करने के लिए कैश करने योग्य क्रियाएं। मैं फिर कैश की गई सामग्री से एक नया Response ऑब्जेक्ट बना देता हूं। यदि कैश खाली है, तो मैं सामग्री उत्पन्न करता हूं।

मैंने एक प्लगइन बनाने का विचार किया जो एक एनोटेशन की जांच करता है और प्रतिक्रिया आउटपुट को स्वचालित रूप से संग्रहीत करता है लेकिन यह पता चला है कि मेरे पास केवल 3-4 डिस्प्ले क्रियाएं हैं जो कैशबल हैं और बहुत ही जटिल कैश आईडी निर्माण नियम हैं, इसलिए मैंने सीधे नियंत्रक कोड में कैशिंग तर्क।

1

बस शब्दों में विस्तारित अवधि के लिए SQL परिणाम-सेट को कैश करने के लिए मेमकैच का उपयोग करें।

-1

ऐसा प्रतीत होता है कि आपके पास सिम्फनी http://www.symfony-project.org/book/1_2/12-Caching के साथ कैशिंग के लिए बहुत सारे विकल्प हैं (2 के लिए नहीं, लेकिन मेरा अनुमान बहुत कुछ नहीं बदला गया है)।

आप अपने स्वयं के लिपि में अपने भारी एसक्यूएल बयान कर दिया और कहा कि स्क्रिप्ट के लिए पर कैशिंग

list: 
    enabled:  on 
    with_layout: false # Default value 
    lifetime: 86400 # Default value 

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

$this->getResponse()->addCacheControlHttpHeader('max_age=1200'); // in seconds - less than 1 year seconds 

बस सुनिश्चित करें कि अपनी अधिकतम उम्र काफी छोटा है कि जब कुछ बदल जाता है (जैसे कि एक कोड अद्यतन) है कि उपयोगकर्ता पुराने पेज के साथ अटक न जाए के बाद से वहाँ उन्हें फिर से उस पृष्ठ का अनुरोध करने के लिए मजबूर करने के कोई रास्ता नहीं है यूआरएल बदलने से कम।

+0

यह सिम्फनी 1 के लिए है। – chiborg

0

हो सकता है कि यह बहुत बड़ा परिवर्तन हो सकता है, लेकिन निम्नलिखित योजना के मामले में उपयोगी हो सकता है:

पृष्ठों के कई समूहों से बनाएँ, के लिए नहीं अभी तक authed उपयोगकर्ताओं को एक (साइट जड़ में डाल देना) , और प्रमाणीकृत उपयोगकर्ताओं को जो एक ही सामग्री को देखना चाहिए (कहें, यह दो या अधिक को एक ही सामग्री को प्रमाणीकृत होने पर देखना चाहिए, फिर हम उन सभी के लिए केवल एक सेट बनाएंगे), और इसे निर्देशिका में डालें जड़ के नीचे फिर ऐसी 'for-authed-only' निर्देशिका के लिए सरल। Htaccess/.htpasswd फ़ाइलें बनाएं और फिर यह आपकी स्क्रिप्ट नहीं वाली वेबसर्वर की समस्या होगी।

आशा है कि आपको यह विचार मिल जाएगा। यह कहना अस्पष्ट है, लेकिन इसे लागू करना आसान होगा।

उदाहरण: कहें कि आप साइट पर केवल 'प्रमाणीकृत उपयोगकर्ताओं को पृष्ठ' /topsecret.html 'देखने की अनुमति देते हैं। डीआईआर (/ authed) बनाएं, उस पर HTTP-auth स्थापित करें, और अपने topsecret.html को डीआईआर में डालें (इसलिए यह '/authed/topsecret.html' होगा)। अब '/topsecret.html' संपादित करें और इसे 'माफ करना, कृपया प्रमाणित करें' लिंक के साथ अपनी मुख्य सामग्री को सरल बनाएं जो '/authed/topsecret.html' पर इंगित करेगा।

0

यदि आप सिम्फनी 2 का उपयोग करते हैं, तो आप Doctrine2 का उपयोग कर रहे हैं यदि आप Doctrine2 का उपयोग करते हैं, तो कैशिंग को डिफ़ॉल्ट रूप से सक्षम किया जाना चाहिए।

अपने उद्देश्यों के लिए अपने कैश ड्राइवर का चयन करें और कोई समस्या नहीं होनी चाहिए। आप विशेष रूप से query result caching में रुचि भी ले सकते हैं।

मेटाडेटा और क्वेरी कैश के बिना सिद्धांत का उपयोग न करें! सिद्धांत कैश के साथ काम करने के लिए अत्यधिक अनुकूल है। कैशिंग के लिए ऑप्टिमाइज़ किए गए सिद्धांत में मुख्य भाग मेटाडेटा मैपिंग जानकारी मेटाडेटा कैश और क्वेरी कैश के साथ SQL रूपांतरणों के साथ DQL में हैं।इन 2 कैशों को अभी तक केवल एक पूर्ण न्यूनतम स्मृति की आवश्यकता है वे सिद्धांत के रनटाइम प्रदर्शन में काफी सुधार करते हैं। सिद्धांत के साथ उपयोग करने के लिए अनुशंसित कैश ड्राइवर एपीसी है। एपीसी आप एक opcode-कैश के साथ प्रदान करता है (जो बहुत वैसे भी सिफारिश की है) और एक बहुत ही तेजी से इन-मेमोरी कैश भंडारण है कि आप मेटाडाटा और क्वेरी कैश