powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / My SQL нормальная форма
14 сообщений из 39, страница 2 из 2
My SQL нормальная форма
    #38563152
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDDВ одном фале последовательно сложить 500 текстовых сообщений, не удаляя нечего. Где фрагментация? В чем бред?Фрагментация будет ОБЯЗАТЕЛЬНО. Например, почитайте, что такое кластерный индекс.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563324
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDD, Давай вернёмся к началу.

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


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

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


Как ты думаешь, какие операции в твоей БД будут затрагивать ВСЕ записи в таблице messages ?
Попробуй составить список таких операций. Или список вообще всех операций, и пометь в нём те операции, которые будут обрабатывать сразу все сообщения.

авторНе создавать же новую таблицу сообщений для каждого нового юзера.
...
Если основную таблицу юзеров хранить в MySQL базе и для каждого юзера создавать папку в ней хранить переписку в Sqlite файле "sqlite_open()"
На сколько это безопасно и на что ляжет нагрузка на сервере.
Правильное ли решение на ваш взгляд?


Для задачи "Чат" типична задача "вывести все сообщения между двумя или более пользователями" (если нет -- напиши, что тебе эта задача не нужна).

Расскажи, как ты представляешь себе решение этой задачи (можешь написать запрос для неё), если у тебя сообщения разных пользователей лежат в разных таблицах.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563423
FantasyDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

1) users записей до 100 000 структура простая индекс ID, имя, почта, (может еще пару полей)

2) Удалить пользователя со всеми диалогами, править диалоги, удалять переписку, править переписку. (Возможно будут еще задачи)

3) Задача чат между юзерами.
Вы пишите ко мне, ID1 обратился к ID2 у ID2 в файл сохраняется переписка в моей папке (В папке ID2 файл my_messages.db).
Вы хотите посмотреть нашу переписку. Переписку с кем? Oбращаемся ко мне в папку (D2 файл my_messages.db) если есть продолжаем, нету делаем первую запись.
Я удалил переписку, обращаетесь, нет переписки, начинаем снова.

Просто и красиво, на мой взгляд, и нагрузка любая.

А ваше предложение, как организовать. Или в чем может быть подвох?

"Фрагментация будет ОБЯЗАТЕЛЬНО. Например, почитайте, что такое кластерный индекс." По любому тогда будет фрагментация(с любой структурой), юзеры будут менять свои фото и аватары, добавлять фото...
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563432
dubolom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDD,

Вы производите впечатление трудолюбивого, одержимого жаждой деятельности, творческого человека, наделенного пытливым умом.
К сожалению, эти замечательные качества не могут компенсировать отсутствие опыта и практических знаний.
Ну ничего, вы просто поэкспериментируйте, попробуйте то, попробуйте это ... Поделитесь потом как-нибудь своим опытом ...
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563479
FantasyDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dubolom, Спасибо. У меня был опыт только под win и Firebird, печатались билеты, набранные несколькими операторами, все запихал в две таблицы, структура получилась сложной (Приведу пример = приход, разход, остаток. sql select был такой ОСТАТОК ПРЕДЫДУЩЕЙ ЗАПИСИ СКЛАДЫВАЕТСЯ С ПРИХОДОМ СЛЕДУЮЩЕЙ ВЫЧИТАЕТСЯ РАСХОД И ПИШЕТСЯ ОСТАТОК НАСТОЯЩЕЙ :) вписывал только приход и расход остаток сам рассчитывался + связные с этим таблицы ), файл базы данных работал 2 дня максимум, раздувался до огромных размеров.
После этого опыта понимаю что нужно основательно подойти к структуре и не менять лошадей на переправе.
Обязательно поделюсь своим опытом в этом проекте, если будет кому интересно.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563555
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDDпечатались билеты, набранные несколькими операторами, все запихал в две таблицы, структура получилась сложнойПотому и получилась фигня, что задача решалась лихим наскоком, без анализа предметной области. А сделай как положено, начав с карандаша и бумаги - таблиц было бы больше, но структура была бы простой, понятной и быстро работающей.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563652
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDDDubolom, Спасибо. У меня был опыт только под win и Firebird, печатались билеты, набранные несколькими операторами, все запихал в две таблицы, структура получилась сложной (Приведу пример = приход, разход, остаток. sql select был такой ОСТАТОК ПРЕДЫДУЩЕЙ ЗАПИСИ СКЛАДЫВАЕТСЯ С ПРИХОДОМ СЛЕДУЮЩЕЙ ВЫЧИТАЕТСЯ РАСХОД И ПИШЕТСЯ ОСТАТОК НАСТОЯЩЕЙ :) вписывал только приход и расход остаток сам рассчитывался + связные с этим таблицы ), файл базы данных работал 2 дня максимум, раздувался до огромных размеров.
После этого опыта понимаю что нужно основательно подойти к структуре и не менять лошадей на переправе.
Обязательно поделюсь своим опытом в этом проекте, если будет кому интересно.

Э... тут видимо имело значение то, какая именно СУБД это была...
Firebird -- он такой, он любит ... "раздуваться".

