2009-04-17 9 views
23

सोशल नेटवर्किंग वेबसाइट शायद उपयोगकर्ताओं, दोस्तों और घटनाओं के लिए तालिकाओं को बनाए रखती है ...सोशल नेटवर्किंग वेबसाइट्स मित्र अपडेट की गणना कैसे करती हैं?

मित्रों की घटनाओं को कुशल और स्केलेबल तरीके से गणना करने के लिए वे इन तालिकाओं का उपयोग कैसे करते हैं?

उत्तर

37

ट्विटर जैसी सोशल नेटवर्किंग साइट से कई नहीं है एक संदेश कतार आवेदन के अलावा एक आरडीबीएमएस का उपयोग करें। उनमें से बहुत से पहले से ही वर्तमान आवेदन जैसे RabbitMQ से शुरू होते हैं। उनमें से कुछ काफी बड़े हो जाते हैं, उन्हें भारी रूप से अनुकूलित करना या स्वयं बनाना है। ट्विटर दूसरी बार ऐसा करने की प्रक्रिया में है।

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

संदेश कतार आवेदन गारंटी देता है कि संदेश प्राप्त करने वाले प्रत्येक व्यक्ति को अनुरोध किया जा सकता है जब वे अनुरोध कर सकते हैं। प्रकाशक संदेश को आत्मविश्वास भेज सकता है कि ग्राहक उन्हें अंततः प्राप्त कर सकता है। इसका पूरी तरह से असीमित होने का लाभ है और महंगा लागत की आवश्यकता नहीं है।

संपादित करें: मुझे यह भी उल्लेख करना चाहिए कि आम तौर पर इन प्रकार की चीजों के लिए भंडारण उच्च पैमाने पर असामान्य रूप से होता है। तो जो और जिल एक ही संदेश की एक प्रति संग्रहित कर सकते हैं। इसे ठीक माना जाता है क्योंकि यह आवेदन पैमाने को अरबों उपयोगकर्ताओं को मदद करता है।

अन्य पठन:

  1. http://www.rabbitmq.com/
  2. http://qpid.apache.org/
+1

+1 असमान्यीकरण उल्लेख के लिए लिखा था, यह नहीं है पुराने एसक्यूएल wor के लिए स्पष्ट है एलडी जहां 3 एनएफ लंबे समय तक मार्गदर्शक सितारा रहा है। (Http://en.wikipedia.org/wiki/Third_normal_form) – Crypth

0

उपयोगकर्ताओं पर शामिल होने वाले छोटे पैमाने पर। मित्र और उपयोगकर्ता .events और क्वेरी कैशिंग शायद ठीक है लेकिन दोस्तों और घटनाओं के बढ़ने के साथ बहुत तेज़ी से धीमा हो जाता है। आप एक ईवेंट आधारित मॉडल को भी आजमा सकते हैं जिसमें प्रत्येक बार कोई उपयोगकर्ता एक ईवेंट बनाता है, एक प्रविष्टि तालिका में बनाया जाता है (शायद "friends_events" कहा जाता है)। इस प्रकार जब भी कोई उपयोगकर्ता यह देखना चाहता है कि उनके दोस्तों ने कौन सी घटनाएं बनाई हैं, तो वे बस अपनी आईडी और दोस्तों_वेंट टेबल के बीच जुड़ सकते हैं और पता लगा सकते हैं। इस तरह आप दोस्तों के साथ सभी उपयोगकर्ताओं को पकड़ने से बचते हैं और फिर ईवेंट टेबल के साथ अपने दोस्तों से जुड़ते हैं।

7

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

ग्राफ का प्रतिनिधित्व करने के दो लोकप्रिय तरीके adjacency lists और adjacency matrices हैं।

एक आसन्न सूची केवल ग्राफ पर किनारों की एक सूची है। एक पूर्ण उपयोगकर्ता उपयोगकर्ता के साथ एक उपयोगकर्ता पर विचार करें।

User1, User2 
    1  2 
    1  3 
    2  3 

इन अभिलेखों की अनिर्दिष्ट व्याख्या यह है कि उपयोगकर्ता 1 दोस्तों के उन 2 और 3 और उपयोगकर्ता 2 के साथ है भी मित्र उपयोगकर्ता 3.

एक डेटाबेस तालिका में इस का प्रतिनिधित्व करते हुए मामूली बात है के साथ है। टेबल में शामिल होने वाले कई रिश्तों में से कई लोग हैं जिन्हें हम परिचित हैं। एक विशेष उपयोगकर्ता के दोस्तों को खोजने के लिए एसक्यूएल प्रश्न लिखना काफी आसान है।

अब जब आप किसी विशेष उपयोगकर्ता के मित्र को जानते हैं, तो आपको केवल उन परिणामों को अद्यतन तालिका में शामिल करने की आवश्यकता है। इस तालिका में उपयोगकर्ता आईडी द्वारा अनुक्रमित सभी उपयोगकर्ता के अपडेट शामिल हैं।

जब तक इन सभी तालिकाओं समुचित रूप से सूचीबद्ध कर रहे हैं, तो आप एक बहुत आसान समय कुशल प्रश्नों प्रश्नों में आपकी रुचि है जवाब देने के लिए डिजाइनिंग होगा।