【问题标题】:Writing to same document in a WriteBatch causes multiple writes in Firebase?在 WriteBatch 中写入同一文档会导致 Firebase 中的多次写入?
【发布时间】:2020-01-14 18:58:19
【问题描述】:

我想知道,在 Firebase 中,如果我对同一个文档批量执行多次更新,会导致单次写入还是多次写入?

例如,在这个示例代码中(在 javascript 中):

const doc = getDocumentReference();
batch.update(doc, { foo: "a" });
batch.update(doc, { bar: "b" });
batch.commit();

是对文档进行一次写入来更新所有内容,还是会有两次写入,每次更新一次?

如果两个操作之一是“设置”而不是“更新”,答案是否会改变?

提前致谢

【问题讨论】:

    标签: javascript firebase google-cloud-functions


    【解决方案1】:

    我没有找到任何关于写入计数的参考资料,但我发现它很有趣,并试图自己弄清楚。我准备了测试并查看了 Google Cloud Platform 上的 Metrics explorer(Firebase 数据库也在那里可见),它可以显示 writes_count。

    我准备了以下代码:

    一次添加整个对象:

    let test = db.collection("test").doc("sdaasd3")
    test.set({})
    
    let update = {}
    for (let i = 0; i < 100; i++) {
        update[i.toString()] = i;
    }
    test.update(update);
    

    然后更新100次:

    let test = db.collection("test").doc("sdaasd2")
    test.set({})
    
    for (let i = 0; i < 100; i++) {
        let update = {}
        update[i.toString()] = i;
        test.update(update)
    }
    

    并通过批量提交:

    let test = db.collection("test").doc("sdaasd")
    test.set({})
    const batch = db.batch();
    
    
    for (let i = 0; i < 100; i++) {
        let update = {}
        update[i.toString()] = i;
        batch.update(test, update)
    }
    batch.commit();
    

    我执行了它们,似乎批量提交与一次更新整个对象完全相同,并且需要 2 次写入(我认为设置了一个,用于在 Firebase 中清除对象)。更新 100 次需要 101 次写入。如下所示(按照帖子 12:57,01:01,01:07 中的顺序执行)

    我不确定这个测试是否足够可靠以满足您的需求,但您可以使用 GCP 上的 Matrix explorer 自行分析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多