2016-08-15 13 views
5

मैं फायरबेस के साथ नौसिखिया हूं और मैं अपने ऐप के उपयोगकर्ताओं के बीच दोस्ती स्टोर करने के लिए अपने डेटा को ढूढ़ने की कोशिश करता हूं।फ़ायरबेस के साथ दोस्ती डेटा कैसे व्यवस्थित करें?

मेरे डेटा इस तरह संरचित कर रहे:

{ users: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     }, 
     user_3: { 
      name: Georges 
     }, 
    }, 
    { friendships : { 
     user_1 : { 
     user_2: { 
      name: Jack 
      }, 
     user_3: { 
      name: Georges 
     }, 
     user_3: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     } 
    } 
} 

मैं अगर मेरे डेटा संरचना ठीक है पता नहीं है, लेकिन मुझे आश्चर्य है कि दोस्ती में एक नाम अद्यतन करने के लिए यदि कोई उपयोगकर्ता बदलता है सबसे अच्छा तरीका है कि उनकी नाम, मैं दोस्ती में संदर्भ को आसानी से कैसे अपडेट कर सकता हूं (प्रत्येक नोड को ब्राउज़ करें?)?

धन्यवाद यदि कोई मुझे ऐसा करने का सही तरीका समझने में मदद कर सकता है तो धन्यवाद।

उत्तर

4

आपका संरचना लगभग अच्छा है, लेकिन मैं यह करने के लिए दोस्ती नोड बदल जाएगा:

{ users: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     }, 
     user_3: { 
      name: Georges 
     }, 
    }, 
    { friendships : { 
     user_1 : { 
     user_2: true, 
     user_3: true, 
     user_3: { 
     user_1: true, 
     user_2: true 
    } 
} 

यह वही द्रविड़ से पता चला है के समान है, लेकिन आप कैसे कई दोस्त हैं पर निर्भर करता है, है ना के लिए एक बेहतर विचार हो सकता है उपयोगकर्ता खाते के विवरण नोड के तहत उपयोगकर्ताओं को सूचीबद्ध करें क्योंकि अगर आपके पास 1000+ दोस्त थे तो आपको 1000 बच्चों को डाउनलोड करना होगा, भले ही आप सिर्फ उनके नाम की तरह एक ही मूल्य प्राप्त करना चाहते हों।

+0

आप मित्र डेटा को कैसे पुनः प्राप्त करेंगे क्योंकि मैं अनुमान लगा रहा हूं कि उपयोगकर्ता नोड में वास्तविक उपयोगकर्ता तक सीमित और .write प्रतिबंधित होगा। – Newbie

0

आप friendships संरचना में name की दुकान नहीं चाहिए, केवल उपयोगकर्ता नाम। तो friendships यह कुछ ऐसा दिखाई देना चाहिए:

{ 
    friendships: { 
     user_1: [ 
      user_2, 
      user_3 
     ], 
     user_2: [ 
      user_1 
     ] 
    } 
} 

इस तरह अगर आप name अद्यतन करते हैं, आपको केवल एक स्थान (users) में अपडेट कर दिया है। name खोजने के लिए आप users में उपयोगकर्ता नाम के साथ friendships से उपयोगकर्ता नाम पार कर सकते हैं।

इसके अलावा मामले में

आप push() का उपयोग दोस्ती के लिए, संरचना एक छोटे से बदल जाएगा, लेकिन एक ही सिद्धांत लागू होता है:

{ 
    friendships: { 
     user_1: { 
      -KPE008BeSzNR5D3W7t3: user_2, 
      -KPE0nF4AW7Lj66xTLUu: user_3 
     }, 
     ... 
    } 
} 
5

डेटाबेस संरचना है कि आप का अनुसरण कर रहे एक सा गन्दा है और थोड़ा मुश्किल साबित हो सकता इसके माध्यम से नेविगेट करने के लिए, मैं सुझाव दे सकता है: -

Users{ 
    userID_1 : { 
     username : “Shelly Morgan” ,  
     useremail : “[email protected]” 
     friends :{ 
     userID_2 : true, 
     userID_3 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_2 : { 
    username : “Mikael” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_3 : { 
    username : “Lenoard Narish” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true, 
     userID_2 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_4 : { 
    username : “Rob Stark” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true 
       } 
      } 

} 

इस तरीके में आप केवल कि उपयोगकर्ताओं को डेटाबेस में दोस्तों के userID की दुकान है, और तुम सब करने की है केवल friends_uid में मूल्यों को बदल है node.To friends डेटाबेस को पुनः प्राप्त: -

1.) सिर्फ इतना है कि User

2. की friends नोड) हर मित्र uid के लिए सुनो,

3.) मारा और साथ डेटाबेस मारा वांछित uid डेटा पुन: प्राप्त करने के लिए यहाँ में दस्तावेज़ पढ़ें संबंधित friend

के डेटाबेस को पुनः प्राप्त करने: https://firebase.google.com/docs/database/android/retrieve-data

+0

मैंने फायरबेस दस्तावेज़ को पढ़ा है और यह नेस्टेड डेटा से बचने की सिफारिश करता है: https://firebase.google.com/docs/database/android/structure-data, आप इसके बारे में क्या सोचते हैं? – aurevec

+1

हाँ यदि आप इसे रीयल-टाइम डेटाबेस के लिए उपयोग करने जा रहे हैं या तो ... चैट के लिए, अधिसूचना भेजना आदि।लेकिन स्थैतिक मूल्यों को संग्रहीत करने के लिए, यह ठीक है। जब आप 'खोज इंजन' जैसे मूल रूट से बच्चे के करीबी लिंक की आवश्यकता होती है या यदि आपके डेटास्ट्रक्चर को 'वेटिंग' की आवश्यकता होती है तो फ़्लैटन डेटा स्ट्रक्चर की आवश्यकता होती है। मुझे लगता है कि आपकी संरचना इस – Dravidian

+0

ठीक से ठीक काम करेगी, अब मैं बेहतर समझता हूं, आपकी मदद के लिए धन्यवाद। – aurevec

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

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