Самый эффективный способ хранения 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-адресов действительно решает некоторые другие проблемы.