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