Вставка в базу данных - это не то, что вы хотите делать при просмотре страниц. Скорее всего, у вас возникнут проблемы с обновлением подчиненных баз данных всеми вставками, поскольку репликация в MySQL однопоточная.
В моей компании мы обслуживаем 25 миллионов просмотров в день, и мы выбрали многоуровневый подход.
Счетчик представлений хранится в отдельной таблице с 2 столбцами (profileId, viewCounter), оба являются целыми числами без знака.
Для элементов, которые просматриваются редко, мы обновляем таблицу при просмотре страницы.
Для часто просматриваемых товаров мы обновляем MySQL примерно в 1/10 времени. Для обоих типов мы обновляем Memcache при каждом попадании.
int Memcache::increment ( string $key [, int $value = 1 ] )
if (pageViews < 10000) { UPDATE page_view SET viewCounter=viewCounter+1 WHERE profileId = :? }
else if ((int)rand(10) == 1) { //UPDATE page_view SET viewCounter= ?:cache_value WHERE profileId = :? }
Выполнение count (*) в InnoDB очень неэффективно (MyISAM сохраняет статистику счетчика в индексе), но MyISAM заблокирует таблицу при чтении, уменьшая параллелизм. выполнение count () для 50 000 или 100 000 строк займет много времени. Выполнение выбора на ПК будет очень быстрым.
Если вам требуется больше масштабируемости, вы можете посмотреть на redis