firebase - 在 Firestore 中创建追随者和追随模型的最佳方法是什么?
问题描述
我试图制作像这样的追随者和追随者模型。所以每个用户都会有追随者和追随者子集合
我只在以下子集合中保存文档中的最少数据,例如个人资料图片路径、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 数据库的新手,这是一种常见的方法还是有更好的方法来解决这个问题?
解决方案
实际上,对于您的情况,如果用户有很多关注者,您将需要执行大量操作。您需要平衡您对系统的思考方式,因为 Firestore 和 Cloud Functions 将能够处理和扩展性能,因此您不会遇到任何与之相关的问题。
但是,计费可能是您将面临的主要问题。对于您的用例,它必须在这段时间内更新数据库。
我进行了搜索,发现以下讨论链接可能会帮助您决定您的系统及其工作方式。
推荐阅读
- angular - 无法绑定到“matDatepicker”,因为它不是“输入”的已知属性
- python - 字符串、整数和用户输入的连接问题
- react-leaflet - 使用 React useEffect hook 更改 tileLayer
- linux - 在 tar 中列出特定目录的内容
- react-native - 为什么我的 Expo(React Native) 检测不到我工作目录中的文件
- python - Python:索引 350 处不支持的格式字符 ''' (0x27)
- c++ - C ++中对象的不同输入格式
- python-3.x - 从 txt 文件中获取平均值的问题
- c# - WM_LBUTTONDOWN 消息直到手指从屏幕上抬起才到达
- spring-batch - 使用默认隔离级别同时创建作业实例会导致 MySQL 死锁?