Должен ли я иметь неограниченное количество ListenerRegistrations для каждой комнаты чата или просто иметь два ListenerRegistration и делать избыточные записи в базу данных? - PullRequest
0 голосов
/ 01 апреля 2019

Я делаю приложение для чата с использованием firebase, и у меня может быть два «ListenerRegistration».Тот, который слушает

/chats/{userid}/allChatroomsLastMessages

, и тот, кто слушает текущую комнату чата, в которой я нахожусь.

/chats/{chatroomId}/messages

и записываю те же данные «последнего сообщения» избыточно для каждого пользователя

/chats/{userid}/allChatroomsLastMessages  

или, в качестве альтернативы, я могу иметь только одну чат-комнату и хранить все свои данные один раз в

/chats/{chatroomId}/messages/ 

, но тогда последствием будет то, что для каждой «комнаты чата» в пользовательском интерфейсе,Мне нужно было бы на клиенте установить ListenerRegistration для каждой комнаты (даже если я не в комнате, чтобы обновить то, что было последним сообщением, отправленным в чат)

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

Другой метод выигрывает, потому что он сохраняет данные один раз для всех пользователей в чате.Тем не менее, я обеспокоен тем, что если для пользователя имеется 50 комнат чата, то количество экземпляров ListenerRegistration снизит производительность из-за опроса сокетов или любого другогоИспользуется (я никогда не использовал ListenerRegistration, и я не знаю, как лучше было бы их принимать)

Технически количество экземпляров ListenerRegistration может быть неограниченным (вы всегда можете открыть новую комнату чата).Однако я ожидаю, что в 65 комнатах чата.

Я еще ничего не реализовал, но вижу ожидаемую проблему масштабируемости

messageListener = reference?.addSnapshotListener
    { querySnapshot, error in
        guard let snapshot = querySnapshot
          else
        {

Ожидаемый результат - минимизация хранения данных и поддержание производительности приложения.

...