【问题标题】:Update Firestore document field at high frequency高频更新 Firestore 文档字段
【发布时间】:2021-09-15 13:10:19
【问题描述】:

我是 Firestore 的新手,正在开发一个使用 NodeJS 和 Firestore 作为数据库来获取和更新数据的应用程序。

Firestore 结构示例如下:

CollectionA:
    name: "name"
    id: "id"
    status: "status"

假设status 字段可以采用以下字符串值之一。
开始、进行中、待定、结束。

nameid 字段在创建时更新一次,status 字段可以多次更新(以毫秒为单位)。

我想了解以下项目:

  1. 下面的更新 sn-p 是否确保数据写入后端,然后转到下一行指令。还是只有元数据已更新,尚未写入后端数据库?
await docRef.update({
    status: "in_progress",
});
  1. 更新文档中的特定字段是否有时间限制?是指1秒内可以对特定字段进行写入的次数?

注意:我无法使用批量提交,因为我使用 status 字段作为控制信号来调用特定的代码块。

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore


    【解决方案1】:

    正如update 的文档所说,它返回:

    一旦数据成功写入后端,Promise [即] 就解决了

    由于您使用的是await,因此一旦来自update 调用的promise 解决,该语句就会完成。

    因此,如果您将其包装在异常处理程序中:

    try {
      await docRef.update({
        status: "in_progress",
      });
      // ? If you get here, the write completed on the server
    }
    catch (error) {
      // ? If you get here, the write failed
      console.error(error);
    }
    

    所有限制都记录在here。最相关的似乎是这个软限制:

    对文档的最大持续写入速率

    每秒 1 个

    将写入速率维持在每秒一次以上会增加延迟并导致争用错误。这不是硬性限制,您可以在短时间内超过限制。

    正如这所解释的,您可以在短时间内超出限制,这似乎是您的用例。

    【讨论】:

    • 嗨弗兰克,感谢您的详细解释。后续查询,因为我将特定文档字段更新为更高的速率(以毫秒为单位),如果在此短时间内任何更新/写入失败,它会引发错误吗?还是不为人知?
    • 正如文档中所说,每文档每秒 1 次写入是一个软限制,可以在短时间内超过。正如我在回答中所说,这似乎与您的用例相匹配。但是,如果您在单个文档上超过该限制更长的时间,您会在这些写入中看到争用。
    • 感谢您的帮助。这真的很有帮助。是的,正如您在我的案例中提到的那样,写入不应该失败,因为我正在写入最多 4 次写入,但在短时间内。
    • 我已经浏览了这些文件。 “可以在短时间内超过”,是否有量化?
    • 没有。如前所述,这是一个软限制;这不是编码到系统中的东西,而是在确认回写给客户端之前需要跨多个数据中心复制数据的结果。
    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2021-01-24
    相关资源
    最近更新 更多