यह प्रश्न वास्तुकला में सर्वोत्तम प्रथाओं के बारे में है।
हमारे वर्तमान वास्तुकला
मेरे पास एक PHP वर्ग है जो उपयोगकर्ता जानकारी के लिए MySQL तक पहुँचता है। चलो बुलावा आया User
। User
कई बार पहुँचा जाता है, इसलिए हमने लोड कम करने के लिए कैशिंग की परतों को लागू किया है।
पहली परत वह है जिसे हम "प्रति अनुरोध" कैश कहते हैं। MySQL से डेटा पुनर्प्राप्त होने के बाद, हम डेटा को एक निजी संपत्ति में संग्रहीत करते हैं User
। डेटा का कोई भी बाद का अनुरोध MySQL से डेटा को फिर से अनुरोध करने के बजाय संपत्ति लौटाता है।
चूंकि वेब अनुरोध एक प्रति-अनुरोध के आधार पर रहता है और मर जाता है, यह कैश केवल एक अनुरोध में एक से अधिक बार MySQL तक पहुंचने से रोकता है।
हमारी दूसरी परत मेमकेच्ड है। जब निजी संपत्ति खाली होती है, तो हम सबसे पहले डेटा के लिए मेमक्लेड की जांच करते हैं। यदि Memcached खाली है तो हम डेटा के लिए MySQL की क्वेरी करते हैं, Memcached को अपडेट करते हैं, और की निजी संपत्ति को अपडेट करते हैं User
।
प्रश्न
हमारा आवेदन एक खेल है, और कभी-कभी यह जरूरी है कि कुछ डेटा यथासंभव अद्यतित हों। लगभग पांच मिनट की अवधि में, उपयोगकर्ता डेटा के लिए एक रीड रिक्वेस्ट 10 या 11 बार हो सकता है; तब एक अद्यतन हो सकता है। बाद में पढ़े गए अनुरोधों को अद्यतित होना चाहिए या खेल यांत्रिकी विफल होना चाहिए।
इसलिए, हमने जो किया है वह कोड का एक टुकड़ा है जिसे डेटाबेस अपडेट होने पर निष्पादित किया जाता है। यह कोड अपडेट किए गए डेटा के साथ Memcached में कुंजी सेट करता है, इसलिए Memcached के सभी बाद के अनुरोध आज तक हैं।
क्या यह इष्टतम है? क्या इस तरह के "जीवित कैश" को बनाए रखने की कोशिश करते समय कोई प्रदर्शन चिंता या अन्य "गोच" हमें पता होना चाहिए?