के साथ कार्य करना हाल ही में मैं Firebase
से Firestore
करने के लिए अपने डेटा मॉडल ले जाया गया। मेरा पूरा कोड काम कर रहा है, लेकिन मुझे कुछ डेटा पुनर्प्राप्त करने के लिए मेरे घोंसले हुए प्रश्नों के बारे में कुछ बदसूरत परेशानी हो रही है।Firestore: नेस्टेड एकल प्रश्नों
अभी इस हिस्से के लिए अपने डेटा मॉडल इस तरह दिखता है (हाँ एक और अनुयायियों/उदाहरण फ़ीड!):
{
"Users": { //Collection
"UserId1" : { //Document
"Feed" : { //Subcollection of Id of posts from users this user Follow
"PostId1" : { //Document
"timeStamp" : "SomeDate"
},
"PostId2" : {
"timeStamp" : "SomeDate"
},
"PostId3" : {
"timeStamp" : "SomeDate"
}
}
//Some data
}
},
"Posts":{ //Collection
"PostId1":{ //Document
"Comments" :{ //Subcollection
"commentId" : { //Document
"authorId": "UserId1"
//comentsData
}
},
"Likes" : { //Subcollection
"UserId1" : { //Document
"liked" : true
}
}
}
}
}
ठीक है, मेरी समस्या अभी उस के लिए की पोस्ट को पुनः प्राप्त है यहाँ है एक उपयोगकर्ता की फ़ीड मैं अगले रास्ते में क्वेरी करना चाहिए:
- मेरे फ़ीड से टाइमस्टैम्प द्वारा पिछले एक्स दस्तावेजों orderer जाओ
feedCol(userId).orderBy(CREATION_DATE, Query.Direction.DESCENDING).limit(limit)
उसके बाद मैं सूची से लिया गया प्रत्येक पोस्ट के किसी एक क्वेरी करना चाहिए:
workoutPostCol.document(postId)
अब मैं प्रत्येक पोस्ट के आंकड़े उपलब्ध नहीं हैं, लेकिन मैं उपयोगकर्ता नाम, चित्र, अंक गोली मार दी चाहता हूँ। । लेखक, जो एक अलग
Document
में है, इसलिए, फिर से मैं हरauthorId
पदोंuserSocial(userId).document(toId)
अंत में, और नहीं कम महत्वपूर्ण की सूची में लिया गया के लिए एक और एक क्वेरी करना चाहिए के आदि, मैं अगर पता करने की जरूरत मेरी वर्तमान उपयोगकर्ता पहले से ही उस पोस्ट को पसंद आया है, इसलिए मैं प्रत्येक पोस्ट (फिर) के लिए किसी एक क्वेरी करते हैं और जांच करने की जरूरत है, तो मेरी userId के अंदर है
posts/likes/{userId}
अभी सब कुछ काम कर रहा है, लेकिन सोच है कि Firestore
की कीमत डेटाबेस कॉल की संख्या के आधार पर किया जाता है , और यह भी कि यह मेरे प्रश्नों को और अधिक सरल नहीं बनाता है, मुझे नहीं पता कि यह मेरा डेटा मॉडल इस तरह के डेटाबेस के लिए अच्छा नहीं है और मुझे सामान्य SQL
या फिर Firebase
पर वापस जाना चाहिए।
नोट: मुझे पता है कि सब कुछ, एक बहुत अधिक आसान मेरे उपयोगकर्ता या पोस्ट दस्तावेजों के अंदर arraylists को पसंद, चारा, आदि के इस subcollections चलती होगा, लेकिन एक दस्तावेज़ की सीमा है 1 एमबी और इस करता है, तो ज्यादा बढ़ोतरी, यह भविष्य में दुर्घटनाग्रस्त हो जाएगा। दूसरी तरफ Firestore
एकाधिक whereEqualTo
का उपयोग करते हुए उप-दस्तावेज़ क्वेरी (अभी तक) या OR
खंड की अनुमति नहीं देता है।
मैं जो अपने Collections
में joins
और queries
बनाने के लिए ID's
संबंध इस तरह का स्टोर करने के लिए, Arraylists
का उपयोग भयानक होगा एक आसान तरीका की तलाश में समस्या है उपयोगकर्ताओं द्वारा पोस्ट की एक बहुत कुछ पढ़ा है, लेकिन 1 एमबी की सीमा सीमित बहुत ज्यादा।
आशा है कि किसी को मेरे मन को स्पष्ट, या कम से कम मुझे कुछ नया सिखाने के लिए सक्षम हो जाएगा, शायद अपने मॉडल सिर्फ बकवास है और वहाँ यह करने के लिए एक सरल और आसान तरीका है। या हो सकता है कि मेरा मॉडल गैर-एसक्यूएल डेटाबेस के लिए संभव नहीं है।
सब कुछ के लिए धन्यवाद, आपका दिन शुभ हो।
मुझे 'घटनाओं' भाग पसंद है, मैंने ऐसा कुछ भी सोचा था कि अधिसूचनाएं केवल एक बार भेजी जाती हैं। दूसरी तरफ, मैंने पहले ही देखा है कि मुझे अपने डेटा को और अधिक असामान्य करना चाहिए (केवल आईडी के बजाय उपयोगकर्ता नाम और फोटो यूआरएल सहेजें), कोई उपयोगकर्ता अपना नाम या चित्र अक्सर नहीं बदलेगा, और अंत में अनंत नेस्टेड प्रश्नों को जोड़ने से अधिक कठोर होगा पोस्ट, टिप्पणियां, पसंद ... आदि –
अंततः मुझे लगता है कि 'फीड' के लिए मुझे प्रत्येक उपयोगकर्ता के पदों के संदर्भों की एक सूची में रहना चाहिए, अंत में कारण, केवल एक बार कॉपी करें या हटाएं एक बार जब सभी आईडी प्रत्येक उपयोगकर्ता के सभी अंतिम पदों को पुनर्प्राप्त करने के लिए बड़ी क्वेरी बनाने से अधिक आसान हो जाएंगे, तो मैं हर बार जब मैं अपनी फ़ीड जांचना चाहता हूं तो मैं अनुवर्ती हूं। –
@ फ्रांसिस्को डर्डिन गार्सिया - कारण मैंने इंस्टाग्राम के एपीआई का सुझाव दिया क्योंकि मेरा मानना है कि वे इसे 'ईवेंट' विधि का उपयोग कर प्रकाश रखने में भी कामयाब रहे हैं। आपके द्वारा अनुसरण किए जाने वाले उपयोगकर्ताओं द्वारा सभी पोस्ट की सूची रखने के संबंध में, यह एक फिसलन ढलान है, क्योंकि इसके लिए एक व्यस्त डेटा मॉडल की आवश्यकता होती है। मान लें कि आप मेरा पीछा कर रहे हैं, और मैं एक पोस्ट करता हूं। इसके लिए मुझे आपके उपयोगकर्ता को डेटा का एक टुकड़ा लिखना आवश्यक है। सुरक्षा को अधिक जटिल बनाने के अलावा, पैमाने पर, इस समाधान के लिए मेरे उपयोगकर्ता को 200k अन्य उपयोगकर्ताओं के प्रोफाइल में 1 पोस्ट लिखने की आवश्यकता होगी यदि मेरे पास 200k अनुयायियों हैं। मैं उस अनुमान को आपके अनुमानित पैमाने के आधार पर चुनूंगा। – johnozbay