Я думаю, что этот конкретно твой опыт лучше всего забыть, как страшный сон, и не думать о нём более.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ещё раз призываю тебя сконцентрироваться на ответах на мои вопросы...


FantasyDDMasterZiv,

MasterZiv Сколько записей предполагается хранить в таблицах users, messages ?


1) users записей до 100 000 структура простая индекс ID, имя, почта, (может еще пару полей)

Код: plaintext
Юзеров 100тыщ, понятно. Где messages?

MasterZiv Как ты думаешь, какие операции в твоей БД будут затрагивать ВСЕ записи в таблице messages ?
Попробуй составить список таких операций.


2) Удалить пользователя со всеми диалогами, править диалоги, удалять переписку, править переписку. (Возможно будут еще задачи)



MasterZiv Расскажи, как ты представляешь себе решение этой задачи (можешь написать запрос для неё)


3) Задача чат между юзерами.
Вы пишите ко мне, ID1 обратился к ID2 у ID2 в файл сохраняется переписка в моей папке (В папке ID2 файл my_messages.db).
Вы хотите посмотреть нашу переписку. Переписку с кем? Oбращаемся ко мне в папку (D2 файл my_messages.db) если есть продолжаем, нету делаем первую запись.
Я удалил переписку, обращаетесь, нет переписки, начинаем снова.

А ваше предложение, как организовать. Или в чем может быть подвох?
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563664
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, нажал кнопку раньше...

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

Ещё что ты никак не можешь понять, что производительность запросов почти никак не зависит от объема данных в таблице,
при условии, что запрос использует нужные индексы. Т.е. в БД возможны такие случаи:
таблица маленькая, индексы не используются -- всё нормально

таблица маленькая, индексы используются -- всё нормально

таблица большая, индексы для запроса не используются -- запрос просто не будет работать (размер таблицы от 5-10 тыщ записей уже), и тебе придётся переделать запрос так, чтобы он использовал индексы.

таблица большая, индексы для запроса используются -- производительность запроса -- O(log N), N -- размер таблицы в кол-ве записей. Как можно догадаться, будет N равно 10 тысяч или миллиард -- разница небольшая.

Так что до миллиарда сообщений ты можешь быть относительно спокоен -- всё будет летать. Ну, хорошо, сделаем скидку на то, что это mySQL -- до десятков миллионов сообщений (на 2 порядка уменьшил).
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563670
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё же не дописал...

ну и с учётом всего вышесказанного, напрашивается простой вывод -- разбивать таблицу на части по вертикали просто нет смысла, поскольку и так оно будет работать. Хочу также заметить, что обычно разбивают на 10-100 частей, что в принципе особого прироста скорости дать не должно. В твоём случае это было бы 100000 раз, в 100000 раз таблицы были бы меньше. Это наоборот, существенное улучшение. Но оно не нужно.

НО! если всё же ты захочешь разбить... В MySQL (как и в некоторых других СУБД) теперь есть table partitioning, таблицу физически MySQL может тебе разбивать на части, а логически это будет одна таблица, и почти все действия по организации сбора информации из многих таблиц тебе не придётся делать руками. Всё же лучше чем "палка и верёвка" из скрещения MySQL и SQLLite.

Но я не советую пока использовать партицирование, это можно будет сделать потом, когда объёмы данных реально дойдут до больших чисел.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563807
FantasyDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
firebird для меня правда страшный сон!

Я опишу индексные поля таблицы users:
ID - Номер юзера (он уникальный)
ID_NAME - Имя юзера.
Остальные поля не индексируемые

Таблица mesages:
ID_MESAGE - Автоинкрементный для уникальности записи и сохранения порядка сообщений
ID_FROM - От кого сообщение (users:ID - Номер юзера)
ID_TO - Кому сообщение (users:ID - Номер юзера)
MESAGE - Сообщение (не индексируется, слишком большое, но нужное)
Остальные поля не индексирую(Время,тип....)

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

Спасибо всем за участие и советы, все в общих чертах обрисовалось с ваших советов!
Я в этой ветке в будущем опишу что и как получилось, думаю будет интересно.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563811
FantasyDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дополнительно ++++ MasterZiv я не знал про Секционирование
Я дополнительной базой делал Секционирование По списку значений (По первому впечатлению от описания Секционирования )
Страх от Firebird у меня остался, думал что все базы хромые.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563870
Фотография AHAPXuCT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FantasyDD,

А еще знаете, подумайте про отдельную таблицу, в которой будет храниться история сообщений.
И можно сделать так, чтобы ночью специальный job переносил сообщения, старше N дней в эту архивную таблицу.
Таким образом, содержимое вашей основной рабочей таблицы будет частично очищаться от старых сообщений.
...
Рейтинг: 0 / 0
My SQL нормальная форма
    #38563882
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHAPXuCTподумайте про отдельную таблицу, в которой будет храниться история сообщений.
И можно сделать так, чтобы ночью специальный job переносил сообщения, старше N дней в эту архивную таблицу.
Таким образом, содержимое вашей основной рабочей таблицы будет частично очищаться от старых сообщений.
Партиционирование по дате сделает ровно то же самое, только более естественно и без нагрузки на сервер.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / My SQL нормальная форма
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]