首页 > 解决方案 > 在云功能中进行多个 Firestore 查询以避免多个 RTT?

问题描述

介绍

在我的用例中,我有一个呈现 8 个项目列表的屏幕。每个列表,对 Firestore 进行异步查询(因为它们需要来自不同集合的文档......)。我已经分析了这 8 个查询的执行时间,总共(我等待从这 8 个查询中获取所有数据的时间),我得到了 3 到 6 秒:

执行时间:5539.793ms

对于每个查询,我要检索大约 30 个文档。以下是它们的一般外观:

const query = playersRef
    .where("random", ">=", randomId)
    .where("level", "==", currentUserLevel)
    .where("location.country", "==", currentUserCountry)
    .orderBy("random")
    .limit(30);

问题

我有点困惑。我知道发出 8 个请求会导致 8 个 RTT,但我不知道这段时间大部分是由与数据中心的距离引起的,还是由查询本身引起的,没有考虑到这个距离(从西班牙到爱荷华州)。

在单个云函数(托管在爱荷华州,一次返回所有内容)中实现所有这些查询这一事实能否大大减少执行时间?

谢谢你。

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


很难说,我同意 Doug 在评论中所说的,你可以获得有意义的答案的最好方法是自己进行基准测试,但是,我写这个答案是为了你应该考虑的一些事情:

  • 由于您的应用程序、云功能和您的 Firestore 之间的物理距离导致的延迟:一般来说,距离越小,您的应用程序越快,这在路径中是正确的you -> cloud functioncloud function -> cloud firestore我建议您使用该区域europe-west2(London),因为它是您附近的区域同时提供 Firestore 和云功能,后者以 1 级定价。我还发现这个网站可以测量你和 GCP 中区域之间的 ping,不是官方的,但可能很有用。

  • 对 firestore 的异步调用(如果您还没有使用它):对每个查询使用异步调用,如果您继续使用单个函数,那么您不必等待每个查询完成后再开始下一个查询,优化您的函数获取所有文档所需的时间。

  • 使用文档的性能提示来提高代码的性能


推荐阅读