फेसबुक डेटाबेस डिजाइन?


133

मैंने हमेशा सोचा है कि फेसबुक ने मित्र <-> उपयोगकर्ता संबंध कैसे डिज़ाइन किया।

मुझे लगता है कि उपयोगकर्ता तालिका कुछ इस प्रकार है:

user_email PK
user_id PK
password 

मैं उपयोगकर्ता के डेटा (लिंग, आयु आदि) के साथ तालिका का आंकड़ा लगाता हूं जो उपयोगकर्ता ईमेल के माध्यम से जुड़ा होता है।

यह सभी उपयोगकर्ताओं को इस उपयोगकर्ता से कैसे जोड़ता है?

कुछ इस तरह?

user_id
friend_id_1
friend_id_2
friend_id_3
friend_id_N 

शायद ऩही। क्योंकि उपयोगकर्ताओं की संख्या अज्ञात है और इसका विस्तार होगा।


13
एक फेसबुक इंजीनियरिंग पेज है जिसमें इस प्रकार की बहुत सारी जानकारी है, लेकिन काफी नहीं जो आप पूछ रहे हैं। आप वहां पूछना चाहते हैं और देख सकते हैं कि क्या आपको जवाब मिल सकता है। facebook.com/FacebookEngineering
जॉन मेघेर

1
गूगल graph database। यह सुनिश्चित करने के लिए RDBMS नहीं है

जवाबों:


90

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

कुछ हद तक उपयोगी उदाहरण:

Table Name: User
Columns:
    UserID PK
    EmailAddress
    Password
    Gender
    DOB
    Location

TableName: Friends
Columns:
    UserID PK FK
    FriendID PK FK
    (This table features a composite primary key made up of the two foreign 
     keys, both pointing back to the user table. One ID will point to the
     logged in user, the other ID will point to the individual friend
     of that user)

उदाहरण उपयोग:

Table User
--------------
UserID EmailAddress Password Gender DOB      Location
------------------------------------------------------
1      bob@bob.com  bobbie   M      1/1/2009 New York City
2      jon@jon.com  jonathan M      2/2/2008 Los Angeles
3      joe@joe.com  joseph   M      1/2/2007 Pittsburgh

Table Friends
---------------
UserID FriendID
----------------
1      2
1      3
2      3

इससे पता चलता है कि बॉब जॉन और जो के साथ दोस्त हैं और जॉन, जो के साथ भी दोस्त हैं। इस उदाहरण में हम मानेंगे कि मित्रता हमेशा दो तरह से होती है, इसलिए आपको तालिका में एक पंक्ति की आवश्यकता नहीं होगी, जैसे (2,1) या (3,2) क्योंकि वे पहले से ही दूसरी दिशा में प्रदर्शित होती हैं। उदाहरण के लिए जहां मित्रता या अन्य संबंध स्पष्ट रूप से दो तरह से नहीं हैं, आपको दो-तरफा संबंध को इंगित करने के लिए उन पंक्तियों की भी आवश्यकता होगी।


8
हालांकि यह कितना अक्षम है, इसके बारे में सोचें - आपको औसतन कई-से-कई, दोगुने खोज समय के स्तंभों पर एक विवादास्पद प्रश्न करना होगा।
एंथोनी बिशोप्रिक

2
व्यक्तिगत रूप से, मैं नहीं चाहता कि उन दो क्षेत्रों को एक समग्र प्राथमिक कुंजी बनाया जाए। एक अद्वितीय कुंजी, बिल्कुल। उस अद्वितीय कुंजी पर क्लस्टर सूचकांक, निश्चित रूप से। लेकिन मैं पीके के रूप में एक गैर-मिश्रित पहचान के साथ एक गैर-अनुक्रमित सूचकांक के साथ कुछ भी डालूंगा। यह अन्य तालिकाओं को "मित्र संबंध आईडी" FK की आवश्यकता होती है जो आसानी से इस तालिका से जुड़ जाए और विभिन्न ट्रिगर मैत्री, अवहेलना आदि की घटनाओं पर अंकुश लगा सकें
जेसी सी।

