मैं अपने पृष्ठ (सामाजिक गेमिंग प्रकार) के लिए एक फेसबुक स्टाइल अधिसूचना प्रणाली बनाने की शुरुआत में हूं और अब मैं शोध कर रहा हूं कि इस तरह के सिस्टम को डिजाइन करने का सबसे अच्छा तरीका क्या होगा। मुझे इस बात की कोई दिलचस्पी नहीं है कि उपयोगकर्ता को नोटिफिकेशन कैसे दबाएं या ऐसा कुछ भी (अभी भी)। मैं शोध कर रहा हूं कि सर्वर पर सिस्टम कैसे बनाएं (नोटिफिकेशन कैसे स्टोर करें, उन्हें कहां स्टोर करें, उन्हें कैसे लाया जाए आदि ...)।एक अधिसूचना प्रणाली का निर्माण
तो ... कि हमारे पास कुछ आवश्यकताओं:
- चरम पर कई बार हमारे पास के बारे में 1k समवर्ती लॉग-इन उपयोगकर्ताओं (और कई और अधिक मेहमानों, लेकिन उन्होंने इस मामले यहाँ वे नहीं होगा के रूप में नहीं है अधिसूचनाएं) जो कई घटनाएं उत्पन्न करेगी
- विभिन्न प्रकार की अधिसूचनाएं होंगी (उपयोगकर्ता ए ने आपको एक दोस्त के रूप में जोड़ा है, उपयोगकर्ता बी ने आपकी प्रोफ़ाइल पर टिप्पणी की है, उपयोगकर्ता सी ने आपकी छवि पसंद की है, उपयोगकर्ता डी ने आपको गेम एक्स पर पीटा है , ...)
- अधिकतर ईवेंट 1 उपयोगकर्ता के लिए 1 अधिसूचना उत्पन्न करेंगे (उपयोगकर्ता एक्स ने आपकी छवि पसंद की है), लेकिन ऐसे मामले होंगे जहां कोई भी टी कई अधिसूचनाएं उत्पन्न करेगा (उदाहरण के लिए यह उपयोगकर्ता वाई का जन्मदिन है)
- सूचनाओं को एक साथ समूहीकृत किया जाना चाहिए; अगर उदाहरण के चार अलग-अलग उपयोगकर्ताओं को कुछ छवि की तरह के लिए, उस छवि के मालिक करते हुए कहा कि चार उपयोगकर्ताओं छवि और नहीं चार अलग-अलग सूचनाएं (जैसे अमेरिकन प्लान करता है)
ठीक तो मैं क्या सोच रहा था पसंद किया है एक अधिसूचना मिलना चाहिए यह है कि मुझे कुछ प्रकार की कतार बनाना चाहिए जहां मैं घटनाओं को संग्रहीत करता हूं। तो मेरे पास पृष्ठभूमि की नौकरी होगी (gearman?) जो उस कतार को देखेंगे और उन घटनाओं के आधार पर अधिसूचनाएं उत्पन्न करेगी। यह नौकरी प्रत्येक उपयोगकर्ता के लिए डेटाबेस में सूचनाएं संग्रहीत करेगी (इसलिए यदि कोई ईवेंट 10 उपयोगकर्ताओं को प्रभावित करता है, तो 10 अलग-अलग अधिसूचनाएं होंगी)। फिर जब उपयोगकर्ता अधिसूचनाओं की सूची के साथ एक पृष्ठ खोलता है तो मैं उनके लिए उन सभी अधिसूचनाओं को पढ़ता हूं (हम इसे 100 नवीनतम अधिसूचनाओं तक सीमित करने के बारे में सोचते हैं) और उन्हें एक साथ समूहित करते हैं और फिर अंततः उन्हें प्रदर्शित करते हैं।
हालात मैं इस दृष्टिकोण के साथ को लेकर चिंतित हूं:
- नरक :) के रूप में जटिल डेटाबेस सबसे अच्छा भंडारण यहाँ (हम MySQL का उपयोग कर रहे हैं) या मैं कुछ और का उपयोग करना चाहिए (redis की तरह लगता है
- है एक अच्छा फिट भी)
- मुझे अधिसूचना के रूप में क्या स्टोर करना चाहिए? यूजर आईडी, यूजर आईडी जिसने इवेंट शुरू किया, इवेंट का प्रकार (ताकि मैं उन्हें समूहित कर सकूं और उपयुक्त टेक्स्ट प्रदर्शित कर सकूं) लेकिन फिर मुझे नहीं पता कि अधिसूचना के वास्तविक डेटा को कैसे स्टोर किया जाए (उदाहरण के लिए यूआरएल & शीर्षक छवि पसंद आया था)। अगर मैं अधिसूचना उत्पन्न करता हूं तो मुझे उस जानकारी को "सेंकना" चाहिए, या मुझे रिकॉर्ड (छवि, प्रोफ़ाइल, ...) की आईडी को प्रभावित करना चाहिए और अधिसूचना प्रदर्शित करते समय डीबी से जानकारी खींचना चाहिए।
- प्रदर्शन यहाँ ठीक होना चाहिए, मैं ऑन-द-फ्लाई 100 सूचनाएं कार्रवाई करने के लिए है, भले ही जब हर अनुरोध पर सूचनाएं पेज
- संभव प्रदर्शन समस्या प्रदर्शित क्योंकि मैं उपयोगकर्ता के लिए अपठित सूचनाओं की संख्या प्रदर्शित करने के लिए होता है (जो स्वयं में एक समस्या हो सकती है क्योंकि मैं एक साथ अधिसूचनाओं को समूहबद्ध करता हूं)। यह बचा जा सकता है, हालांकि अगर मैं पृष्ठभूमि में सूचनाएं (जहां वे वर्गीकृत किया है) के मद्देनजर उत्पन्न होती है और न ऑन-द-मक्खी
तो क्या तुम मेरे प्रस्तावित समाधान और मेरी चिंताओं के बारे में सोचते हैं? कृपया टिप्पणी करें यदि आपको लगता है कि मुझे कुछ और उल्लेख करना चाहिए जो यहां प्रासंगिक होगा।
ओह, हम अपने पृष्ठ के लिए PHP का उपयोग कर रहे हैं, लेकिन यह मुझे लगता है कि यह एक बड़ा कारक नहीं होना चाहिए।
इस अधिसूचना प्रणाली को एक व्यक्ति के प्रयासों के रूप में बनाने में आपको कितना समय लगेगा। मैं सिर्फ तदनुसार समय सारिणी बनाने का अनुमान रखना चाहता हूं। – Shaharyar
@ शाहरारी मुझे लगता है कि यह अधिसूचना प्रणाली की जटिलता पर निर्भर करता है। – tyan
मैंने प्राथमिकता आधारित अधिसूचना प्रणाली बनाने के लिए MySQL के साथ एक ही सिस्टम का उपयोग किया। अच्छी बात यह है कि यह कुछ हज़ार उपयोगकर्ताओं के लिए स्केल करता है, अगर यह उससे अधिक हो जाता है, तो यह विशेष रूप से एंड्रॉइड और जीसीएम के साथ उड़ाता है। मैं रेडिस, खरगोश एमक्यू, काफ्का जैसे माईएसक्यूएल के विकल्पों को जानना चाहता हूं जो स्वाभाविक रूप से एक संदेश कतार, कार्यक्षमता की तरह प्रदर्शित करते हैं। –