Как правильно - одна большая таблица или много мелких?

Andrew Tch

Новичок
Как правильно - одна большая таблица или много мелких?

Суть такая - есть много пользователей, у них есть личная переписка. Итого где-то 10000 юзеров, каждый отсылает, допустим, 5 сообщений в день, итого за год - 10000*5*300 = 15 000 000 записей. Теперь что лучше - создать большую таблицу на всех пользователей и хранить иам все сообщения, или создавать по маленькой таблице для каждого пользователя? Я пробовал тестить, 100 000 запросов к 100 таблицам, в каждой по 50 записей работаю чуть медленее, чем 100 000 запросов в одну таблицу с 5000 записей, но хотелось бы узнать мнение.

Да, и еще - разумно ли использовать MySQL для зранения блобом файлом по 100-200 мегабайт, или лучше сделать для них аплоадер?
 

[Gisma]

Новичок
лучше почитать, что такое нормализация данных (есть такое модное умное слово)
что ты понимаешь под аплоадером?
 

Andrew Tch

Новичок
Нормализация, сущности - это одно, а я хотел спросить как именно лучше работать mysql, то есть, что в нем будет быстрее, поиск по индексам в таблице на 15 000 000 строк или поиск по primary key в куче маленьких таблиц.

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

[Gisma]

Новичок
нет, в твоем случае на этом вопросе, я думаю заморачиваться не надо. Хотя думаю поик по маленьким таблицам будет быстрее, но зачем это? реализация, отладка...
 

Andrew Tch

Новичок
меня число 15 000 000 напрягает, честно говоря...

спасибо.

У кого-нибудь есть другие мнения?
 

Mich

Продвинутый новичёк
Есть. Например не хранить все 15 000 000 сообщений, а только актуальные на данный момент. Либо какой-то 3-й вариант.
 

Andrew Tch

Новичок
Да, и поиск по маленьким таблицам оказался чуть медленнее, на самом деле.

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

[Gisma]

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

Spear

почемучка
обычно пользователям ставят лимит на кол-во сообщений.
Если это форум - то наверное хватит на одного пользователя 100-200. Хотя, может у вас крупный проект по личной переписке :)
 

vadim

Guest
Что то странное тут люди советуют
Сказал же человек, что у него такое то расчётное количество записей, почему он должен делать меньше

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

Есть ещё вопрос концепции: если это всё однородные сообщения, то почему таблицу нужно разбивать?? База должна справится с таблицами такой величины
 

ForJest

- свежая кровь
Andrew Tch
Храни всё в одной таблице. 10000 маленьких таблиц заменяются + 1 поле в индекс, и это правильно.
15 миллионов в принципе не слишком большая цифра.
10000 юзеров, значит можно использовать 2-х байтовый int. Для сообщения получается 4-х байтный.
Итого 6 байт на индекс. 15 000 000 *6 = 90 000 000.
90 метров вполне можно выделить под key_buffer и даже больше. Так что никаких причин для тормозов я не вижу.
 

Andrew Tch

Новичок
Все верно, ForJet. Приблизительно такой же расчет был у меня.

Всем спасибо.
 

donhenarophp

Новичок
Автор оригинала: vadim
Что то странное тут люди советуют
Сказал же человек, что у него такое то расчётное количество записей, почему он должен делать меньше

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

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