javascript - Firestore 突然出现巨大的触发延迟

标签 javascript firebase google-cloud-firestore google-cloud-functions

我们在 Firestore 上运行一个应用程序并得到一个简单的触发器,当订单的详细信息被创建或更新时,它的一些信息应该在父订单集合中重写。
这个函数有以下代码

export const updateOrderDetails = functions
  .region(FUNCTION_REGION)
  .firestore.document("orders/{orderId}/details/pickupAndDropoff")
  .onWrite(async (change, context) => {
    return await admin
      .firestore()
      .collection("orders")
      .doc(context.params.orderId)
      .set({ pickupAndDropoff: change.after.data() }, { merge: true });
  });
它以前工作得很好,但现在随机大约有三分之一的执行被延迟。有时几分钟。在 Cloud Function 日志中,我们看到正常执行时间 <200 毫秒,因此触发器似乎在巨大的停顿后运行。
更糟糕的是我们的change.after.data()是未定义的,但我们从不删除任何东西——它只是更新和创建。
它工作正常,自上周以来我们没有改变任何东西,但现在它开始出现这种意想不到的延迟。我们还检查了 firebase 状态,但 firebase 功能服务没有故障。这可能是什么原因?

最佳答案

问题可能是由于单调递增的 订单号 作为此处传递的参数:

...
.collection("orders")
  .doc(context.params.orderId)
...
如果您可以检查一次 订单号 通过这里是随着每个请求单调增加?它可以导致热点 影响延迟 .
解释一下,我认为写入速率必须在不同的日期和时间发生变化——随着使用应用程序的用户流量或负载测试请求发生变化——这会产生意想不到的行为。在 低写入率 ,请求大部分时间都按预期工作。在 高写入率 ,请求在firestore中面临热点情况,如firestore文档中所述,导致延迟(延迟问题)。
Here是 Firestore 最佳实践文档的相关链接。

关于javascript - Firestore 突然出现巨大的触发延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68850609/

相关文章:

swift - 后台模式 firebase 快速获取数据

angular - Firebase Firestore get() 不工作

javascript - 如何在Firestore中不断地将对象添加到嵌套集合中

javascript - 将谷歌表格中的单选按钮填充到 HTML 中

javascript - 如何使用 Firebase 身份验证获取用户名以外的用户信息

firebase - 使用 Python admin SDK 列出所有 Firestore 集合

node.js - 如何在 Cloud Functions Firestore 中处理读取和写入

javascript - jqueryui 在开始事件之前可排序

javascript - 我怎样才能选择一个父元素,所有不是第一个的子 div,以及 parent 和他们的 child 的 sibling

firebase - Flutter Provider 仅在热重载后显示结果