इसका उत्तर यह है कि वे किसी मित्र तालिका पर चयन नहीं कर रहे हैं, वे सबसे अधिक संभावना एक डी-सामान्यीकृत समाचार-घटना तालिका का उपयोग कर रहे हैं। हमने DoInk.com पर Facebook के समान एक समाचार-फ़ीड लागू किया, हमने यह कैसे किया:
"न्यूज़एवेंट" की धारणा है, इसमें एक प्रकार, एक आरंभकर्ता (एक उपयोगकर्ता आईडी) और एक लक्षित उपयोगकर्ता (एक उपयोगकर्ता आईडी भी) है। (इवेंट से संबंधित अन्य संपत्तियों के लिए आपके पास अतिरिक्त कॉलम भी हो सकते हैं, या उनमें शामिल हो सकते हैं)
जब कोई उपयोगकर्ता किसी अन्य उपयोगकर्ता वॉल पर कुछ पोस्ट करता है तो हम इस तरह की एक घटना उत्पन्न करते हैं:
INSERT INTO events VALUES (wall_post_event, user1, user1)
उपयोगकर्ता 1 की प्रोफ़ाइल देखते समय, आप उन सभी ईवेंट के लिए चयन करेंगे जहां उपयोगकर्ता 1 या तो आरंभकर्ता या लक्ष्य है। इस तरह आप प्रोफ़ाइल फ़ीड प्रदर्शित करते हैं। (आप अपने गोपनीयता मॉडल के आधार पर फैंसी प्राप्त कर सकते हैं और घटनाओं को फ़िल्टर कर सकते हैं। आप प्रदर्शन कारणों से स्मृति में ऐसा करने पर विचार कर सकते हैं)
उदाहरण:
SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed
SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed
जब आप अपने मित्रों से संबंधित सभी ईवेंट के लिए न्यूज़फ़ीड देखना चाहते हैं, तो आप उन सभी ईवेंट्स के लिए चयन कर एक क्वेरी कर सकते हैं जहाँ आरंभकर्ता आपके मित्रों के समूह में है।
उप-चयनों के साथ कार्यान्वयन से बचें, जटिलता के आधार पर, वे स्केल नहीं करेंगे।