Firebase侦听器占用大量内存

Hol*_*bæk 6 heroku node.js 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')
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*len 5

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

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

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

  • 一些10K的项目很少会成为Firebase服务器上的问题,但显然您的Heroku服务器存在内存使用问题.这一切都取决于你的用例,这就是为什么我更喜欢描述事情的运作方式. (2认同)