В Firebase Структура ваших данных раздел, рассказывается о нижеследующем примере, в котором сообщения чата хранятся под идентификаторами чата.Пожарная битва прямого ребенка против вложенных детей с изменениями событий
При рассмотрении этого конкретного сценария, мы чат one
под messages
и все сообщения хранятся в том, что, как m1
, m2
и т.д.
Теперь, когда пользователь находится на домашнем экране, он должен перечислить все разговоры, что он/она входит в состав. И в любом из них, новые сообщения приходят, что пользовательский интерфейс будет обновляться, чтобы отображать новые сообщения. Но для этого нам нужно связать слушателей с каждым разговором, как: onChildAdded
для one
, onChildAdded
для two
и так далее.
Как я могу прослушать onChildAdded
для обсуждения? Установка onChildUpdate
на messages
отправит DataSnapshot, включая все разговоры. Если есть огромные записи, это было бы невозможно. И найти, какой ребенок всего снимка на самом деле обновляется, - это боль.
Если я предпочитаю хранить сообщения непосредственно под полем messages
, а каждое сообщение содержит поле conversationId
, чтобы проверить, где он находится. Создав indexOn
на conversationId
, я могу следить за каждым добавленным или обновленным ребенком, установив прослушиватель значений для messages
. Я думаю, что может возникнуть проблема с производительностью с очень большой базой данных.
Необходимость обновления любого ребенка заключается в том, что мне нужно сделать некоторые вычисления для статистики сообщений.
Возможно ли достичь такого ситуационного? Мне нужно следить за синхронизированными данными для каждого разговора, независимо от того, где пользователь находится в приложении (настройка слушателя в классе Application может быть хорошим вариантом для этого) для обновления нескольких значений в другом месте.
Данные, которые я имею в виду это:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
Итак, вы нашли решение проблемы? – user2924714
@ user2924714 Nop .. Я пытаюсь проверить и обновить данные, когда пользователь входит в один чат. Если пользователь выходит из чата, прекратите прослушивание изменений на этом узле. Ничего больше. – kirtan403