【问题标题】:what is the best way to create followers and following model in Firestore?在 Firestore 中创建追随者和追随模型的最佳方法是什么?
【发布时间】:2020-05-14 10:36:35
【问题描述】:

我尝试过制作像这样的追随者和追随者模型。所以每个用户都会有关注和关注者子集合

我只在以下子集合中保存文档中的最少数据,例如头像路径,uid和全名

但这个模型的问题是,当用户更改他们的头像或他们在“用户”父集合中的显示名称时,关注者的以下子集合中的名称和头像不会更新。

所以我想我需要使用可调用的云函数来解决这个问题,以更新以下子集合中的所有文档

exports.callableUpdateUserDataInOtherDocuments = functions.https.onCall(async (data, context) => {



    try {

        const verifiedUserSnapshot = await db.doc(`users/${context.auth.uid}`).get()

        const userData = verifiedUserSnapshot.data()


        // update display name in following subcollection of the followers

        const changeUserDataInFollowersPromises = []
        const followersSnapshot = await db.collection(`users/${context.auth.uid}/followers`).get()

        followersSnapshot.forEach( doc => {

            const followerID = doc.data().uid
            const p = db.doc(`users/${followerID}/following/${userData.uid}`).update({
                fullname: userData.fullname,
                profilePicturePath: userData.profilePicturePath
            })

            changeUserDataInFollowersPromises.push(p)
        })

        return Promise.all(changeUserDataInFollowersPromises)

    } catch(error) {
        console.log(error)
        return null
    }





})

但是使用此云功能更新对我来说似乎效率不高,如果用户有 10.000 个关注者,那么我需要阅读 10.000 个文档并更新 10.000 个文档。而且似乎控制权在用户手中,因为如果他们在 1 分钟内更新数据 5 次,那么我需要阅读 50.000 个文档并更新 50.000 个文档。

我还需要更新显示名称和头像路径,因为以下子集合中的文档将显示在回收站视图(Android)和表格视图(iOS)中

我不知道,我是 Firestore 和 NoSQL 数据库的新手,这是一种常见的方法还是有更好的方法来解决这个问题?

【问题讨论】:

  • 在便利性、性能和计费之间总是需要权衡取舍。我认为你必须弄清楚你最看重什么,并做你需要做的事情,将这三个方面推向你喜欢的方向。

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


【解决方案1】:

确实,对于您的情况,在用户有很多关注者的情况下,您将需要执行大量操作。您需要平衡您对系统的思考方式,因为 Firestore 和 Cloud Functions 将能够处理和扩展性能,因此您不会遇到任何与之相关的问题。

但是,结算可能是您面临的主要问题。对于您的用例,它必须在这段时间内更新数据库。

我进行了搜索,发现以下讨论链接可能会帮助您决定您的系统及其工作方式。

【讨论】:

  • 您想一次性获取所有 10,000 个关注者的文档吗?我会亲自加载前 25 个关注者,当用户滚动超出此范围时,为他们再加载 25 个。这样,每当他们导航到关注者屏幕时,您将被收取 25 次阅读费用,并且每次他们进一步滚动时都会附加 25 次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2021-02-18
  • 2021-11-25
  • 2021-06-13
  • 2021-10-09
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多