Структура базы данных для регистрации URL и параметров запроса URL
Мне нужно записать посещенные URL-адреса и параметры URL-запроса в базу данных MySQL для веб-сайта. Администратор сайта также должен иметь возможность фильтровать URL-адреса по значению параметра запроса. Например, он может выбрать, чтобы получить все URL, которые имели utm_source
для параметра запроса установлено значение "google".
На данный момент у меня следующая структура:
URL таблицы
url_id - INT
url_hash - SHA1 of URL
url - VARCHAR (1024)
Таблица url_log
url_log_id - INT (Autoincrement PK)
url_id - INT
visited_on - INT (timestamp)
Таблица url_log_key
url_log_key_id - INT (Autoincrement PK)
url_key
Таблица url_log_value
url_log_value_id - INT (Autoincrement PK)
url_value
Таблица url_log_data
url_log_data_id - INT (Autoincrement PK)
url_id - (FK links to url table)
url_key_id - (FK links to url_key table)
url_value_id - (FK links to url_value table)
Проблема в том, что url_log_data растет очень быстро. Для каждого URL, который имеет, скажем, 10 параметров запроса, в таблицу url_log_data добавляется 10 строк.
Мой вопрос:
Это лучше структура базы данных? Можно ли что-то улучшить в приведенной выше схеме?
Есть ли библиотека (или механизм хранения / база данных), которая больше подходит для такого рода данных?
Обновить
Более ранняя версия url_log_data
Стол выглядел так:
url_log_data_id - INT (PK)
url_id - FK (Links to url table)
url_key - VARCHAR (The query parameter name)
url_value - VARCHAR (The query parameter value)
Но эта таблица быстро растет, и на данный момент насчитывает 37 миллионов строк. Очевидно, что таблица становилась огромной, и одной из причин были повторяющиеся значения для столбца ключ / значение параметра. Вот почему мы переместили эти два столбца в отдельные столбцы, пытаясь уменьшить общий размер таблицы url_log_data.