Самый эффективный способ хранения URL-адресов в Mysql?

Я хочу сохранить большой набор URL-адресов в MySql и создать уникальный индекс в столбце. Если я сделаю столбец utf8, тогда я ограничусь varchar (333), чего недостаточно для хранения некоторых моих URL-адресов. Если я объявлю, что столбец будет latin1, тогда я получу 1000 символов (не думаю, что мне это нужно). Тем не менее, мне придется кодировать URL-адрес и быть последовательным, чтобы всегда работать с закодированным URL-адресом. Есть ли лучший способ управления большими наборами URL-адресов?

Ответы

Ответ 1

Одна вещь, о которой вы можете подумать, это хранить часть хоста и часть протокола URL в отдельной таблице и ссылаться на нее с помощью ключа. Это также может оказаться полезным позже для получения всех URL-адресов для определенного хоста, а также для устранения проблем с длиной строки.

Например:

PROTOCOLS
-----------------------
PROTOCOL_ID   INTEGER
PROTOCOL      VARCHAR(10)    (i.e., http, https, ftp, etc.)

HOSTS
-----------------------
id       BIGINT
hostname varchar(256)   

URL
-----------------------
PROTOCOL      INTEGER  FK to PROTOCOLS
HOSTNAME      BIGINT   FK to HOSTS
QUERY_STRING  VARCHAR(333)

Ответ 2

три хороших способа сделать это:

1) используйте TEXT вместо VARCHAR. для обеспечения уникальности вам также необходимо создать отдельный столбец VARCHAR для хранения хэша MD5() или SHA1() и добавить индекс UNIQUE или PRIMARY. это приводит к неудачному последствию использования дополнительного диска для получения URL-адреса, но в зависимости от вашего варианта использования, который может быть в порядке.

2) используйте VARCHAR с двоичной сортировкой и сжимайте URL-адрес с помощью COMPRESS().

3) я забыл третий, когда я печатал первые два. GRR...

Ответ 3

Наиболее распространенная практика, которую я знаю, - это использование хэш-алгоритма с контролем столкновений, просто используйте какую-то быструю одностороннюю кодировку, которая приведет к очень низким коллизиям по URL-адресам.

Попробуйте отрубить части, которые, как вы знаете, будут одинаковыми во всех URL-адресах (т.е. HTTP://, www и т.д.). Если URL-адреса являются частью вашего домена, отмените это тоже.

В противном случае я переосмыслил бы проблему и попытался бы найти другой способ выполнить все, что вы пытаетесь выполнить. Я предполагаю, что наличие уникального набора URL-адресов действительно решает некоторые другие проблемы.