iamnikas
@iamnikas
Веб-архитектор, UI-дизайнер, веб-разработчик

Как правильно хранить личные сообщения бесед/диалогов в MySQL используя node.js?

Доброго времени суток! Был сделан чат на node JS с использованием socket.io. База данных используется MySQL. Как правильно хранить переписку и диалоги:
1. Между пользователями
2. Общие диалоги пользователей(комнаты с закрытыми диалогами)
3. (Самое важное!): Общий чат.
  • Вопрос задан
  • 2464 просмотра
Решения вопроса 1
@zhainar
Гуглю за вас
я б сделал три таблицы:
1. Диалоги Conversations(id, name, type, status), где type - открытый чат, закрытый чат, общий чат, status - диалог открыт, диалог завершен, диалог помещен в архив.
2. Участники Conversation_Users(conversation_id, user_id) - (conversation_id, user_id) - уникальные.
3. Сообщения чата Conversation_Messages (id, conversation_id, user_id, send_date, message).

Если диалог закрыт и прошло больше определенного времени (месяц, год), то можно все связанные данные сериализовать и кинуть в файл или таблицу архивов, ненужные данные удалить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
Напишу просто некоторые свои мысли.

По-моему, с точки зрения хранения информации не должно быть разницы между диалогом между двумя или тремя и более пользователями. Вопрос лишь в количестве участвующих сторон (n>1).

Защита данных пользователей
Сегодня принято осуществлять шифрование пользовательских данных. Мне кажется, что архитектура БД может сильно зависеть в зависимости от того насколько сильно важна защита данных ваших пользователей. Нужно подойти к этому вопросу основательно и ни в коем случае не использовать самопальные алгоритмы.
Можно защищать не только данные переписки, включая медиа, но и сохранять анонимность участников. Идентификаторы участников (хеш, а не primary ID) можно привязывать к идентификаторам пользователей.
Ответ написан
Комментировать
@assets
Back-end developer
Для хранение архива чата используется Redis

https://github.com/dwyl/hapi-socketio-redis-chat-e...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы