Счетчик посещений — Я перегружаю базу данных?

Я построил простой счетчик посещений на своем сайте (PHP & MySQL, используя Codeigniter в качестве моей основы).

Это таблица, которую я использую:

CREATE TABLE page_hits (id INT NOT NULL AUTO_INCREMENT, page_url VARCHAR(350) NOT NULL, ip VARCHAR(11) NOT NULL, hits INT NOT NULL, `date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL, PRIMARY KEY (id));

На каждой загрузке страницы я проверяю page_url & ip существует в таблице. Если это так, я увеличиваю значение hits на 1. Если нет, я создаю новую строку в таблице. Временная метка предназначена для того, чтобы обеспечить определенную задержку между счетчиками обращений, чтобы не считать обновление страницы новым попаданием.

Все это работает хорошо, но я боюсь, что я перегружаю свою базу данных …
Менее чем за 24 часа у меня есть более 6500 строк в page_hits Таблица.

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

2

Решение

Позвольте мне начать с переписывания вашей однострочной команды SQL:

CREATE TABLE page_hits
(id       INT NOT NULL AUTO_INCREMENT,
page_url VARCHAR(350) NOT NULL,
ip       VARCHAR(11) NOT NULL,
hits     INT NOT NULL,
date     TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id))

Теперь я могу видеть, что там.

Ваш стол не сложен, но он будет быстро расти. Это не будет проблемой, если вы ничего с этим не делаете. Другими словами: добавление строк в таблицу не является проблемой, даже если у вас есть миллион строк.

Однако, как только вы начнете запрашивать эту таблицу, вы обнаружите, что она очень медленно работает. Вы забыли добавить индексы.

Как добавить индексы в таблицы MySQL?

Во-вторых, вы можете подумать о нормализации своей таблицы и избавиться от ненужной информации. Например, эти три меньшие таблицы:

CREATE TABLE page_hits
(id         INT NOT NULL AUTO_INCREMENT,
page_id    INT NOT NULL,
client_id  INT NOT NULL,
hits       INT NOT NULL,
PRIMARY KEY (id))

CREATE TABLE pages
(id       INT NOT NULL AUTO_INCREMENT,
page_url VARCHAR(350) NOT NULL,
PRIMARY KEY (id))

CREATE TABLE clients
(id       INT NOT NULL AUTO_INCREMENT,
ip       VARCHAR(11) NOT NULL,
date     TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id))

Вот page_id относится к pages стол и client_id относится к clients Таблица. Вы должны будете добавить индексы самостоятельно. Я бы избавился от date столбец, и решить эту проблему с помощью cookie. Обратите внимание, что новые таблицы могут быть легко расширены, чтобы содержать больше информации без слишком большого увеличения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]