स्थिति:इवेंट फ़ीड कार्यान्वयन - क्या यह स्केल करेगा?
मैं वर्तमान में एक सामाजिक वेबसाइट जिससे प्रत्येक उपयोगकर्ता को अपने मित्रों की गतिविधियों की एक फ़ीड के लिए एक फ़ीड प्रणाली को डिजाइन करने कर रहा हूँ। मेरे पास फ़ीड बनाने के लिए दो संभावित तरीके हैं और मैं पूछना चाहता हूं कि स्केल करने की क्षमता के मामले में कौन सा सर्वोत्तम है।
सभी उपयोगकर्ताओं की घटनाओं को एक केंद्रीय डेटाबेस तालिका, event_log
में एकत्रित किया जाता है। उपयोगकर्ताओं को friends
तालिका में दोस्तों के रूप में जोड़ा जाता है। आरडीबीएमएस हम उपयोग कर रहे हैं MySQL है।
स्टैंडर्ड विधि: जब कोई उपयोगकर्ता अपने फ़ीड पृष्ठ का अनुरोध करता है, सिस्टम भीतरी friends
साथ event_log
में शामिल होने से फ़ीड उत्पन्न करता है। नतीजा तब कैश किया जाता है और 5 मिनट के बाद टाइमआउट पर सेट किया जाता है। इस टाइमआउट को बदलकर स्केलिंग हासिल की जाती है।
की परिकल्पना यह विधि: एक टास्क पृष्ठभूमि में और event_log
में प्रत्येक नए, असंसाधित आइटम के लिए चलता है, यह डेटाबेस तालिका user_feed
में प्रविष्टियों उपयोगकर्ताओं को, जो दोस्तों के उपयोगकर्ता के लिए जो पहल की साथ कर रहे हैं के सभी के साथ है कि घटना अपने आप युग्मन बनाता है घटना। एक टेबल पंक्ति एक उपयोगकर्ता के साथ एक घटना जोड़ता है।
मानक विधि के साथ समस्याएं अच्छी तरह से जानी जाती हैं - क्या होगा यदि बहुत से लोगों के कैश एक ही समय में समाप्त हो जाए? समाधान भी अच्छी तरह से स्केल नहीं करता है - जितना संभव हो सके वास्तविक समय के करीब फ़ीड को अपडेट करना
मेरी आंखों में अनुमानित समाधान बहुत बेहतर लगता है; सभी प्रसंस्करण ऑफ़लाइन किया जाता है, इसलिए कोई भी उपयोगकर्ता उत्पन्न करने के लिए किसी पृष्ठ की प्रतीक्षा नहीं करता है और इसमें कोई भी शामिल नहीं होता है, इसलिए भौतिक मशीनों में डेटाबेस टेबल को शेड किया जा सकता है। हालांकि, यदि किसी उपयोगकर्ता के पास 100,000 मित्र हैं और एक सत्र में 20 ईवेंट बनाते हैं, तो परिणामस्वरूप डेटाबेस में 2,000,000 पंक्तियां डालने लगती हैं।
प्रश्न:
- इस बुरी से बुरी हालत समस्याग्रस्त ऊपर उल्लेख किया है, यानी तालिका आकार करता MySQL प्रदर्शन पर प्रभाव पड़ता है और वहाँ किसी भी कर रहे हैं:
प्रश्न दो अंक करने पर निर्भर करता प्रत्येक घटना के लिए डेटा के इस द्रव्यमान सम्मिलन के साथ मुद्दों?
- क्या कोई और चीज है जिसे मैंने याद किया है?
यह मिश्रण करेगा !!! –