1
इसमें कहा गया कि फेसबुक के करीब 1'000'000'000 उपयोगकर्ता हैं। यदि औसत उपयोगकर्ता के 100 मित्र हैं, तो इसका मतलब है कि तालिका में 100'000'000'000 पंक्तियाँ होंगी। MySQL विभाजन?
वीरानीज

इस दृष्टिकोण को भूल जाओ। यदि आपको उपयोगकर्ताओं की एक गंभीर राशि मिलती है, तो यह निश्चित रूप से बहुत धीमी हो जाएगी । मेरा उत्तर देखें और इसे स्वयं बेंचमार्क करने का प्रयास करें। मैंने 10k उपयोगकर्ताओं और 2.5 मिलियन मैत्री कनेक्शन के साथ कुछ बेंचमार्किंग की है और परिणाम निराशाजनक था। यदि आप एक छोटा समुदाय चलाते हैं तो यह ठीक काम करेगा लेकिन विचार करने के लिए प्रदर्शन मुद्दे हैं।
बुर्जुम

7
आप यह सुनिश्चित कर सकते हैं कि फेसबुक इसके लिए आरडीबीएमएस का उपयोग नहीं करता है, यह सामान्य ज्ञान है कि वे, ट्विटर और बाकी सभी को इस तरह के प्रश्नों को चलाने की आवश्यकता है जैसे कि यह कुछ स्वाद के ग्राफ डेटाबेस का उपयोग करता है। कम से कम 69 लोग ऐसे हैं जिन्होंने कभी किसी तरह के पैमाने पर काम नहीं किया है या नहीं जानते हैं कि बड़े पैमाने पर गणित कैसे करना है।

51

निम्नलिखित डेटाबेस स्कीमा पर एक नज़र डालें, अनातोली लुबर्स्की द्वारा उल्टा इंजीनियर :

फेसबुक स्कीमा


7
यह एक वर्ग आरेख है, डेटाबेस स्कीमा नहीं
लेमन जूस

2
तो क्या प्रत्येक "उपयोगकर्ता" के पास अपना समर्पित डेटाबेस होगा? ऊपर वाले की तरह? यह कैसे काम करेगा? उदाहरण के लिए, जब उपयोगकर्ता FB पर लॉग इन करता है, तो यह देखने के लिए कि क्या यह एक वैध उपयोगकर्ता + पास है और फिर यदि यह वैध है तो facebook उन्हें वहां डेटाबेस में भेज देगा, जो तब उपरोक्त डेटाबेस से सब कुछ प्रदर्शित करता है
James111

यह स्टोर केवल उपयोगकर्ता से संबंधित जानकारी, मैं विशेष रूप से पोस्ट और उसके दर्शकों के लिए खोज रहा हूं?
वसीम अहमद नईम

47

टी एल; डॉ:

वे अपने ढेर के MySQL नीचे ऊपर सब कुछ के लिए कैश्ड रेखांकन के साथ एक स्टैक आर्किटेक्चर का उपयोग करते हैं।

लंबा जवाब:

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

मैं वास्तव में आपको आगे पढ़ने से पहले पहले लिंक की प्रस्तुति देखने की सलाह देता हूं । यह शायद सबसे अच्छा स्पष्टीकरण है कि एफबी आपको पर्दे के पीछे कैसे काम करता है।

वीडियो और लेख आपको कुछ बातें बताता है:

  • वे MySQL का उपयोग अपने स्टैक के बहुत नीचे कर रहे हैं
  • SQL DB के ऊपर TAO लेयर है जिसमें कैशिंग के कम से कम दो स्तर होते हैं और कनेक्शन का वर्णन करने के लिए ग्राफ़ का उपयोग कर रहा है।
  • मुझे इस बात पर कुछ भी नहीं मिला कि वे वास्तव में अपने कैश्ड ग्राफ़ के लिए किस सॉफ्टवेयर / DB का उपयोग करते हैं

आइए इस पर एक नज़र डालते हैं, मित्र कनेक्शन शीर्ष बाएं हैं:

