【问题标题】:Cloud Firestore database structure for social media社交媒体的 Cloud Firestore 数据库结构
【发布时间】:2023-03-26 06:22:01
【问题描述】:

我正在尝试为一个简单的社交媒体概念创建一个简单的 Cloud Firestore 数据库结构。

每个用户最多可以拥有一个可以随时更新的帖子(“最喜欢”的帖子除外)。用户“最喜欢”的帖子版本会保存为单独的帖子,只要用户在当前版本的帖子中收到的点赞数超过最喜欢的版本,就可以随时更新。

我想出了一个结构,但我对 NoSQL 数据库非常缺乏经验。这个结构看起来会支持我的系统吗?还有这些明显的问题会阻止重要的查询吗?

USERS (collection)
    DocumentID - userId gathered from Authentication uid
        firstName: String
        lastName:  String
        username:  String
        birthdate: Timestamp
        accountCreationDate: Timestamp
        post: postId (when user is created, create a default post document for them since there is only one post per user)
        bestPost:    postId
        FRIENDS (subcollection)
            DocumentID - userId of the friend
                username:  String

POSTS (collection)
    DocumentID - postId randomly generated
        authorUserId:   String
        authorUsername: String
        text:  String   
        imagePath: String
        location:  String
        likesCount: Number
        LIKES (subcollection)
            DocumentID - userID of the liker
                username:  String

friends 子集合存储了朋友的用户名,因此通过用户名创建该用户的朋友列表很容易。我假设我可以通过将朋友的 documentID 与 users 中的 documentID 进行匹配来获取该用户朋友的更多信息。

类似的喜欢子集合

【问题讨论】:

    标签: firebase firebase-realtime-database nosql google-cloud-firestore


    【解决方案1】:

    结构看起来不错。我会提供一些关于在 Cloud Firestore 中执行此操作的 cmets。

    更新 likeCount

    如果帖子喜欢的频率可能不高(每秒少于一个),您可以创建一个云函数(由likes 子集合.onCreate 触发),它使用事务更新likesCount。确保用户无法在您的规则范围内编辑likesCount

    允许用户编辑最喜欢的帖子

    您需要制定规则来强制执行此操作。这可能会稍微复杂一些,并且可能需要一些战略思考(除非您已经有了解决方案)。

    【讨论】:

    • 其实我忘了说,用户应该不能编辑最喜欢的帖子,只能查看它。我对规则有点不熟悉,所以我将不得不再研究一下。否则这个用例的结构看起来不错?
    • 如果您阻止用户编辑超过 n 个赞的文档,或者如果他们超过 n 秒没有更新文档,则创建规则可能会更容易。没有规则会从列表中获取最大数量。您的想法意味着,任何以前只能查看的帖子,一旦另一个帖子通过了类似的值,就可以编辑。
    • @JasonBerryman 你的回答是:“如果帖子点赞可能很少(每秒不到一个),......”请问这是什么原因?
    猜你喜欢
    • 2020-01-22
    • 2019-04-20
    • 2021-02-12
    • 2019-10-06
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2019-09-18
    相关资源
    最近更新 更多