Структура базы данных для регистрации 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 строк.

Мой вопрос:

  1. Это лучше структура базы данных? Можно ли что-то улучшить в приведенной выше схеме?

  2. Есть ли библиотека (или механизм хранения / база данных), которая больше подходит для такого рода данных?

Обновить

Более ранняя версия 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.

0 ответов

Другие вопросы по тегам