यहाँ छवि विवरण दर्ज करें

खैर, यह एक ग्राफ है। :) यह आपको यह नहीं बताता है कि इसे SQL में कैसे बनाया जाता है, इसे करने के कई तरीके हैं लेकिन इस साइट में अलग-अलग तरीकों की अच्छी मात्रा है। ध्यान दें: विचार करें कि एक संबंधपरक DB यह क्या है: यह सामान्यीकृत डेटा को संग्रहीत करने के लिए सोचा गया है, न कि एक ग्राफ संरचना। तो यह एक विशेष ग्राफ डेटाबेस के रूप में अच्छा प्रदर्शन नहीं करेगा।

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

मैं आपको यह नहीं बता सकता कि इसे कैसे बनाया जाए ताकि यह अच्छा प्रदर्शन करे लेकिन इसके लिए स्पष्ट रूप से कुछ परीक्षण और त्रुटि और बेंचमार्किंग की आवश्यकता होती है।

यहाँ मेरी है निराशाजनक के लिए परीक्षण सिर्फ अच्छे दोस्त के निष्कर्षों मित्र:

DB स्कीमा:

CREATE TABLE IF NOT EXISTS `friends` (
`id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `friend_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

दोस्तों के मित्र प्रश्न:

(
        select friend_id
        from friends
        where user_id = 1
    ) union (
        select distinct ff.friend_id
        from
            friends f
            join friends ff on ff.user_id = f.friend_id
        where f.user_id = 1
    )

मैं वास्तव में आपको कम से कम 10k उपयोगकर्ता रिकॉर्ड और उनमें से प्रत्येक के कम से कम 250 मित्र कनेक्शन के साथ कुछ नमूना डेटा बनाने की सलाह देता हूं और फिर इस क्वेरी को चलाऊंगा। मेरी मशीन (i7 4770k, SSD, 16gb RAM) पर उस क्वेरी के लिए परिणाम ~ 0.18 सेकंड था । शायद इसे अनुकूलित किया जा सकता है, मैं डीबी जीनियस नहीं हूं (सुझावों का स्वागत है)। हालाँकि, यदि यह रैखिक है तो आप पहले से ही केवल 100k उपयोगकर्ताओं के लिए 1.8 सेकंड में, 1 मिलियन उपयोगकर्ताओं के लिए 18 सेकंड।

यह अभी भी ~ 100k उपयोगकर्ताओं के लिए ठीक लग सकता है, लेकिन विचार करें कि आपने केवल दोस्तों के दोस्तों को लाया था और किसी भी अधिक जटिल क्वेरी को नहीं किया था जैसे " मुझे केवल दोस्तों के दोस्तों से ही पोस्ट दिखाई दें + अनुमति दें या नहीं तो अनुमति की जांच करें। उनमें से कुछ को देखने के लिए + यह जांचने के लिए एक उप क्वेरी करें कि क्या मुझे उनमें से कोई पसंद आया है "। आप डीबी को चेक करने देना चाहते हैं कि क्या आपको पहले से कोई पोस्ट पसंद आया है या नहीं या आपको कोड में करना होगा। यह भी विचार करें कि यह केवल आपके द्वारा चलाए जाने वाली क्वेरी नहीं है और आपके पास अधिक या कम लोकप्रिय साइट पर एक ही समय में सक्रिय उपयोगकर्ता से अधिक है।

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

मैंने ओरिएंटबीडी के साथ प्रयोग करना शुरू कर दिया है ताकि ग्राफ़-क्वेरीज़ और मेरे किनारों को अंतर्निहित SQL DB में मैप कर सकूँ। अगर मुझे कभी ऐसा हो जाता है तो मैं इसके बारे में एक लेख लिखूंगा।


तो .. क्या आपको कभी लेख लिखने के लिए चारों ओर मिला?
फ्लोयू। SimpleUITesting.com

1
नहीं, मैं प्रोग्रामिंग करने के अलावा बहुत व्यस्त हूं और ऐसा करने का समय और मूड नहीं है। यहाँ उत्तर में वह सब कुछ शामिल है जो आपको जानना चाहिए कि क्या आप प्रदर्शनकारी मित्र संघों को लागू करना चाहते हैं। या तो प्रति उपयोगकर्ता फ्रेंडलिस्ट को कैश करें या अपने रिलेशनल डीबी को भागों में मैप करें या ग्राफ के लिए पूरी बात करें और ग्राफ डीबी को क्वेरी करें। आप उसके लिए OrientDB या Neo4j का उपयोग कर सकते हैं। मैं अपने खुद के ओपन सोर्स सोशल नेटवर्किंग सॉफ्टवेयर को लिखना पसंद करूंगा, लेकिन साथ ही साथ अन्य चीजों का एक टन है। आप जो भी करें: बेंचमार्क करें। :)
बुर्जुम

