Производительность MySQL: много таблиц или много строк? - PullRequest
4 голосов
/ 21 октября 2011

Я хочу регистрировать доступ к страницам в моем приложении PHP / MySQL для реализации счетчика просмотров, аналогичного тому, что был в SO.Мой план - подсчитывать запросы по уникальным IP-адресам на каждой странице.Там около 5000 разных страниц с количеством просмотров.(Я знаю, что подсчет IP-адресов не точен, но для моих целей это нормально.)

Я вижу два варианта организации таблиц базы данных:

  • Либо одна большая таблица с полями«Page_id», «request_ip».Если предположить, что каждая страница имеет в среднем 50 просмотров по уникальным IP-адресам, я получу 5000 x 50 = 250 000 строк .Поскольку представления отображаются на страницах, таблица будет иметь права на чтение и запись для каждого запроса на каждой странице.
  • Другой вариант - иметь одну таблицу на страницу с одним столбцом «request_ip».Тогда у меня было бы 5000 таблиц, хранящих в среднем 50 строк.Доступ к таблице возможен только при просмотре страницы.

Какая из них лучше в целом и с точки зрения производительности?Или я совершенно не на том пути?

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

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

Несколько таблиц, хранящих одну и ту же структуру данных, почти ВСЕГДА плохой дизайн.Если вы беспокоитесь о производительности, вы можете использовать поддержку разбиения MySQL для автоматического разделения таблицы на несколько частей, и это делается прозрачно для конечного пользователя (например, ваши запросы).

2 голосов
/ 21 октября 2011

Не лучше ли было бы иметь таблицу с датой времени доступа, идентификатором страницы, IP-адресом и т. Д. Затем, каждый раз при доступе к странице, вы просто добавляете строку в таблицу.Это даст вам данные на необработанном уровне, а затем вы сможете просто объединить их, чтобы ответить на интересующие вас вопросы.

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

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