2012-01-23 17 views
5

साथ सर्वर साइड कैशिंग को लागू करने के लिए कैसे अपने ब्राउज़र आधारित (फेसबुक प्लेटफॉर्म के लिए) फ्लेक्स खेल के लिए, मैं PHP और MySQL सर्वर साइड कार्यक्रमों की के लिए और डेटा (amfPHP का प्रयोग करके)पीएचपी

बचत जब से मैं था के लिए उपयोग कर रहा हूँ खेल विकास और PHP दोनों के लिए बहुत नया और मैं अपना गेम चलाना चाहता था, मैंने बहुत ही बदसूरत और गंदे कोड के साथ सभी सर्वर-साइड कोडिंग (एएमएफपीएचपी सेवाएं) लिखी हैं जो डीबी को लाने के लिए हिट करती हैं, गेम स्टेटस अपडेट करें (खिलाड़ियों सहित) आंकड़े और सूची)।

निश्चित रूप से यह कुशल नहीं है, इसलिए मैंने कैशिंग को लागू करने के लिए PHP में उपलब्ध सर्वोत्तम तरीका खोजना शुरू कर दिया है। कैशिंग द्वारा, मेरा मतलब है कि मैं खिलाड़ी की नवीनतम गेम स्थिति को बचाने के लिए हर समय डीबी को हिट नहीं करना चाहता हूं, लेकिन सत्र के अंत में बचाएं (जब खिलाड़ी ऐप छोड़ देता है)।

आमतौर पर, मेरा खेल/एप्लिकेशन प्रवाह की तरह है इस

  • प्लेयर अमेरिकन प्लान से एप्लिकेशन/खेल की शुरूआत
  • प्रमाणीकरण
  • लोड उपयोगकर्ता सत्र (पहले से सहेजे गए खेल राज्य) .यह उपयोगकर्ता प्राप्त करते समय भी शामिल है आंकड़े जैसे कि कितनी ऊर्जा, सिक्के, अनुभव इत्यादि, उनके पास, उनकी सूची, वर्तमान सक्रिय क्वेस्ट इत्यादि हैं और बाजार वस्तुओं, ऑफ़र, बूंद इत्यादि जैसी स्थिर जानकारी भी
  • कुछ बदलाव होने पर गेम स्थिति अपडेट करें खेल में, आमतौर पर जब उपयोगकर्ता क्लिक करता है इकट्ठा करने के लिए कुछ भवनों पर, ऊर्जा का उपभोग करें, सिक्कों को जोड़ें, अनुभव या पुरस्कार दें और इसी तरह।

अब कुछ ऐसी चीजें हैं जो सभी खिलाड़ियों को "बाजार वस्तुएं और उनकी कीमतें और ग्राफिक संपत्ति इत्यादि" जैसे आम आंकड़ों के समान होती हैं, और खिलाड़ी विशिष्ट डेटा होते हैं।

मेरे मन में कुछ विचार हैं और मुझे विशेषज्ञों की मदद की ज़रूरत है जो मैं सोच रहा हूं वह अच्छा है या बुरा है या यदि कोई बेहतर तरीका है?

कैश में स्थायी रूप से स्थिर (सामान्य) डेटा सहेजें और को साफ़/अद्यतन करने के लिए एक व्यवस्थापक पैनल है प्रमाणीकरण के बाद, डेटा पुनर्प्राप्त करें और कैश में सहेजें (JSON ऑब्जेक्ट्स के रूप में) और सत्र समाप्त होने तक सभी पढ़/लिखते हैं सत्र समाप्त होने के बाद कैश में किया जाना चाहिए, कैश डेटा को डीबी में सहेजें।

यहां मैं एपीसी का उपयोग करना चाहता हूं। क्या आपको लगता है कि यह विश्वसनीय है?

मुझे लगता है कि, सबसे बुरी स्थिति में, जब वेबसर्वर सभी कैश डेटा क्रैश हो जाता है, तो मैं उन्हें सत्र में सहेजने के बारे में सोच रहा था, लेकिन मुझे लगता है कि PHP उन्हें फाइलों में रखता है जिसका मतलब है कि मैं बहुत कुछ करूँगा/ओ जिसे फिर से अनुशंसित नहीं किया जाता है? या यह स्वीकार्य होगा?

मैं यह भी सोच रहा हूं कि धारावाहिक वस्तुओं में गेम स्थिति को सहेजना कितना अच्छा है?

उत्तर

4

क्या आपने अपना आवेदन प्रोफ़ाइल किया था और डीबी को बाधा के रूप में पहचाना था? ऐसा लगता है कि आप उन चीज़ों को अनुकूलित करने की कोशिश कर रहे हैं, जिन पर सबसे अधिक संभावना नहीं है।

डीबी से डेटा प्राप्त करना वास्तव में तेज़ है। डीबी को लिखना थोड़ा धीमा हो सकता है, खासकर अगर आप लेनदेन का उपयोग करते हैं। लेकिन डीबी अभी भी आसानी से प्रति सेकंड बहुत सारे लिखने/अपडेट कॉल को संभाल सकता है।

ऐसा लगता है कि आप कुछ समयपूर्व अनुकूलन कर रहे हैं जो आपके पूरे गेम की सुरक्षा और स्थिरता को कम कर देगा .. जो कि इसके लायक नहीं है, जब तक कि आप वास्तव में प्रदर्शन बाधा के रूप में डीबी को लेखन की पहचान नहीं करते।फिर फिर आप वास्तव में उपयोगकर्ता प्रगति खोना नहीं चाहते हैं, क्योंकि आपका सत्र नष्ट हो जाता है। तो NoSQL जैसे कुछ बेहतर देखें।

+0

मुझे उम्मीद है कि इस खेल को लगभग 30-50K समवर्ती उपयोगकर्ता चोटी पर खेलेंगे। डीबी अभी भी सलाह दी जाएगी? NoSQL के लिए धन्यवाद, लेकिन मैं इसे चुनने का विकल्प नहीं चुन सकता जो मेरे लिए एक और सीख सकता है। –

+0

समवर्ती उपयोगकर्ताओं की संख्या उस महत्वपूर्ण नहीं होने वाली है। यह उन डीबी लेनदेन की मात्रा पर निर्भर करता है जिन्हें आप प्राप्त करने जा रहे हैं ... इसके अलावा अधिकांश मामलों में डीबी सिस्टम स्केलेबल हैं। इसलिए जब आपका कोड एक डीबी से तेज़ हो सकता है, तो यह स्केल के साथ-साथ डीबी (जहां आप डीबी-क्लस्टर इत्यादि पर स्विच कर सकते हैं) स्केल नहीं करेंगे। – bummzack

+0

@ dev2dev आप PostgreSQL (फ्री), ओरेकल या एमएसएसक्यूएल पर विचार कर सकते हैं। गंभीर प्रदर्शन पैच (उदा। क्वेरी ऑप्टिमाइज़र) इस समय केवल MySQL प्रयोगात्मक बनाता है; जब आप वास्तव में उच्च पैमाने पर होते हैं तो एक सभ्य अनुकूलक और विभाजित विचार/तालिकाओं जैसी चीजें एक बड़ा अंतर बनाती हैं। –