2014-12-18 12 views
5

फायरफेड फ़ायरबेस के साथ क्या हासिल किया जा सकता है इसका एक बहुत अच्छा उदाहरण है - एक पूरी तरह से ग्राहक पक्ष ट्विटर क्लोन। तो यह पृष्ठ है: https://firefeed.io/about.html जहां अपनाया गया डेटा संरचना के पीछे तर्क समझाया गया है। यह फायरबेस सुरक्षा नियमों को समझने में बहुत मदद करता है।फायरबेस डेटा संरचना - क्या फायरफीड संरचना प्रासंगिक है?

डेमो के अंत तक, वहाँ कोड के इस स्निपेट है:

var userid = info.id; // info is from the login() call earlier. 
    var sparkRef = firebase.child("sparks").push(); 
    var sparkRefId = sparkRef.name(); 

    // Add spark to global list. 
    sparkRef.set(spark); 

    // Add spark ID to user's list of posted sparks. 
    var currentUser = firebase.child("users").child(userid); 
    currentUser.child("sparks").child(sparkRefId).set(true); 

    // Add spark ID to the feed of everyone following this user. 
    currentUser.child("followers").once("value", function(list) { 
    list.forEach(function(follower) { 
     var childRef = firebase.child("users").child(follower.name()); 
     childRef.child("feed").child(sparkRefId).set(true); 
    }); 
    }); 

यह कैसे लेखन आदेश को पढ़ने के सरल रखने के लिए किया जाता है दिखा रहा है - के रूप में कहा गया है:

जब हमें किसी विशेष उपयोगकर्ता के लिए फ़ीड प्रदर्शित करने की आवश्यकता है, हमें केवल एक ही स्थान को देखने की आवश्यकता है

तो मैं इसे समझता हूं। लेकिन अगर हम ट्विटर पर नजर डालेंगे, तो हम देख सकते हैं कि कुछ खातों में लाखों अनुयायी हैं (सबसे अधिक पीछा कैटी पेरी 61 मिलियन से अधिक है!)। इस संरचना और इस दृष्टिकोण के साथ क्या होगा? जब भी कैटी एक नया ट्वीट पोस्ट करेगा, तो यह 61 मिलियन लिखने के संचालन करेगा। क्या यह ऐप को मार नहीं सकता? और इससे भी ज्यादा, क्या यह बहुत अनावश्यक जगह नहीं ले रहा है?

+0

मुझे इसे सिर्फ एक डेमो कहना है ... – zuo

+0

निश्चित रूप से, इसलिए मैं ऐसा करने का एक उचित तरीका मांग रहा हूं। यह मुझे बेहतर समझने में मदद करेगा कि फ़ायरबेस पर डेटा संरचना को कैसे संभाला जाए ... –

+1

मैं श्रोताओं को आपके द्वारा अनुसरण किए जाने वाले खातों के लिए सेट करना चाहता हूं क्योंकि एक सीमा है कि आप कितने खाते का अनुसरण कर सकते हैं लेकिन अनुयायियों के लिए कोई सीमा नहीं है। तो हाँ कैटी पेरी ऐप को मार डालेगा। हालांकि 2000 श्रोताओं की स्थापना भी आदर्श नहीं हो सकती है। शायद यह घुमा सकता है कि उस समय 100 खाते कहें ... – webduvet

उत्तर

5

denormalized डेटा के साथ, डेटा कनेक्ट करने का एकमात्र तरीका यह है कि इसे पढ़ने के हर स्थान पर लिखना है। तो हाँ, 61 मिलियन अनुयायियों को एक ट्वीट प्रकाशित करने के लिए 61 मिलियन लिखने की आवश्यकता होगी।

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

सामान्यीकृत डेटा के साथ, आप एक बार ट्वीट लिखते हैं, लेकिन पढ़ने पर शामिल होने के लिए भुगतान करते हैं। यदि आप प्रत्येक अनुरोध के लिए डेटाबेस को मारने से बचने के लिए फ़ीड में ट्वीट्स को कैश करते हैं, तो आप प्रत्येक कैटी पेरी ट्वीट के लिए रेडिस को 61 मिलियन लिखते हैं। वास्तविक समय में ट्वीट को धक्का देने के लिए, आपको हर ऑनलाइन अनुयायी के लिए किसी भी सॉकेट में ट्वीट लिखना होगा।

संबंधित मुद्दे