【问题标题】:Firebase Database Architecture - Snapchat likeFirebase 数据库架构 - Snapchat 之类的
【发布时间】:2023-03-04 01:13:01
【问题描述】:

我想用 Firebase 创建一个应用。

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

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

在我的 Firestore 数据库中,我有“用户”集合,其中用户 ID 作为文档,ID 和电子邮件在字段中。 (用户 > 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,电子邮件(字段)...friendsRelationship(集合)> id(用户添加为字段)) .

并在其他用户文档中添加此id用户(targetedUser)-->双向。

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

还有其他解决方案/更好的数据库架构可用于 Firebase 中的朋友关系吗?

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

我宁愿做 users > id > images (collection) > url, date (fields)... or images > id (generated) > fromUser (id), toUserId (collection) > id ?

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

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

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

感谢您的建议!

【问题讨论】:

  • 不要描述数据库的外观,而是添加它的屏幕截图。还请说明您打算执行哪些查询。
  • @AlexMamo 感谢您的回复。我已经用截图编辑了我的帖子!

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

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

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

还有其他解决方案/更好的数据库架构可用于 Firebase 中的朋友关系吗?

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

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

只有如果文档的大小不会达到限制,这将完全正常。因此,在您可以将多少数据放入文档时存在一些限制。根据usage and limits的官方文档:

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

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

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

并在其他用户文档中添加这个id用户(targetedUser)-->双向。

要建立双向关系,在上述解决方案中,您只需将friendId 复制到用户的friendIds 数组中,并将userId 复制到朋友的friendIds 数组中。

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

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

我宁愿做 users > id > images (collection) > url, date (fields)... or images > id (generated) > fromUser (id), toUserId (collection) > id ?

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

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

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

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

然后读取images 数组。

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2020-09-13
    • 2014-08-15
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多