जिस कंपनी के लिए मैं काम करता हूं वह ब्लैकबेरी मंच के लिए अनुप्रयोग बनाता है।एक स्केल करने योग्य हिट/एनालिटिक्स सिस्टम डिज़ाइन करने का सबसे अच्छा तरीका?
हम एक मालिकाना "एनालिटिक्स सिस्टम" पर काम कर रहे हैं जो हमें हमारे अनुप्रयोगों के भीतर कोड एम्बेड करने की अनुमति देता है और जब भी वे दौड़ते हैं तो एप्लिकेशन हमारे केंद्रीय सर्वर पर कुछ आंकड़े वापस रिपोर्ट करते हैं। वर्तमान में, सिस्टम ठीक काम करता है; हालांकि यह प्रति घंटा 100-200 हिट के साथ बीटा में है। समस्या के बिना सर्वर पर "हिट" भेजे जाते हैं। हमने हिट की स्वीकृति और संग्रहण (एक MySQL डीबी में) को संभालने के लिए एक बहुत ही ठोस API बनाया है। हमने भार का परीक्षण किया है और हमें बिना किसी समस्या के सैकड़ों हजारों हिट समायोजित करने में सक्षम होना चाहिए। यह वास्तव में एक समस्या नहीं है।
समस्या आंकड़े दिखा रही है। हमने मिंट्स (हैमैंटिंट डॉट कॉम) के समान डिस्प्ले पैनल बनाया है, यह प्रत्येक घंटे, पिछले दिन, महीनों, हफ्तों, वर्षों ... आदि पर हिट दिखाता है। मुट्ठी संस्करण हिट टेबल से डेटा खींचने और फ्लाई पर व्याख्या करने के सीधे प्रश्नों को चलाता है। यह बहुत लंबे समय तक काम नहीं करता था। हमारा वर्तमान समाधान यह है कि हिट प्रसंस्करण के लिए "कतारबद्ध" हैं और हमारे पास प्रत्येक 5 मिनट के दौरान हिट लेने और उन्हें प्रत्येक घंटे, दिन, सप्ताह, महीने, वर्ष ... आदि के लिए "कैश" में सॉर्ट करने के माध्यम से एक क्रॉन आ जाता है। यह अद्भुत काम करता है और यह अविश्वसनीय रूप से मापनीय है; हालांकि, यह केवल 1 टाइमज़ोन के लिए काम करता है। चूंकि पूरी कंपनी के पास इसका उपयोग है, इसलिए हम विभिन्न समय क्षेत्रों में कुछ सौ उपयोगकर्ताओं से निपट रहे हैं। सैन जोस में "आज" के रूप में परिभाषित किया गया है जो लंदन में मेरे सहयोगी आज के रूप में परिभाषित करता है उससे काफी अलग है। चूंकि वर्तमान समाधान केवल 1 टाइमज़ोन पर कैश किया गया है, यह किसी भी व्यक्ति के लिए एक दुःस्वप्न है जो हमारे टाइमज़ोन के बाहर डेटा की जांच कर रहा है।
यह तय करने की हमारी वर्तमान योजना हर टाइमज़ोन (कुल में 40) के लिए कैश बनाने के लिए है; हालांकि, इसका मतलब यह होगा कि हम 40 से डेटा की मात्रा गुणा कर रहे हैं ... यह मेरे लिए भयानक है और यह देखते हुए कि कैश बहुत बड़े हो सकते हैं, इसे गुणा करना सिर्फ एक बुरा विचार की तरह लगता है; इसके अलावा, जब हम कतार को संसाधित करने के लिए जाते हैं, तो उन्हें 40 अलग-अलग कैशों में रखने के लिए बहुत अधिक CPU समय लग जाएगा।
किसी और को इस समस्या को हल करने का बेहतर विचार है?
(इतने लंबे question..it के लिए खेद है समझाने के लिए वास्तव में आसान नहीं है। धन्यवाद सब!)
आपके प्रश्न के रूप में विशिष्ट है, मैं वास्तव में कुछ बहुत समान डिजाइन कर रहा हूं और इनपुट के लिए यहां आने वाला था। +1 –
अपने हिट-हैंडलिंग/स्टोरेज एपीआई को देखना बहुत दिलचस्प होगा :) – Jacco