Firebase侦听器占用大量内存

时间:2016-03-29 02:45:34

标签: node.js heroku firebase

我有一个节点工作者在Heroku的应用程序旁边运行,该应用程序侦听Firebase数据库上的某些路径。问题是听这些路径似乎占用了大量的内存。如果我在下面的路径中侦听更改,其中有13000个项目,如果我的Heroku服务器占用总内存的147mb:

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

如果Firebase占用了这么多内存,那么它是否正常收听?是因为它获取路径中的所有项目并侦听每个项目?有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:5)

Firebase会同步您收听的位置(或查询中)的数据。它会保留内存中该位置的所有活动数据的副本。

要减少内存使用量,请收听数据量较少的位置。或者使用查询(例如使用limitToLast())来减少活动数据量。

使用NoSQL数据库时,通常最好将活动数据与历史数据分开。通过保持活动数据集较小,可以减少许多操作的资源使用。在您的情况下,它不仅可以减少Heroku服务器中的内存使用量,还可以减少Firebase服务器上所需的内存/ CPU,这也将加快操作速度。