Firebase: облачные функции, как кэшировать моментальный снимок документа Firestore - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть облачная функция Firebase, которую я вызываю прямо из моего приложения .Эта облачная функция извлекает коллекцию документов Firestore, перебирая каждый из них, а затем возвращает результат.

Мой вопрос: лучше ли сохранить результаты этой выборки / получения в памяти (на сервере узла)?, обновляется с .onSnapshot?Кажется, это повысит производительность, поскольку моей облачной функции не нужно будет ждать ответа Firestore (она уже будет иметь коллекцию в памяти).Как бы я это сделал?Просто, как заполнение глобальной переменной?Как сделать .onSnaphot слушатель в реальном времени с облачными функциями?

1 Ответ

0 голосов
/ 13 сентября 2018

это может зависеть от того, насколько велики эти снимки и сколько их может быть кэшировано ...

, потому что это диск RAM, и без ведения домашнего хозяйства он может работать только в течение ограниченного времени.

Всегда удалять временные файлы

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

Источник: Облачные функции - Советы и рекомендации .

Там не сказано, каким именно будет жесткое ограничение - и кэширование в другом месте может не так сильно улучшить время доступа. он говорит 2048mb за функцию, по умолчанию - в то время как можно повысить квоты с помощью IAM & admin .все зависит от того, можно ли повысить квоту на функцию для обработки кэша.

Вот пример для события .onShapshot():

// for a single document:
var doc = db.collection('cities').doc('SF');

// this also works for multiple documents:
// var docs = db.collection('cities').where('state', '==', 'CA');

var observer = doc.onSnapshot(docSnapshot => {
 console.log(`Received doc snapshot: ${docSnapshot}`);
}, err => {
  console.log(`Encountered error: ${err}`);
});

// unsubscribe, to stop listening for changes:
var unsub = db.collection('cities').onSnapshot(() => {});
unsub();

Источник: Получитьобновления в реальном времени с Cloud Firestore .

Cloud Firestore Trigger может быть другой вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...