Что такое хорошая идея для сохранения данных "Чат" в базе данных? - PullRequest
0 голосов
/ 31 марта 2012

Я работаю над сайтом чата.Я использую asp.net и SQL Server 2008

Идея будет такой же, как обычные веб-сайты чата.Моя проблема в том, что я не понимаю, как создать хороший дизайн базы данных.

Я хорошо знаю vb asp.net с SQL Server.

В моем проекте я создал таблицу длядобавление нового пользователя со столбцами ID, uName, uPassoword и uDetail.

Затем .... Я создал таблицу с именем User_Friends (uName , uFriendName).

Предположим, что когда пользователь "abc" добавляет нового друга, он сохраняет отношения uName = "abc" и uFriendName = "xyz" в этой таблице, то же самое делают все остальные пользователи, чтобы добавить туда друзей и все эти данные.в одной таблице (User_Friends).Все подробности о том, кто является чьей информацией о друзьях, находятся в этой таблице User_Friends.

Мой вопрос:

  • Но что, если в базе 10000 пользователей или более, и каждый пользователь добавляет в друзья много друзей в БД.
  • То же самое, если я хочу сохранить каждый пользовательский чат в БД.Должен ли я использовать одну таблицу для истории чатов всех пользователей или что-то еще.

Тогда это будет медленный процесс получения подробностей из одного стола или нет?

Пожалуйста, посоветуйте мне, какдизайн БД или дайте мне несколько полезных ссылок для помощи.

Ответы [ 2 ]

3 голосов
/ 31 марта 2012

сохранение данных чата в базе данных занимает много места, я бы предпочел, чтобы вы делали это следующим образом:

  1. пользователь A общается со своим другом B ... как только окно чата закрыто, создайте из него текстовый файл и сохраните его в структуре папок, такой как год / месяц / дата, с именем файла как «идентификатор пользователя + идентификатор друга», например: AB.txt

  2. Каждый день добавляйте данные в один и тот же текстовый файл. поэтому в будущем мы будем показывать все чаты за день в одном файле.

  3. Добавление истории чата в таблице с идентификатором, именем файла, датой создания и временем. Проверьте, существует ли это имя файла в БД, если оно есть, возьмите этот файл и добавьте к нему данные иначе вставьте строку с полным путем в БД и сохраните в ней данные чата

1 голос
/ 31 марта 2012

все зависит от того, как вы хотите использовать хранимые данные.

для пользовательской структуры, я бы порекомендовал сделать отношения (друг, заблокирован, ... что угодно) в отдельной таблице, т.е.

таблица «пользователь»: user_id, ник, имя, адрес электронной почты, статус, .... таблица «отношение»: user_id1, user_id2, тип_отношения

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

относительно истории сообщений. Я бы записал каждое сообщение в таблицу как:

таблица "messages" message_id, send_by, send_to, timestamp,message_text

и выполните очистку сообщений старше ... Я полагаю, вам не нужна вся история в любом случае.

в отношении производительности это немного другой вопрос.Базы данных предназначены для обработки большого количества данных, но если вы не проиндексируете их должным образом, это будет медленно.Закончите свой дизайн стола в первую очередь.И подумайте об индексации позже - в зависимости от того, какой тип запросов вы будете выполнять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...