अभी भी नहीं। लेकिन ओरिएंटडीबी प्रलेखन मित्र कनेक्शन की व्याख्या करता है और मूल बातें समझने के बाद बाकी सब को मॉडल किया जा सकता है। Oridb.com/docs/2.1/Tutorial-Working-with-graphs.html यदि आप नींव के रूप में एक संबंधपरक DB का उपयोग करना चाहते हैं, तो आपको बस अपने "अपडेट करने के बाद" और "हटाने के बाद" कॉलबैक को जोड़ने के लिए अपने कोड को अपडेट करने की आवश्यकता है ग्राफ DB (जो आप डेटा पढ़ने के लिए उपयोग करेंगे)। यदि आपके पास ऐसे कॉलबैक नहीं हैं, तो उन्हें लागू करें, लेकिन मुझे लगता है कि लगभग सभी तरह के ओआरएम कार्यान्वयन और चौखटे में ऐसा कुछ है। वास्तव में ओरिएंटबीडी दस्तावेजों को भी संग्रहीत कर सकता है।
बुर्जुम

1
तो .. क्या आपको कभी लेख लिखने के लिए चारों ओर मिला?
कॉनर

1
फिर भी नहीं, लेकिन हम काम पर कुछ ऐसा ही करते हैं: हम अपने संबंधपरक डेटा को एक लोचदार खोज सूचकांक में मैप करते हैं, जैसा कि मैंने अपनी टिप्पणी में पहले लिखा था, यह केवल उस डेटा को प्राप्त करने की बात है जिसे आप किसी निश्चित कार्रवाई के बाद सूचकांक या ग्राफ़ में संग्रहीत करना चाहते हैं। (afterSave () / afterDelete () हमारे मामले में कॉलबैक) और फिर इंडेक्स या ग्राफ़ को अपडेट करना। बहुत साधारण? :) उसी तरह से मित्र सूचियों के साथ भी किया जा सकता है, यह वास्तव में मायने नहीं रखता है यदि आप उन्हें ईएस, एक ग्राफ या मेमोरी आधारित कैश (जब तक आपके पास पर्याप्त रैम है) में संग्रहीत करते हैं। यह वास्तव में कठिन नहीं है, कठिन हिस्सा यह है कि जब आप बढ़ते हैं तो पूरी चीज को पैमाने बनाते हैं।
ब्यूरो

32

मेरी सबसे अच्छी शर्त यह है कि उन्होंने एक ग्राफ संरचना बनाई । नोड उपयोगकर्ता हैं और "दोस्ती" किनारों हैं।

उपयोगकर्ताओं की एक तालिका रखें, किनारों की एक और तालिका रखें। फिर आप किनारों के बारे में डेटा रख सकते हैं, जैसे "दिन वे दोस्त बन गए" और "स्वीकृत स्थिति," आदि।


40
मुझे लगता है कि आपको यह समझाना होगा कि यहां कुछ लोगों के लिए थोड़ा अधिक है।
TheTXI

4
मुझे लगता है कि इस तरह के एक विशाल संरचना (हम 200 मिलियन नोड्स और अरबों किनारों के बारे में बात कर रहे हैं) को इस तरह से बनाए रखने के लिए एक और दिलचस्प सवाल होगा कि इसे आसानी से खोजा और अपडेट किया जा सके।
डिर्क वोल्मार

