Структурирование моих данных Firebase рекомендованным способом, но не знаю, как их использовать - PullRequest
0 голосов
/ 11 сентября 2018

Я создаю приложение чата в стиле тинтер 1 к 1 и использую базу данных Firebase для бэкэнда.Я разработал схему базы данных, и все работает хорошо, но я не могу не чувствовать, что я делаю что-то не так.Моя база данных выглядит так

users : {
    user1uid: {
        username: 'User 1',
        gender: 'm',
        profilePic: 'firebase.storage.link'
        conversations: {
          convo1id: true
        }
    },
    user2uid: {
      username: 'User 2',
      gender: 'f',
      profilePic: 'firebase.storage.link'
      conversations: {
         convo1id: true
      }
    }
}

conversations: {
  convo1id: {
    requested: 'user1uid',
    accepted: 'user2uid',
    created: firebase.database.ServerValue.TIMESTAMP
  }
},

messages: {
  convo1id: {
    m1: {
      author: 'user1uid',
      created: firebase.database.ServerValue.TIMESTAMP,
      message: 'Hello'
    },
    m2: {
      author: 'user2uid',
      created: firebase.database.ServerValue.TIMESTAMP,
      message: 'Hi there'
    }
  }
}

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

Я борюсь с тем, как эффективно вернуть свои данные обратно.

Если я хочу получить все свои разговоры и поместить их в список чатов в моем приложенииЯ бы разместил их в своем пользовательском узле, а затем мог бы перебирать каждый из них и получать данные из firebase.Однако, если я скажу 25 разных разговоров для каждого пользователя, это будет означать, что ему нужно сделать 25 разных запросов для получения данных о комнате, а затем еще 25 запросов на профиль пользователя.

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

Извините, это немного затянуто, я просто очень борюсь с этим

Редактировать: это был бы лучший способ структурирования данных.

conversations: {
    convo1id: {
        created: TIMESTAMP,
        members: {
            requested: {
                id: 4083und98h9ns98jw9wj,
                username: 'User 1',
                profilepic: 'storagelink'
            },
            accepted: {
                id: 4083und98h9ns98jw9wj,
                username: 'User 1',
                profilepic: 'storagelink'
            }
        }
    },

    convo2id: {
        created: TIMESTAMP,
        members: {
            requested: {
                id: 39j3d8jd9dj9dkd9kd,
                username: 'User 3',
                profilepic: 'storagelink'
            },
            accepted: {
                id: 4083und98h9ns98jw9wj,
                username: 'User 1',
                profilepic: 'storagelink'
            }
        }
    }
}

Таким образом, когда я получаю свои разговоры, я, по крайней мере, получаю полную информацию о других пользователях, однако, если пользователь изменит свой профиль, он не будет отображаться.

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

Лучше ли сделать это таким образом и сделать один запрос или сделать много маленьких запросов?

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