आवेदन मैं पर काम कर रहा हूँ एक गतिविधि फ़ीड (ज्यादा फेसबुक की तरह) जहां प्रत्येक उपयोगकर्ता अपने मित्रों की गतिविधि देख सकते हैं में गतिविधि फ़ीड आइटम देते। मैं फ्लाई पर दिए गए उपयोगकर्ताओं की गतिविधि स्ट्रीम दिखाने के लिए एक मामूली स्केलेबल तरीका ढूंढ रहा हूं। मैं 'मामूली' कहता हूं क्योंकि मैं इसे केवल एक डेटाबेस (पोस्टग्रेस्क्ल) और के साथ ऐसा करने के लिए देख रहा हूं शायद memcached। उदाहरण के लिए, मैं चाहता हूं कि यह समाधान 100 मित्रों के साथ 200k उपयोगकर्ताओं को स्केल करे।एक मामूली स्केलेबल रास्ता
वर्तमान में, एक मास्टर गतिविधि तालिका दी गतिविधि के लिए प्रदान की गई एचटीएमएल (जिम एक दोस्त जोड़ा, जॉर्ज एक आवेदन, आदि स्थापित) संग्रहीत करता है। यह मास्टर गतिविधि तालिका स्रोत उपयोगकर्ता, एचटीएमएल, और एक टाइमस्टैम्प रखती है।
फिर, एक अलग ('जॉइन') तालिका है जो केवल उस व्यक्ति को पॉइंटर रखती है जो इस गतिविधि को अपने मित्र फ़ीड में देखना चाहिए, और मुख्य गतिविधि तालिका में ऑब्जेक्ट के लिए पॉइंटर होना चाहिए।
तो, अगर मैं 100 दोस्त हैं, और मैं 3 गतिविधियों करते हैं, तो शामिल होने तालिका तो 300 आइटम के लिए बड़ा हो जाएगा।
स्पष्ट रूप से यह तालिका बहुत तेज़ी से बढ़ेगी। यह अच्छी संपत्ति है, हालांकि, उपयोगकर्ता को दिखाने के लिए गतिविधि लाने से एक (अपेक्षाकृत) सस्ती क्वेरी होती है।
अन्य विकल्प सिर्फ मुख्य गतिविधि तालिका रखने के लिए और की तरह कुछ कह रही द्वारा यह क्वेरी करने के लिए है:
select * from activity where source_user in (1, 2, 44, 2423, ... my friend list)
इस नुकसान यह है कि आप उपयोगकर्ताओं को, जो कभी भी सक्रिय हो सकता है के लिए क्वेरी कर रहे है, और के रूप में अपने मित्र सूची बढ़ती है, यह क्वेरी धीमी और धीमी हो सकती है।
मैं पेशेवरों और दोनों पक्षों की विपक्ष देखते हैं, लेकिन अगर कुछ अतः लोगों को मदद कर सकता है मुझे विकल्पों का वजन और एक तरह से सुझाव है या वे दूसरे मैं सोच रहा हूँ। मैं भी अन्य समाधान के लिए खुला, आदि कर रहा हूँ, हालांकि मैं इसे सरल रखने और CouchDB की तरह कुछ स्थापित नहीं करना चाहते हैं,
बहुत धन्यवाद!