2009-10-13 18 views
9

लिंक्डइन में यह शानदार सुविधा है जिसमें कुछ उपयोगकर्ता की प्रोफ़ाइल पर जाकर, लिंक्डइन संकेत देता है कि आप उस उपयोगकर्ता से नेटवर्क के माध्यम से कैसे जुड़ रहे हैं।LinkedIn को लागू करने के लिए कुशल तरीका "आप कैसे जुड़े हुए हैं" सुविधा?

मान लीजिए कि विज़िटर और प्रोफाइल स्वामी ग्राफ के दो नोड्स हैं जहां नोड्स उपयोगकर्ताओं का प्रतिनिधित्व करते हैं और किनारे दोस्ती का प्रतिनिधित्व करते हैं, एक साधारण समाधान दोनों स्तरों से नोड्स से कुछ स्तर तक शुरू हो सकता है और देख सकता है कि कोई है या नहीं चौराहों। चौराहे नेटवर्क लिंक-नोड्स होंगे।

हालांकि यह साफ लगता है, समस्या यह है कि प्रत्येक व्यक्ति के दोस्तों को निर्धारित करने के लिए, एक अलग डीबी क्वेरी की आवश्यकता होती है। जब नेटवर्क 2 स्तरों से गहरा हो जाता है, तो यह अत्यधिक समय लेने वाला एल्गोरिदम होगा। क्या कोई बेहतर कुशल विकल्प है? यदि नहीं, तो गणना के लिए आवश्यक समय कम करने के लिए हम बेहतर हार्डवेयर समर्थन (समांतर कंप्यूटिंग, ग्रिड, वितरित डेटाबेस इत्यादि) कैसे जोड़ सकते हैं?

+0

मुझे आपकी पोस्ट से छवि को हटाना पड़ा क्योंकि ImageShack ने इसे हटा दिया है और इसे विज्ञापन के साथ बदल दिया है। अधिक जानकारी के लिए http://meta.stackexchange.com/q/263771/215468 देखें। यदि संभव हो, तो आपके लिए उन्हें फिर से अपलोड करना बहुत अच्छा होगा। धन्यवाद! – Undo

उत्तर

5

आप देख सकते हैं कि यह लॉरेनेंज अल्बर्टन द्वारा Graphs in the database: SQL meets social networks आलेख में कैसे किया जा सकता है। उदाहरण कोड को सीटीई का उपयोग करके PostgreSQL के लिए लिखा गया है। हालांकि, मुझे संदेह है कि इसके लिए RDBMS का उपयोग करके अच्छा प्रदर्शन होगा। मैंने इस आलेख में Neo4j: Social networks in the database: using a graph database में, देशी ग्राफ डेटाबेस का उपयोग करते हुए उल्लिखित आलेख में समान सामग्री को कैसे किया जाए, इस बारे में एक लेख लिखा था। प्रदर्शन में मतभेदों के अलावा, एक ग्राफ डेटाबेस भी ग्राफ़ एपीआई प्रदान करके कार्य को सरल बनाता है जो ट्रैवर्सल को संभालना आसान बनाता है जो एसक्यूएल (या संग्रहीत प्रक्रियाओं का उपयोग करके) में लिखना बेहद जटिल होगा। मैंने ग्राफ डेटाबेस पर this thread में थोड़ा और लिखा और this one भी देखें।

1

किसी प्रकार की रिकर्सिव संग्रहीत प्रक्रिया (SQL सर्वर 2005+ में सीटीई) के बिना, आपको कई दौर यात्राओं की आवश्यकता होगी क्योंकि स्तर गहरे हो जाते हैं। हालांकि, एक अच्छा कैश बुनियादी ढांचा वास्तव में प्रदर्शन में मदद कर सकता है क्योंकि सबसे लोकप्रिय/सक्रिय उपयोगकर्ताओं की कनेक्शन सूचियां कैश रहेंगी। कैश तंत्र के माध्यम से एक पढ़/लिखना चीजों को और भी बेहतर बना देगा (कैश अपडेट डीबी अपडेट्स के लिए कैस्केड, कैश डीबी रीड्स को कैस्केड पढ़ता है)

+0

यह एक अच्छी टिप्पणी है क्योंकि बहुत से लोग हमेशा नकली काम करने के लिए SQL सर्वर सीटीई, प्रोसेस, या अन्य टी-एसक्यूएल पर भरोसा नहीं करना चाहते हैं। इसे SQL सर्वर में संग्रहीत करें और फिर जैसा कि आपने उदाहरण के लिए कैश को एक बार उदाहरण दिया है, उदाहरण के लिए अपने सी # ऐप और सामग्री को देखने के लिए इसे स्मृति में उपयोग करें, अगर यह केवल डेटा के एक छोटे से सेट के लिए है। – PositiveGuy