Я попытался сделать модель подписчиков и последователей подобной этой. поэтому у каждого пользователя будет подпоследовательность подписчиков и подписчиков
Я сохраняю только минимальные данные в документе в следующем подколлекции, такие как путь к изображению профиля, uid и полное имя
но проблема в этой модели заключается в том, что когда пользователь меняет свое изображение профиля или отображаемое имя в родительской коллекции 'users', то имя и изображение профиля в следующей подколлекции подписчика не обновляются.
, поэтому я думаю, что мне нужно использовать функцию вызываемого облака, чтобы решить эту проблему, чтобы обновить все документы в следующей подколлекции
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 документов. и также кажется, что контроль находится у пользователя, потому что если они обновляют данные 5 раз в 1 минуту, то мне нужно прочитать 50 000 документов и обновить 50 000 документов.
Мне также необходимо обновить отображаемое имя и путь к изображению профиля, потому что документы в следующем подколлекции будут отображаться в режиме вторичной переработки (Android) и в представлении таблицы (iOS)
Я не знаю, я новичок в Firestore и в базе данных SQL, это обычный способ или есть лучший способ решить эту проблему?