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