私は、私のアプリケーションをHeroku上で実行していて、Firebaseデータベースの特定のパスをリッスンしています。問題は、これらの経路を聴くことが膨大な量のメモリを占めるように見えることです。私のHerokuのサーバ上の総メモリの147メガバイトを占める場合、私は、それで13000の項目で以下のようなパス上の変化を聞く場合:Firebaseリスナーが膨大な量のメモリを占有しています
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は、それが聞いている経路のために非常に多くのメモリを占有するでしょうか?パス内のすべてのアイテムを取り出して各アイテムをリッスンするためですか?これを回避する方法はありますか?
すぐにお返事ありがとうございます。 Firebaseデータベースで大量のデータを受信するのは悪い考えですか?彼らがここでやっているようにAlgoliaと同期するために私のFirebaseデータの特定の部分が必要なので、私はそれをやっています - http://scottksmith.com/blog/2014/12/09/algolia-real-time-search -with-firebase/- 特定の経路でリッスンしてAlgoliaに同期している場所。それはそれを行う方法ではありませんか? –
少数の10KのアイテムがFirebaseサーバー上で問題になることはほとんどありませんが、明らかにHerokuサーバーはメモリ使用に問題があります。すべてがあなたのユースケースに依存します。そのため、私は物事の仕組みを記述することを好むのです。 –