Kulaxyz
@Kulaxyz
Могу лучше

Как в мессенджерах реализовано подключение контактов?

Пишу API для нового мессенджера, остановился на моменте подключение контактов. Не совсем понимаю, как реализовать сами чаты теперь.
Без контактов всё просто: есть таблицы users, chats, participants, messages. И когда пользователь просматривает сам чат, через таблицу participants достаю объект пользователя. И уже отображаю указанные юзером имя, ник и аватар. Теперь встал вопрос, что делать с contacts.
Изложу свои предположения:
Создать таблицу contacts, где сохранять owner_id, и name, surname, phone. Затем когда отдаю на фронт объект user, добавлять в него коллекцию contacts (то есть все записи из таблицы contacts WHERE owner_id={user->id}). И уже на фронте, разработчику нужно будет сравнивать chat.participants с каждой записью из user.contacts и при совпадении свойства phone выводить имя и тд. из соответсвующего объекта из contacts.
Мне такая логика кажется слишком усложнённой. Подскажите более удобный вариант интеграции контактов. Может кто-то знает, как это реализовано в популярных мессенджерах, вроде Telegram, WhatsApp?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваша логика вполне правильная: отдельно присылать сообщения чата с айдишниками, отдельно справочники айдишников юзеров и их контактных данных. Лучше переложить задачу матчинга участников чата и их профилей на клиента, который сможет хранить эту таблицу контактов у себя в локальной базе (localstorage) и периодически синхронизировать. Само собой, в первый раз синк займёт больше времени.

- Чаще всего популярные мессенджеры сразу создают юзера для каждого человека из контактов. И да, хранят личную таблицу имён контактов для каждого пользователя. Например, так сделано в Skype и Whatsapp. В Телеграме не создают юзера, пока он сам не зарегается, но там и не дают возможности "переименовывать" свои контакты — как пользователь себя назвал, так и будет отображаться.
- Для таких задач используются NoSQL базы, что ускоряет запросы и убирает необходимость кэширования.
- Базы данных шардируются по user_id, чтобы получать все данные юзера максимально быстро, включая его контакты, чаты и тп.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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