2013-05-28 4 views
0

Я собираю большое количество данных в Firebase на экземпляре EC2 Micro, используя node.js. Приложение сканирует несколько источников для фотографий и поддерживает Firebase метаданных о каждой фотографии, такой как URL, размер, происхождение, «любит» и т. Д.Ограничение кэширования в 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) 
}) 

Поскольку мой экземпляр (t1.micro) имеет только 615mb оперативной памяти доступной я бегу из памяти, как Firebase кэширует все дочерние photos коллекции в то время как они обновляются ,

Есть ли способ предотвратить использование Firebase всей доступной оперативной памяти с ее кешем в памяти?

ответ

5

Firebase хранит кеш-память всего, что у вас в настоящее время имеет выдающиеся обратные вызовы. Поэтому, как только вы сделаете on() в месте, мы загрузим все данные и сохраним их в памяти. Мы должны сделать это, чтобы мы могли рассчитать различия и моделировать локальные события.

Вы сохраняете фактические изображения в Firebase?

Если у вас большой объем данных, и вы не хотите, чтобы все это загрузилось, я предлагаю выделить большие куски данных и только синхронизировать метаданные. Например, вы можете хранить свои фотографии на/фотографии, но хранить информацию о симпатиях и других метаданных в/photos_metadata.

Если вы просто работаете с метаданными, и у вас есть тонна, то вам нужно поддерживать очередь «последних изменений». Затем, когда клиент обновляет часть данных, он также будет входить в очередь. Затем ваш узел обрабатывает эту очередь, обрабатывает изменения и удаляет запись в очереди. Если ему нужно синхронизировать метаданные во время обработки, он может делать это по принципу «фото по фото», а затем вызывать(), когда это будет сделано (или просто использовать один раз()).

Смежные вопросы