2015-11-17 2 views
-1

У меня есть 10k пользователей в моей базе mySQL, для каждого пользователя мне нужно сохранить последние 500 событий. Пожалуйста, советую мне, как мне создать свою БД? Один MegaEventsTable или выделенный стол для каждого пользователя?
Плюсы многих маленьких столов:
- я могу быстро выбрать, например, 50 событий по типу от 500 записей, чем от 500 * 10 тыс. Записей.
- его быстрее получить 500 лучшие записи, и убить все другие записи в таблице для этого пользователя
- я могу шард моей базы данных записей некоторое время в будущем
контраса:
- я чувствую, что 10k таблицы ужасна идея (и что, если будет 100K)
Один стол, чтобы управлять ими, или тысячами меньше?

+0

Голосование, чтобы перейти на DBA.SE, где он был перечерчен: http://dba.stackexchange.com/questions/121326/one-table-to-rule-them-all-or-thousand -smaller –

+0

И, пожалуйста, не делайте этого (отправляя тот же вопрос на многих сайтах). Одного вопроса на одном сайте достаточно. –

+0

@ypercube извините, просто здесь больше людей, чем у DBA. Должен ли я удалить свой пост в DBA? – Asprelis

ответ

4

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

  • MySQL менее эффективен с небольшими таблицами, чем с большими таблицами. Маленькие таблицы занимают больше места из-за частично заполненных страниц.
  • Вы не можете использовать userId как ссылку на внешний ключ, потому что это относится к нескольким таблицам.
  • Вы не можете легко изменить структуру таблицы Users. Вы должны изменить тысячи из них.
  • Вы можете использовать индексы и разделы для увеличения скорости ваших запросов.
  • Базы данных предназначены для обработки больших объемов данных, а 10 000 строк - это не большой объем данных.
Смежные вопросы