将数据上传到 Firestore 中的多个文档的最佳方法
Best method to upload data to multiple documents in Firestore
我目前正在开发一个 iOS 应用程序,该应用程序使用来自 Firebase 的 Cloud Firestore。
我想知道:将一些数据同时(或几乎同时)上传到多个 Firestore 文档的最佳方式(成本、效率和安全方面)是什么?
* 我必须上传的数据包括以下内容:有两个用户(用户 A 是当前正在使用该应用程序的用户,用户 B 是用户 A 当前正在查看其个人资料的用户)。如果用户 A 保存了用户 B 的个人资料,我必须将用户 B 的 UID 上传到用户 A 的 Firestore 文档。然后,我必须在用户 A 的 Firestore 文档中增加一个计数器。最后,我必须将用户 A 的 UID 添加到用户 B 的 Firestore 文档中。 - 请注意,对于 Firestore 文档,我指的是文档字段或文档子集合。
选项是:
从客户端上传所有内容:似乎是最好的方法,成本方面:它不需要额外的 Cloud Functions 使用。我会创建一个批处理操作并从那里上传所有数据*。缺点是客户端必须能够访问多个不相关的集合和文档。
从客户端更新一个文档,然后从 Cloud Functions 更新所有其他文档:这种方法是效率和安全方面最好的一种;客户端仅将数据上传到用户的文档*,而不会访问无关的集合和文档。此外,客户端只需上传其在先前方法中必须上传的数据的一小部分,从而节省带宽和蜂窝数据/WiFi 使用。缺点是云函数的使用会增加,最终导致成本增加。
从客户端更新一个文档,从客户端更新计数器*,然后从 Cloud Functions 更新所有其他内容:这种方法有点混合了前两个,因为我认为从客户端更新计数器更安全(Cloud Functions 的 .onWrite
触发器可能会发生两次或更多次,多次增加计数器?)。
我的第一个想法是使用方法 2,因为它更安全、更高效,但我也想听听别人的建议,以免“浪费”太多时间编写错误代码。
我希望这不是任何重复,因为我找不到足够具体地回答我的问题的任何内容。
如有任何建议,我们将不胜感激。谢谢。
我会遵循第三种方法:从客户端更新当前用户集合(saved_profiles集合和counter 字段),它们是私有的并且只能由该用户访问(配置 Firestore Security Rules)并更新其他用户的集合(users_who_saved_my_profile) 具有触发的云功能。由于这些操作不受安全规则控制,它们可以访问数据库的任何部分。这样就不会向任何用户授予不必要的权限。
我目前正在开发一个 iOS 应用程序,该应用程序使用来自 Firebase 的 Cloud Firestore。
我想知道:将一些数据同时(或几乎同时)上传到多个 Firestore 文档的最佳方式(成本、效率和安全方面)是什么?
* 我必须上传的数据包括以下内容:有两个用户(用户 A 是当前正在使用该应用程序的用户,用户 B 是用户 A 当前正在查看其个人资料的用户)。如果用户 A 保存了用户 B 的个人资料,我必须将用户 B 的 UID 上传到用户 A 的 Firestore 文档。然后,我必须在用户 A 的 Firestore 文档中增加一个计数器。最后,我必须将用户 A 的 UID 添加到用户 B 的 Firestore 文档中。 - 请注意,对于 Firestore 文档,我指的是文档字段或文档子集合。
选项是:
从客户端上传所有内容:似乎是最好的方法,成本方面:它不需要额外的 Cloud Functions 使用。我会创建一个批处理操作并从那里上传所有数据*。缺点是客户端必须能够访问多个不相关的集合和文档。
从客户端更新一个文档,然后从 Cloud Functions 更新所有其他文档:这种方法是效率和安全方面最好的一种;客户端仅将数据上传到用户的文档*,而不会访问无关的集合和文档。此外,客户端只需上传其在先前方法中必须上传的数据的一小部分,从而节省带宽和蜂窝数据/WiFi 使用。缺点是云函数的使用会增加,最终导致成本增加。
从客户端更新一个文档,从客户端更新计数器*,然后从 Cloud Functions 更新所有其他内容:这种方法有点混合了前两个,因为我认为从客户端更新计数器更安全(Cloud Functions 的
.onWrite
触发器可能会发生两次或更多次,多次增加计数器?)。
我的第一个想法是使用方法 2,因为它更安全、更高效,但我也想听听别人的建议,以免“浪费”太多时间编写错误代码。
我希望这不是任何重复,因为我找不到足够具体地回答我的问题的任何内容。
如有任何建议,我们将不胜感激。谢谢。
我会遵循第三种方法:从客户端更新当前用户集合(saved_profiles集合和counter 字段),它们是私有的并且只能由该用户访问(配置 Firestore Security Rules)并更新其他用户的集合(users_who_saved_my_profile) 具有触发的云功能。由于这些操作不受安全规则控制,它们可以访问数据库的任何部分。这样就不会向任何用户授予不必要的权限。