【问题标题】:Effeciently update data in firestore flutter and prevent many writes有效更新 Firestore Flutter 中的数据并防止多次写入
【发布时间】:2020-11-03 05:55:52
【问题描述】:

我想防止将尽可能多的数据写入 Firestore 并使其尽可能高效。用户可以编辑由三个部分组成的个人资料。我目前的方法是,firestore 更新存储在一种更新所有部分的方法中,即使只更新了一个部分。

我希望这样,如果用户只编辑一个部分,那么它只会在 firestore 中更新。

我的代码

    await firestoreInstance
        .collection("users")
        .document(firebaseUser.uid)
        .updateData({
      "images": _imagesUrl,
      "name": firstNameController.text,
      "biography": biographyController.text,
    });

【问题讨论】:

  • 我完全不清楚您要在这里优化什么。
  • 据我了解,firestore 文档中更新的每个数据都会占用写入成本。所以我试图阻止更新所有三个数据字段,即使假设用户没有编辑要更新的名称数据字段

标签: database firebase flutter dart google-cloud-firestore


【解决方案1】:

这里的问题是我们无法知道任何这些字段的当前值。

如果您知道当前值,则可以比较当前值和新值,如果它们不一样,则仅将其发送到数据库。

如果您不知道当前值,那么加载当前值可能比简单地将所有三个字段都发送到数据库成本更高。

原因是 Firebase 收费(在这种情况下):

  • 文档写入 - 您修改的每个文档都会产生成本,但该成本并不取决于您在该文档中更新的数据量
  • 文档读取
  • 客户端读取数据的带宽

因此,Firestore 不会对您发送到数据库的数据收取带宽费用。因此,虽然只发送修改后的字段可以节省带宽,但在这方面并不会节省 Firebase 成本,而必须阅读文档以确定修改了哪些字段肯定会花费更多。

【讨论】:

  • 是否有消息来源确认只有具有许多字段的文档才等于一个成本,而不是每个字段的成本也同样适用于读取。我只使用 firebase 存储来存储图像和 firestore 的数据
  • 如果您查看我在哪里工作,您会发现我可能有资格作为相关信息的可靠来源。 ;-) 而且:它被称为 document write 费用是有原因的:这是每次服务器为您写入文档时的费用,这发生在单个 updateData 调用中你的代码sn-p。如果您更确信这是真的,请尝试一下 - 因为它很容易验证。
  • 啊,我没看到。这对于 firebase 存储也是一样还是只是 firestore?
  • 这两个产品是完全独立的,所以以上仅适用于 Firestore。如果您想了解有关 Cloud Storage 收费的更多信息,请查看定价页面,了解它如何适用于您的用例,然后进行一些实验来验证您的假设。如果您看到意外的结果并且无法通过搜索找到解释,我建议您发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2020-06-27
  • 2021-09-06
  • 2021-02-03
  • 2022-11-17
相关资源
最近更新 更多