1
@ डिवो: इंडेक्स और विभाजन का चतुर उपयोग।
belgariontheking

20

यह कई संबंधों के लिए सबसे अधिक संभावना है:

FriendList (तालिका)

user_id -> users.user_id
friend_id -> users.user_id
friendVisibilityLevel

संपादित करें

उपयोगकर्ता तालिका में संभवतः PK_ के रूप में user_email नहीं है, संभवतः एक अद्वितीय कुंजी के रूप में।

उपयोगकर्ता (तालिका)

user_id PK
user_email
password

4
हालांकि यह निश्चित रूप से सबसे अधिक समझ में आता है, मुझे लगता है कि प्रदर्शन भयावह होगा, यह देखते हुए कि फेसबुक के कितने उपयोगकर्ता हैं और प्रत्येक फेसबुक के कितने मित्र हैं।
केविन पैंग

17

लिंक्डइन और डिग का निर्माण कैसे किया जाता है, इसका वर्णन करते हुए इन लेखों पर एक नज़र डालें:

"बिग डेटा: फेसबुक डेटा टीम से दृष्टिकोण" भी उपयोगी हो सकता है:

http://developer.yahoo.net/blogs/theater/archives/2008/01/nextyahoonet_big_data_viewpoints_from_the_fac.html

इसके अलावा, यह लेख गैर-संबंधपरक डेटाबेस के बारे में बात करता है और कुछ कंपनियों द्वारा उनका उपयोग कैसे किया जाता है:

http://www.readwriteweb.com/archives/is_the_relational_database_doomed.php

आप देखेंगे कि ये कंपनियां डेटा वेयरहाउस, विभाजन डेटाबेस, डेटा कैशिंग और अन्य उच्च स्तर की अवधारणाओं से निपट रही हैं, जिनमें से अधिकांश हम दैनिक आधार पर कभी नहीं निपटते हैं। या कम से कम, शायद हम नहीं जानते कि हम करते हैं।

पहले दो लेखों पर बहुत सारे लिंक हैं जो आपको कुछ और जानकारी देनी चाहिए।

UPDATE 10/20/2014

