我正在使用node.js在EC2 Micro实例上将大量数据聚合到Firebase中.该应用程序扫描了许多照片来源,并维护Firebase的每张照片的元数据,如网址,大小,来源,"喜欢"等.
我还保留了一些更新的聚合索引(按日期,喜欢等).实际代码非常简单:
var db = new Firebase('https://my.firebaseio.com')
// Whenever the aggregator updates a photo, update the popularity inedx
db.child('photos').on('child_changed', function(snapshot) {
var instagram = snapshot.child('likes/instagram').val() || 0,
facebook = snapshot.child('likes/facebook').val() || 0,
likes = instagram + facebook
// Update popularity index
db.child('index/popularity').child(snapshot.name()).setWithPriority(true, likes)
})
Run Code Online (Sandbox Code Playgroud)
由于我的实例(t1.micro)只有615mb的RAM可用,因为Firebase photos在更新时缓存了集合中的所有子节点,因此RAM耗尽.
有没有办法阻止Firebase耗尽其内存缓存中的所有可用内存?
Firebase会保留您当前拥有优秀回调功能的所有内容的缓存.因此,只要在某个位置执行on(),我们就会加载所有数据并将其保存在内存中.我们必须这样做,以便我们可以计算差异并模拟本地事件.
您是否将实际图像存储在Firebase中?
如果您有大量数据并且您不希望所有数据都被加载,我建议分离出大块数据并仅同步元数据.例如,您可以将照片存储在/ photos中,但在/ photos_metadata中存储有关喜欢和其他元数据的信息.
如果您只是处理元数据并且有大量的元数据,那么您应该做的是保持"最近更改"的队列.然后,当客户端更新某些数据时,它也会推送到队列.然后,您的节点进程只是侦听该队列,处理更改并删除队列条目.如果它需要在处理期间同步元数据,它可以逐个照片地执行,然后在完成时调用off()(或者只使用一次()).
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |