@Stricker

Нужно ли кешировать данные в Redis из MongoDB?

Приветствую. Такая задача - есть у нас в MongoDB коллекция Rooms. В комнате у нас есть id участников этой комнаты, но т.к. SocketIO не позволяет создавать с определенным ID соединение, то приходится в Redis хранить user_id => socket_id.
При каждой отправке сообщения в какую-либо комнату, чтобы оповестить других участников, нужно считывать из Rooms id пользователей, искать их socket_id в Redis и по нему рассылать. Т.е. постоянное считывание данных с MongoDB.
Выход вижу такой: когда пользователь пишет в какую-либо комнату - мы считываем данные из MongoDB id_room clients и заносим их в Redis (Чтобы не хранить там эту комнату постоянно, наверное надо будет задавать lifetime этой записи с момента последнего сообщения туда) И при каждом следующем проверять создана ли эта комната уже в Redis и если да - работать с ней. Каждая перезапись каких-либо данных в комнате происходит сначала в MongoDB, потом перезаписывается в Redis.
Вопрос - как быть правильнее? Использовать полностью MongoDB, или же все таки Redis задействовать?
  • Вопрос задан
  • 680 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Эм... а почему в реддисе это хранить? Эффективнее прямо в основном потоке, нет? Ну да не суть.

Почему хранить айдишник сокета в монге (как и в любой другой СУБД) дурная затея вы поймете после первого ребута системы, отваливающихся соединений и т.д. То есть вам на каждый чих придется еще и базу дергать, относительно медленную к слову если сравнивать с key=>value в памяти или тем более просто мэпу в памяти.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы