【问题标题】:Best method to upload data to multiple documents in Firestore将数据上传到 Firestore 中的多个文档的最佳方法
【发布时间】:2021-11-20 15:09:06
【问题描述】:

我目前正在开发一个使用 Firebase 的 Cloud Firestore 的 iOS 应用。

我想知道:同时(或几乎同时)将一些数据上传到多个 Firestore 文档的最佳方式(成本、效率和安全性)是什么?

* 我必须上传的数据包括以下内容:有两个用户(用户 A 是当前使用该应用程序的用户,用户 B 是用户 A 当前正在查看其个人资料的用户)。如果用户 A 保存用户 B 的个人资料,我必须将用户 B 的 UID 上传到用户 A 的 Firestore 文档。然后,我必须在用户 A 的 Firestore 文档中增加一个计数器。最后,我必须将用户 A 的 UID 添加到用户 B 的 Firestore 文档中。 - 请注意,对于 Firestore 文档,我的意思是文档字段或文档子集合。

选择是:

  • 从客户端上传所有内容:在成本方面似乎是最好的方法:它不需要额外的 Cloud Functions 使用。我会创建一个批处理操作并从那里上传所有数据*。缺点是客户端必须能够访问多个不相关的集合和文档。

  • 从客户端更新一个文档,然后从 Cloud Functions 更新其他所有内容:这种方法是效率和安全方面最好的方法;客户端仅将数据上传到用户的文档*,而不会访问不相关的集合和文档。此外,客户端只需上传之前方法中必须上传的一小部分数据,从而节省带宽和蜂窝数据/WiFi 使用量。缺点是 Cloud Functions 的使用量会增加,最终导致成本增加。

  • 从客户端更新一个文档,从客户端更新 counter*,然后从 Cloud Functions 更新其他所有内容:这种方法在某种程度上是前两种方法的混合,因为我认为更新来自客户端的计数器更安全(Cloud Functions 的.onWrite 触发器可能会发生两次或更多次,从而多次增加计数器?)。

我的第一个想法是使用方法 2,因为它更加安全和高效,但我也希望在“浪费”太多时间编码错误之前获得其他人的建议。

我希望这不是任何形式的重复,因为我找不到任何可以足够具体地回答我的问题的内容。

任何建议将不胜感激。谢谢。

【问题讨论】:

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


    【解决方案1】:

    我会遵循第三种方法:从客户端更新当前用户集合(saved_profiles 集合和 counter 字段),这是私有的,只能由该用户访问(配置Firestore Security Rules)并使用触发的云函数更新其他用户的集合(users_who_saved_my_profile)。由于这些操作不受安全规则控制,它们可以访问数据库的任何部分。这样就不会向任何用户授予不必要的权限。

    【讨论】:

    • 太棒了!谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2012-08-30
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2018-11-23
    • 2018-04-05
    • 2010-09-22
    相关资源
    最近更新 更多