2016-03-29 13 views
5

मेरे पास हेरोोकू पर मेरे ऐप के साथ एक नोड कार्यकर्ता चल रहा है, जो मेरे फायरबेस डेटाबेस पर कुछ पथों को सुनता है। समस्या यह है कि इन पथों को सुनना बड़ी मात्रा में स्मृति लेता है।फायरबेस श्रोताओं मेमोरी की बड़ी मात्रा लेते हैं

setInterval => 
    @ref.log_memory('Listener interval') 
, 1000 

@ref.firebaseClient.child('listings').on 'child_changed', (snap) => 
    @ref.log('child_changed') 

आउटपुट::

22:39:07 worker.1 | info: Memory: 35mb total - 66mb rss - 23mb heapUsed 
22:39:08 worker.1 | info: Memory: 36mb total - 67mb rss - 18mb heapUsed 
22:39:09 worker.1 | info: Memory: 37mb total - 69mb rss - 23mb heapUsed 
22:39:10 worker.1 | info: Memory: 54mb total - 72mb rss - 25mb heapUsed 
22:39:11 worker.1 | info: Memory: 54mb total - 82mb rss - 33mb heapUsed 
22:39:13 worker.1 | info: Memory: 147mb total - 186mb rss - 94mb heapUsed 
22:39:14 worker.1 | info: Memory: 147mb total - 186mb rss - 94mb heapUsed 
22:39:15 worker.1 | info: Memory: 147mb total - 186mb rss - 94mb heapUsed 
22:39:15 worker.1 | info: child_changed 
22:39:16 worker.1 | info: Memory: 147mb total - 186mb rss - 95mb heapUsed 
22:39:17 worker.1 | info: Memory: 147mb total - 186mb rss - 95mb heapUsed 

अगर यह सामान्य है कि अगर मैं उस में 13000 आइटम के साथ नीचे एक तरह एक रास्ते पर हुए परिवर्तनों पर ध्यान, अगर मेरे Heroku सर्वर पर कुल स्मृति के 147mb तक ले जाता है फायरबेस उस पथ के लिए इतनी मेमोरी लेगा जो इसे सुनता है? क्या ऐसा इसलिए है क्योंकि यह पथ में सभी वस्तुओं को लाता है और प्रत्येक आइटम को सुनता है? क्या इसके आसपास पाने के लिए कोई रास्ता नहीं है?

उत्तर

5

फ़ायरबेस उस स्थान पर डेटा (या क्वेरी में) सिंक्रनाइज़ करता है जिसे आप सुनते हैं। यह स्मृति में उस स्थान पर सभी सक्रिय डेटा की एक प्रति रखता है।

स्मृति उपयोग को कम करने के लिए, कम डेटा वाले स्थान को सुनें। या सक्रिय डेटा की मात्रा को कम करने के लिए एक क्वेरी का उपयोग करें (उदा। limitToLast() के साथ)।

नोएसQL डेटाबेस का उपयोग करते समय अपने सक्रिय डेटा को अपने ऐतिहासिक डेटा से अलग करना आम तौर पर एक अच्छा विचार है। सक्रिय डेटा सेट को छोटा रखकर, आप कई ऑपरेशन के लिए संसाधन उपयोग को कम कर सकते हैं। आपके मामले में न केवल आपके हेरोकू सर्वर में मेमोरी उपयोग को कम करेगा, बल्कि यह फायरबेस सर्वर पर आवश्यक मेमोरी/सीपीयू को भी कम करेगा, जो ऑपरेशन को भी तेज करेगा।

+1

त्वरित उत्तर के लिए धन्यवाद। तो मुझे लगता है कि जवाब यह है कि आपके फायरबेस डेटाबेस पर बड़ी मात्रा में डेटा सुनने के लिए एक बुरा विचार है? मैं ऐसा कर रहा हूं क्योंकि मुझे अपने फायरबेस डेटा के कुछ हिस्सों को अल्गोलिया के साथ समन्वयित करने की आवश्यकता है जैसे वे यहां कर रहे हैं - http://scottksmith.com/blog/2014/12/09/algolia-real-time-search साथ-साथ फायरबेस/- जहां वे एक निश्चित पथ पर सुन रहे हैं और अल्गोलिया को सिंक कर रहे हैं। तो यह करने का तरीका नहीं है? –

+2

कुछ 10K आइटम शायद ही कभी फ़ायरबेस सर्वर पर एक समस्या होगी, लेकिन स्पष्ट रूप से आपके Heroku सर्वर में स्मृति उपयोग के साथ कोई समस्या है। यह सब आपके उपयोग-मामले पर निर्भर करता है, यही कारण है कि मैं वर्णन करना पसंद करता हूं कि चीजें कैसे काम करती हैं। –

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