पृष्ठभूमि
मैं एक क्लाइंट के लिए एक ऐप पर काम कर रहा हूं जिसमें कुछ सामाजिक नेटवर्किंग सुविधाएँ शामिल हैं। मैं मूल रूप से मोबाइल के फ्रंट-एंड का विकास कर रहा था, लेकिन परिस्थितियों ने मुझे बैक एंड के रूप में विकसित करने के लिए छोड़ दिया है।
एक सामान्य पृष्ठभूमि के रूप में, हमारी प्रणाली उपयोगकर्ताओं को अन्य उपयोगकर्ताओं का पालन करने और उन लोगों के बारे में सूचनाएं प्राप्त करने की अनुमति देती है, जिनका वे अनुसरण कर रहे हैं, जैसा कि आप एक सामाजिक नेटवर्क से उम्मीद करेंगे। एक चेतावनी यह है कि केवल एक छोटा सा उपसमूह (अधिकतम कुछ सौ पर) उपयोगकर्ता अनुसरण करने योग्य होगा, इस अपेक्षा के साथ कि अधिकांश उपयोगकर्ता आधार इनमें से कम से कम एक व्यक्ति का अनुसरण करेंगे।
UI की तरफ, हमारे पास इस पर एक नंबर के साथ एक अधिसूचना बटन होगा, और बटन पर क्लिक करने से आप अधिसूचना स्क्रीन पर पहुंच जाएंगे।
समस्या
मैं सूचनाओं को लागू करने के लिए रणनीतियों पर शोध कर रहा हूं और अधिकांश संसाधनों को मैंने डेटाबेस में एक या अधिक सूचना तालिका बनाने के लिए बिंदु पाया है। (एक उदाहरण जो मुझे पसंद है वह है यहां स्वीकृत उत्तर: /programming/9735578/building-a-notification-system )।
मुझे फेंकने वाली बात यह है कि सूचनाओं के लिए अधिकांश डेटाबेस-संचालित रणनीतियों को प्रत्येक अनुयायी के लिए प्रत्येक अधिसूचना के लिए एक पंक्ति सम्मिलित करने की आवश्यकता होती है। इसलिए यदि एक हजार लोग सैली का अनुसरण कर रहे हैं, तो हम एक हजार पंक्तियों को संबंधित तालिका में सम्मिलित करते हैं। क्या वह मापनीय है? यदि हम उस बिंदु पर पहुंच जाते हैं जहां दसियों या सैकड़ों हजारों उपयोगकर्ता सैली का अनुसरण कर रहे हैं और वह प्रति दिन कुछ दर्जन पोस्ट कर रहा है?
मेरा मूल विचार प्रश्नों के साथ सब कुछ संभालने के लिए किया गया था: अधिसूचना बटन पर अंतिम बार जब आप अधिसूचना स्क्रीन पर गए थे, तो पिछली बार की तुलना में अधिक हाल ही में पोस्ट की गई सामग्री पर पंक्ति-गणना का अनुरोध करके अधिसूचना बटन पर संख्या प्राप्त की जाएगी। जब आप अधिसूचना स्क्रीन पर गए। इस दृष्टिकोण के लिए नो राइट्स या अतिरिक्त स्टोरेज की आवश्यकता होगी, लेकिन यह अनम्य है और संभवतः सर्वर को बहुत कठिन रूप से हथौड़ा देगा।
सेट अप
बैकएंड (जैसा कि पिछले डेवलपर द्वारा स्थापित किया गया है) CodeIgniter और एक MySQL डेटाबेस का उपयोग करता है। यह वर्तमान में एक भद्दे GoDaddy साझा होस्टिंग खाते पर चल रहा है, लेकिन मुझे लगता है (आशा?) उत्पादन में जाने से पहले इसे उन्नत किया जाएगा और उपयोगकर्ता के विकास के साथ होस्टिंग पैकेज को बढ़ाया जाएगा।
वर्तमान में हमारा एकमात्र फ्रंट-एंड एक मोबाइल ऐप है, लेकिन हमने बाद में एक वेबसाइट बनाने की योजना बनाई है। मुझे इस समय सूचनाओं के बारे में सर्वर से रियल-टाइम पुश अपडेट प्राप्त करने की चिंता नहीं है।
परिशिष्ट
मैं बैकएंड में विशेषज्ञ नहीं हूं और मैं उस विभाग में अपना प्रमुख हूं। ग्राहक इसे जानता है, और मैंने इस प्रकृति की एक परियोजना के दायरे को समझाने की कोशिश करने की पूरी कोशिश की है, लेकिन उन्होंने यह स्पष्ट कर दिया है कि इस बिंदु पर वे परियोजना पर काम करने के लिए किसी और पर भरोसा नहीं करेंगे। हमारे पास शायद एक और महीने का काम है, इससे पहले कि हम परीक्षकों को जोड़ना शुरू कर सकें और मुझे किसी भी तरह का प्रदर्शन मीट्रिक मिल सके। मैं वास्तव में अनुमान नहीं लगा सकता कि अगले 5 वर्षों में हमारे पास कितने उपयोगकर्ता हो सकते हैं या कौन से हार्डवेयर हो सकते हैं, लेकिन मुझे लगता है कि ग्राहक सैकड़ों हजारों उपयोगकर्ताओं या अधिक के लिए उम्मीद कर रहा है।
मुझे उम्मीद है कि यह यहाँ पोस्ट होने वाली समस्या के लिए पर्याप्त है; जरूरत पड़ने पर मैं इसे परिष्कृत कर सकता हूं। कृपया पूछें कि क्या आपके कोई प्रश्न हैं या मैंने महत्वपूर्ण विवरणों को छोड़ दिया है।
tl; डॉ
- क्या डेटाबेस-संचालित अधिसूचना प्रणाली के दीर्घकालिक स्केलेबिलिटी के लिए नकारात्मक प्रभाव हैं, जब सभी उपयोगकर्ता केवल कुछ सौ लोगों में से कुछ का अनुसरण कर रहे हैं?
- क्या प्रत्येक अनुयायी के लिए प्रत्येक अधिसूचना के लिए एक अलग अधिसूचना पंक्ति की आवश्यकता के बिना सूचनाओं को संचालित करने का एक तरीका है?
- क्या पूरी तरह से क्वेरी-संचालित अधिसूचना प्रणाली स्केलेबल होगी, या डीबी को कोई डेटा नहीं लिखने के अलावा कोई लाभ है?
- क्या मैं इसे बहुत जल्दी खत्म कर रहा हूँ? क्या मुझे अभी कुछ काम करना चाहिए और हम इसे अनुकूलित करने की चिंता कर सकते हैं यदि यह समस्या बन जाती है, तो यह देखते हुए कि ग्राहक के पास सीमित बजट है और हमें अभी तक नहीं पता है कि अंतिम उत्पाद लोकप्रिय होगा या नहीं?