2016-03-29 26 views
5

Uygulamamın Heroku'daki yanı sıra Firebase veritabanımdaki belirli yolları dinleyen bir düğüm işçim var. Sorun şu ki bu yolları dinlemek büyük miktarda bellek alıyor gibi görünüyor.Firebase dinleyicileri büyük miktarda bellek kapıyor

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

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

Çıktı:

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 

o normalse İçinde 13000 öğelerle aşağıdaki gibi bir yol üzerinde değişiklikler için dinlersek, eğer benim Heroku sunucuda toplam bellek 147mb kaplıyor Firebase, dinlediği bir yol için çok fazla bellek alacaktı? Yoldaki tüm öğeleri getirdiği ve her bir öğeyi dinlediği için mi? Bu aşmanın bir yolu var mı?

cevap

5

Firebase, dinlediğiniz konumdaki (veya sorgudaki) verileri senkronize eder. Tüm aktif verilerin bir kopyasını o lokasyonda hafızada tutar.

Bellek kullanımını azaltmak için, daha az veri içeren bir konum dinleyin. Veya etkin olan veri miktarını azaltmak için bir sorgu kullanın (ör. limitToLast() ile).

Bir NoSQL veritabanı kullanıldığında, aktif verilerinizi geçmiş verilerinizden ayırmak genellikle iyi bir fikirdir. Etkin veri kümesini küçük tutarak, birçok işlem için kaynak kullanımını azaltabilirsiniz. Durumunuzda sadece Heroku sunucunuzdaki bellek kullanımını azaltmakla kalmaz, aynı zamanda Firebase sunucularında gerekli olan belleği/CPU'yu da düşürür, bu da işlemi hızlandıracaktır.

+1

Hızlı cevap için teşekkürler. Bu yüzden cevabın, Firebase veritabanınızda büyük miktarda veri dinlemenin kötü bir fikir olduğunu tahmin ediyorum. Bunu yapıyorum çünkü Firebase verilerimin belirli kısımlarının Algolia'yla senkronize olmasını istiyorum çünkü burada yapıyorlar - http://scottksmith.com/blog/2014/12/09/algolia-real-time-search -with-firebase/- belirli bir yolda dinledikleri ve bunu Algolia ile senkronize ettikleri yer. Yani bunu yapmanın yolu bu değil mi? –

+2

Birkaç 10K öğe nadiren Firebase sunucularında bir sorun olacaktır, ancak görünüşe göre Heroku sunucunuzun bellek kullanımıyla ilgili bir sorunu vardır. Her şey sizin kullanım durumunuza bağlıdır, bu yüzden işlerin nasıl çalıştığını açıklamayı tercih ediyorum. –