मूरत डेमिरबास ने एक सारांश लिखा था

  • TAO: सोशल ग्राफ के लिए फेसबुक का वितरित डाटा स्टोर (ATC'13)
  • F4: फेसबुक का गर्म BLOB स्टोरेज सिस्टम (OSDI'14)

http://muratbuffalo.blogspot.com/2014/10/facebooks-software-architecture.html

HTH


9

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

इसलिए प्रत्येक उपयोगकर्ता की अपनी कुंजी होती है और दोस्तों का विवरण कतार में होता है; यह जानने के लिए कि कैसंड्रा कैसे काम करती है:

http://prasath.posterous.com/cassandra-55


बहुत दिलचस्प है, धन्यवाद मेरे दोस्त। वे sql से कैसेंड्रा में कब आए? क्या आप को पता है?
मारिन

1
जागरूक रहें: पोस्टर्स स्पेसेस मर चुका है ... इसलिए लिंक।
TechNyquist

6

यह हाल ही में जून 2013 की पोस्ट कुछ डेटा प्रकारों के लिए संबंध के साथ ऑब्जेक्ट्स के लिए डेटाबेस से संक्रमण की व्याख्या करने में कुछ विस्तार से जाती है।

https://www.facebook.com/notes/facebook-engineering/tao-the-power-of-the-graph/10151525983993920

Https://www.usenix.org/conference/atc13/tao-facebook-distributed-data-store-social-graph पर एक लंबा पेपर उपलब्ध है


5

आप विदेशी चाबियां ढूंढ रहे हैं। मूल रूप से आपके पास डेटाबेस में एक सरणी नहीं हो सकती है जब तक कि इसकी खुद की मेज न हो।


उदाहरण स्कीमा:

    उपयोगकर्ता तालिका
        userID पीके
        अन्य आंकड़ा
    मित्र तालिका
        userID - उपयोगकर्ता की तालिका का प्रतिनिधित्व करने वाले उपयोगकर्ता के लिए FK जो एक मित्र है।
        FriendID - मित्र की उपयोगकर्ता आईडी का प्रतिनिधित्व करने वाले उपयोगकर्ताओं की तालिका के लिए FK

5
क्यों घटता है? कम से कम किसी को बताएं कि आपने उन्हें क्यों अपमानित किया।
साशा चोडगोव

3
@ फ्रीक: क्यों? इस साइट पर मतदान की पूरी अवधारणा गुमनाम रहने के लिए मतदान के लिए है। आपको ऐसा क्यों लगता है कि कुछ भी करने का हकदार है?
19

4
विशेष रूप से जब यह एक वैध उत्तर होता है और अन्य उत्तरों से
गूँजता

4
@TXI: मुझे लगता है कि डाउनवोट्स पर टिप्पणियां एक शिष्टाचार है, खासकर उन उत्तरों पर जो स्पष्ट रूप से उनके योग्य नहीं हैं, लेकिन मैं यह भी मानता हूं कि टिप्पणियों को अनिवार्य नहीं किया जाना चाहिए।
रॉबर्ट एस।

2
जो लोग गैर-स्पष्ट उत्तर पर गुमनाम रूप से डाउनवोट करते हैं, वे लोग डरते हैं कि अगर वे एक टिप्पणी छोड़ देते हैं, तो उनके उथले तर्क उजागर हो जाएंगे।
विनायक


1

ध्यान रखें कि डेटाबेस तालिकाओं को लंबवत (अधिक पंक्तियों) बढ़ने के लिए डिज़ाइन किया गया है, क्षैतिज रूप से (अधिक कॉलम)


24
कभी नहीं भूलें! मेरे पिताजी की मृत्यु हो गई क्योंकि एक db टेबल जो अपने स्तंभों के लिए बहुत दूर खड़ी हो गई थी। आई विल मिस यू डैड।
बेलगारियन

1
हम्म, डाउनवोट क्यों? और इस टिप्पणी के ऊपर एक मतलब नहीं है।
नील एन

2
नहीं, टिप्पणी का कोई मतलब नहीं है। लगता है जैसे किसी ने मजाकिया होने की कोशिश की, तो बुरा मत मानना।
डर्क वोल्मार

0

कई-से-कई तालिका के प्रदर्शन के संबंध में, यदि आपके पास उपयोगकर्ता आईडी को जोड़ने वाले 2 32-बिट इनट्स हैं, तो 200 दोस्तों के औसत 200,000,000 उपयोगकर्ताओं के लिए आपका मूल डेटा संग्रहण केवल 300 जीबी से कम है।

जाहिर है, आपको कुछ विभाजन और अनुक्रमण की आवश्यकता होगी और आप इसे सभी उपयोगकर्ताओं के लिए स्मृति में नहीं रखेंगे।


0

संभवतः एक तालिका है, जो मित्र <-> उपयोगकर्ता संबंध को संग्रहीत करती है, "frnd_list", फ़ील्ड 'user_id', 'frnd_id' कहते हैं।

जब भी कोई उपयोगकर्ता किसी अन्य उपयोगकर्ता को एक मित्र के रूप में जोड़ता है, तो दो नई पंक्तियाँ बनाई जाती हैं।

उदाहरण के लिए, मान लें कि मेरी आईडी 'डीप 9 सी' है और मैं अपने मित्र के रूप में आईडी 'akash3b' वाले उपयोगकर्ता को जोड़ता हूं, तो मानों के साथ तालिका "frnd_list" में दो नई पंक्तियों का निर्माण होता है ('deep9c', 'akash3b') और ('akash3b') ',' deep9c ')।

अब जब किसी विशेष उपयोगकर्ता को मित्र-सूची दिखाते हैं, तो एक साधारण वर्ग ऐसा करेगा: "frnd_id को frnd_list से चुनें जहां user_id =" जहां लॉग-इन उपयोगकर्ता की आईडी है (सत्र-विशेषता के रूप में संग्रहीत)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.