Firebase:云功能,如何缓存Firestore文档快照

时间:2018-09-13 15:57:49

标签: firebase google-cloud-functions

我有一个call directly from my app的Firebase Cloud功能。该云函数获取Firestore文档的集合,在每个文档上进行迭代,然后返回结果。

我的问题是,最好将获取/获取的结果保存在内存中(在节点服务器上)并用Option Explicit Public Sub CheckColumn() Dim arr(), i As Long arr = [A1:D6].Value '<==2D array created For i = LBound(arr, 2) To UBound(arr, 2) '<== loop columns 'look in each column for more than one "B" and if found exit loop and indicate column where found If Application.Count(Application.Match(Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Index(arr, 0, i)), "B", 0)) > 1 Then Debug.Print i Exit For End If Next End Sub 刷新吗?似乎这将提高性能,因为我的云功能不必等待Firestore响应(它已经在内存中存储了集合)。我该怎么做?像填充全局变量一样简单吗?如何使用云功能.onSnapshot实时侦听器?

1 个答案:

答案 0 :(得分:2)

这可能取决于这些快照的大小以及可以缓存的快照数量...

因为它是一个RAM磁盘,并且没有内部管理,它可能只能在有限的时间内工作。

  

始终删除临时文件

     

临时目录中的本地磁盘存储是内存中的文件系统。写入的文件会消耗函数可用的内存,有时在两次调用之间仍然存在。未能明确删除这些文件可能最终导致内存不足错误和随后的冷启动。

来源:Cloud Functions - Tips & Tricks

这里没有告诉我们,硬限制到底是什么-缓存在其他地方可能不会大大改善访问时间。默认情况下,每个功能it says 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();

来源:Get realtime updates with Cloud Firestore

Cloud Firestore Triggers可能是另一种选择。