繁体   English   中英

Firebase 数据库架构 - Snapchat 之类的

[英]Firebase Database Architecture - Snapchat like

我想用 Firebase 创建一个应用程序。

我有这个应用程序的两个主要目标:

  1. 获得朋友关系
  2. 发送图片给朋友

在我的 Firestore 数据库中,我有“用户”集合,其中用户 ID 作为文档,ID 和 email 在字段中。 (用户 > id > id、电子邮件)。 当用户注册时,我在数据库中发送信息。

        db.collection("users").document(currentUser.uid).setData([
            "id": currentUser.uid,
            "email": currentUser.email ?? ""
        ]) { err in
            if let err = err {
                print("Error writing document: \(err)")
            } else {
                print("Document successfully written!")
            }
        }

我想如果我想处理朋友关系,我必须在文档用户中添加集合(用户> id> id,email(字段)...friendsRelationship(集合)> id(用户添加为字段))。

并将其添加到其他用户文档 id 用户 (targetedUser) --> 双向。

当某个用户删除另一个用户时,我们必须从currentUser 和targetedUser 中删除friendsRelationship 集合中的id。

在 Firebase 中是否有任何其他解决方案/更好的数据库架构可用于朋友关系?

当好友关系完成后,我们要发送图片给targetedUser。

我宁愿做用户> id>图像(集合)> url,日期(字段)...或图像> id(生成)> fromUser(id),toUserId(集合)> id?

如何查询当前用户收到的所有图片? db.collection("users").document(currentUser.uid)...

这是我的 Cloud Firestore 数据库的屏幕截图: https://imgur.com/4bGJOoP

当 firstUser 向其他用户发送快照时,我不知道如何管理与此的朋友关系,并像 snapshat 一样发布。

谢谢你的建议!

我想如果我想处理朋友关系,我必须在文档用户中添加集合(用户> id> id,email(字段)...friendsRelationship(集合)> id(用户添加为字段))。

您存储用户数据的方式对我来说看起来不错。

在 Firebase 中是否有任何其他解决方案/更好的数据库架构可用于朋友关系?

关于朋友关系,还有另一种可能的解决方案,它不需要创建子集合,您可以简单地将每个朋友 id 添加到用户文档的数组中。 新架构可能如下所示:

Firestore-root
   |
   --- users
        |
        --- uid
             |
             --- email: "name@email.com"
             |
             --- id: "userId"
             |
             --- friendIds: ["friendIdOne", "friendIdTwo", "friendIdThree"]

当文档的大小未达到限制时,这才可以正常工作。 因此,在您可以将多少数据放入文档时存在一些限制。 根据有关使用和限制的官方文档:

文档的最大大小:1 MiB(1,048,576 字节)

如您所见,单个文档中的数据总量限制为 1 MiB。 当我们谈论存储文本时,您可以存储很多东西。

如果您认为文档的大小可能会超过该限制,那么您将朋友作为文档存储在单独集合中的解决方案将解决您的问题。

并将其添加到其他用户文档 id 用户 (targetedUser) --> 双向。

要建立双向关系,在上面的解决方案中,您应该简单地将friendId复制到用户的friendIds数组中,并将userId复制到朋友的friendIds数组中。

当某个用户删除另一个用户时,我们必须从currentUser 和targetedUser 中删除friendsRelationship 集合中的id。

在上面的解决方案中,您应该从friendIds数组中删除userId,并从用户的friendId数组中删除friendIds

我宁愿做用户> id>图像(集合)> url,日期(字段)...或图像> id(生成)> fromUser(id),toUserId(集合)> id?

在这种情况下,您还可以使用数组来存储图像引用。 同样,如果您认为文档的大小可能会超过该限制,则将图像作为文档存储在单独的集合中的解决方案是 go 的解决方案。

如何查询当前用户收到的所有图片? 像 db.collection("users").document(currentUser.uid)...

是的,通过获取对用户文档的引用:

db.collection("users").document(currentUser.uid)

然后读取images数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM