My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 10:17
Оценка:
Задача создать чат между юзерами. My SQL.
Создаю 2 таблицы messages, users.
users : Список юзеров
messages : Сообщения между юзерами.

Выходит что таблица messages в случае большой нагрузки будет ОГРОМНОЙ (все сообщения между юзерами будут в ней)
Я чувствую что в структуре ошибка! Может есть решение, как правильней организовать структуру базы данных для этой задачи (чат между юзерами).
Не создавать же новую таблицу сообщений для каждого нового юзера.
Re: My SQL нормальная форма
От: Sni4ok  
Дата: 16.02.14 10:20
Оценка:
Здравствуйте, FantasyDD, Вы писали:

FDD>Задача создать чат между юзерами. My SQL.


а зачем?
Re[2]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 10:27
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>а зачем?


Извините я не понял вопрос. Зачем нужен чат?
Re: My SQL нормальная форма
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 16.02.14 10:36
Оценка:
Здравствуйте, FantasyDD, Вы писали:

FDD>Задача создать чат между юзерами. My SQL.

FDD>Создаю 2 таблицы messages, users.
FDD>users : Список юзеров
FDD>messages : Сообщения между юзерами.

FDD>Выходит что таблица messages в случае большой нагрузки будет ОГРОМНОЙ (все сообщения между юзерами будут в ней)

FDD>Я чувствую что в структуре ошибка! Может есть решение, как правильней организовать структуру базы данных для этой задачи (чат между юзерами).
FDD>Не создавать же новую таблицу сообщений для каждого нового юзера.

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

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[2]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 10:49
Оценка:
S>Логически это одна таблица. Для того чтобы справиться с большим объемом данных, надо использовать партиционирование, например, новый раздел на каждый день или месяц

Одно из решений.
Возможно есть более сложные структуры?
Если юзеров 1000 или более и все активные, иногда запросы на старые диалоги между юзерами. Нагрузка на messages будет неимоверной.
Re[3]: My SQL нормальная форма
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 16.02.14 10:57
Оценка: +1
Здравствуйте, FantasyDD, Вы писали:

S>>Логически это одна таблица. Для того чтобы справиться с большим объемом данных, надо использовать партиционирование, например, новый раздел на каждый день или месяц


FDD>Одно из решений.

FDD>Возможно есть более сложные структуры?
FDD>Если юзеров 1000 или более и все активные, иногда запросы на старые диалоги между юзерами. Нагрузка на messages будет неимоверной.

Что значит неимоверной? Какого типа будут запросы, сколько? Надо выделить ключевые запросы и правильно построить индексы. А неимоверным в таком случае возможно будет только полнотекстовый поиск

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

Но, чем больше данных тем проще должна быть таблица с сырыми данными, минимум нормализации — так индексы будут работать эффективнее.
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[4]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 11:07
Оценка:
S>Но, чем больше данных тем проще должна быть таблица с сырыми данными, минимум нормализации — так индексы будут работать эффективнее.

Может быть как вариант создавать каждому новому юзеру новую таблицу сообщений?
Re[5]: My SQL нормальная форма
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 16.02.14 11:09
Оценка:
Здравствуйте, FantasyDD, Вы писали:

S>>Но, чем больше данных тем проще должна быть таблица с сырыми данными, минимум нормализации — так индексы будут работать эффективнее.


FDD>Может быть как вариант создавать каждому новому юзеру новую таблицу сообщений?



Ну это то же самое партиционирование, только по юзерам
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[6]: My SQL нормальная форма
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 16.02.14 11:14
Оценка:
Здравствуйте, Sshur, Вы писали:

S>Здравствуйте, FantasyDD, Вы писали:


S>>>Но, чем больше данных тем проще должна быть таблица с сырыми данными, минимум нормализации — так индексы будут работать эффективнее.


FDD>>Может быть как вариант создавать каждому новому юзеру новую таблицу сообщений?



S>Ну это то же самое партиционирование, только по юзерам


Каг бы тоже имеет смысл, но партиционирование по датам легко позволит убрать старые записи куда-нибудь подальше....
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[6]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 11:14
Оценка:
FDD>>Может быть как вариант создавать каждому новому юзеру новую таблицу сообщений?

S>Ну это то же самое партиционирование, только по юзерам


Ограничение на максимально допустимое кол-во одновременно открытых файлов для процесса
например во FreeBSD по умолчанию — это что-то порядка 11 000

Выходит в чате ограничению на количестово юзеров 11 000.
Re[7]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 11:38
Оценка:
Может для каждого юзера создавать в отдельной папке файд данных, и при обращении к нему читать и исправлять данные в файле.
Как то не красиво выглядит.
Re[8]: My SQL нормальная форма
От: Rinbe Россия  
Дата: 16.02.14 11:49
Оценка:
Здравствуйте, FantasyDD, Вы писали:

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

FDD>Как то не красиво выглядит.

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

PS. Тут еще нужно определиться какой api будет у чата, а уж потом решать как делать шардинг.
Re: My SQL нормальная форма
От: Anton Batenev Россия https://github.com/abbat
Дата: 16.02.14 12:11
Оценка:
Здравствуйте, FantasyDD, Вы писали:

FDD> Выходит что таблица messages в случае большой нагрузки будет ОГРОМНОЙ (все сообщения между юзерами будут в ней)


Ничего страшного. Правильно приготовленный MySQL себя вполне неплохо ощущает на достаточно больших объемах данных.

FDD> Не создавать же новую таблицу сообщений для каждого нового юзера.


Не надо. Если беспокоит нагрузка (на сайте?), то этот вопрос частично решается партициями в таблице по дате, но в основном за пределами базы (например, кэшированием).
avalon/1.0.434
Re[2]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 13:13
Оценка:
AB>Не надо. Если беспокоит нагрузка (на сайте?), то этот вопрос частично решается партициями в таблице по дате, но в основном за пределами базы (например, кэшированием).

Мне посоветовали историю переписки хранить локально. Если не трудно, скажите в общих чертах как это выглядит.
Re[3]: My SQL нормальная форма
От: FantasyDD  
Дата: 16.02.14 15:38
Оценка:
Болшое спасибо всем за советы и участие! Решение принято.
Основную таблицу юзеров хранить в MySQL базе и для каждого юзера создавать папку в ней хранить переписку в Sqlite файле.
Re[3]: My SQL нормальная форма
От: wildwind Россия  
Дата: 16.02.14 15:44
Оценка: +2
Здравствуйте, FantasyDD, Вы писали:

FDD>Если юзеров 1000 или более и все активные, иногда запросы на старые диалоги между юзерами. Нагрузка на messages будет неимоверной.


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

Premature optimization is the root of all evil.
D. Knuth

Re: My SQL нормальная форма
От: Softwarer http://softwarer.ru
Дата: 17.02.14 09:47
Оценка:
Здравствуйте, FantasyDD, Вы писали:

FDD>Выходит что таблица messages в случае большой нагрузки будет ОГРОМНОЙ (все сообщения между юзерами будут в ней)

FDD>Я чувствую что в структуре ошибка!

Пока что основной ошибкой выглядит запихивание чата в базу. Чат — это мимолётные, временные данные, и обмен ими через "постоянные" структуры заведомо сомнителен.

Для такой задачи напрашивается некий "чат-сервер", с которым пользователи работают вообще мимо базы. Если есть желание сохранять историю, чат-сервер может писать её в СУБД, и там уже никакой "огромной нагрузки" не будет.
Re: My SQL нормальная форма
От: MasterZiv СССР  
Дата: 18.02.14 11:43
Оценка:
On 16.02.2014 14:17, FantasyDD wrote:

> Я чувствую что в структуре ошибка! Может есть решение, как правильней


Привет чувствительный!
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.