2013-04-26 21 views
22

मैं एक ऐसे प्रोजेक्ट के लिए फायरबेस का परीक्षण कर रहा हूं जिसमें संभावित रूप से बड़ी संख्या में चाबियाँ हो सकती हैं, संभावित रूप से लाखों।बड़े डेटा सेट के साथ फायरबेस का प्रदर्शन

मैंने नोड का उपयोग करके कुछ 10k रिकॉर्ड लोड करने का परीक्षण किया है, और लोड प्रदर्शन अच्छा दिखाई देता है। हालांकि "फोर्ज" वेब यूआई असामान्य रूप से धीमा हो जाता है और यदि मैं अपना रूट नोड का विस्तार करता हूं तो प्रत्येक रिकॉर्ड को प्रस्तुत करता है।

क्या फायरबेस को इस मात्रा के डेटा के लिए डिज़ाइन नहीं किया गया है, या क्या मैं कुछ गलत कर रहा हूं?

+1

जैसा कि काटो नीचे उल्लेख करता है, यह एक फोर्ज मुद्दा है, फ़ायरबेस मुद्दे नहीं। बड़े डेटासेट को संभालने के लिए सीधे गहरे पथ पर नेविगेट करने का प्रयास करें। –

उत्तर

64

यह केवल फोर्ज यूआई की सीमाएं है। यह अभी भी काफी प्राथमिक है।

फायरबेस में वास्तविक समय के कार्य केवल उपयुक्त नहीं हैं, बल्कि बड़े डेटा सेट के लिए डिज़ाइन किए गए हैं। तथ्य यह है कि रीयल-टाइम में स्ट्रीम स्ट्रीम इस के लिए बिल्कुल सही है।

प्रदर्शन किसी भी बड़े डेटा ऐप के साथ ही आपके कार्यान्वयन के जितना अच्छा है। तो बड़े डेटा सेटों को ध्यान में रखने के लिए यहां कुछ गठिया हैं।

denormalize, denormalize, denormalize

किसी डेटा सेट दोहराया जाएगा, और उसके रिकॉर्ड हजारों में गिना जा सकता है, भी अपने मार्ग पर यह दुकान।

यह बड़े डेटा सेट पुनरावृत्ति के लिए बुरा है:

/users/uid 
/users/uid/profile 
/users/uid/chat_messages 
/users/uid/groups 
/users/uid/audit_record 

यह बड़े डेटा सेट पुनरावृत्ति के लिए अच्छा है: बड़े डेटा पर

/user_profiles/uid 
/user_chat_messages/uid 
/user_groups/uid 
/user_audit_records/uid 

से बचें 'मान' सेट

का उपयोग करें क्योंकि value को क्लाइंट को संपूर्ण रिकॉर्ड सेट लोड करना होगा। बच्चों

जब आप child_added कहते हैं, आप अनिवार्य रूप से बुला रहे हैं value हर बच्चे को रिकॉर्ड पर पर छिपा value के संचालन के लिए

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

+0

क्या आपका मतलब है, अगर हम उपयोगकर्ता के बारे में सबकुछ सिर्फ उपयोगकर्ता प्रोफाइल पेज प्रदर्शित करना चाहते हैं तो हम '' बड़े डेटा सेट को पुन: सक्रिय करने के लिए खराब है '' विधियों का उपयोग करते हैं, अन्यथा, यदि उपयोगकर्ता उदाहरण की सूची प्रदर्शित करना चाहते हैं व्यवस्थापक उपयोग के लिए हम '' बड़े डेटा सेट विधि को पुन: सक्रिय करने के लिए अच्छा है '' का उपयोग करते हैं? – vzhen

+4

@vzhen बहुत ज्यादा, यह चाल याद रख रही है कि जब आप child_added या value को कॉल करते हैं (इससे कोई फर्क नहीं पड़ता) कि आप उस पथ के तहत सभी डेटा सहित सभी डेटा डाउनलोड कर रहे हैं, न सिर्फ रूट स्तर तत्व के लिए। – Kato

+5

जैसा कि काटो ने उल्लेख किया है, बाल_एडड को थोड़ा उलझन में नामित किया गया है क्योंकि यह वास्तव में जोड़े जाने पर ध्यान दिए बिना पथ के नीचे सभी डेटा भी देता है। यदि आप चाहते हैं कि "जब भी कोई नया बच्चा जोड़ा जाता है", तो आपको कुछ करना होगा जैसे 'ref.limitToLast (1) .on (' child_added ', ... ' –

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