Каков наилучший способ создания последователей и следующей модели в Firestore? - PullRequest
0 голосов
/ 29 января 2020

Я попытался сделать модель подписчиков и последователей подобной этой. поэтому у каждого пользователя будет подпоследовательность подписчиков и подписчиков

enter image description here

Я сохраняю только минимальные данные в документе в следующем подколлекции, такие как путь к изображению профиля, uid и полное имя

enter image description here

но проблема в этой модели заключается в том, что когда пользователь меняет свое изображение профиля или отображаемое имя в родительской коллекции '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, это обычный способ или есть лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 29 января 2020

Действительно, для вашего случая вам потребуется выполнить много операций в тех случаях, когда у пользователя много последователей. Вам нужно будет сбалансировать способ мышления вашей системы, поскольку Firestore и Cloud Functions смогут обрабатывать и масштабировать производительность, поэтому у вас не возникнет никаких проблем, связанных с ней.

Однако биллинг может быть главной проблемой, с которой вы столкнетесь. Для вашего случая использования необходимо, чтобы он обновлял базу данных за это время.

Я выполнил поиск и обнаружил ссылки ниже, которые могут помочь вам определиться с вашей системой и с тем, как она будет работать.

Дайте мне знать, помогло ли это вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...