Самый эффективный способ хранить URL-адреса в Mysql? - PullRequest
13 голосов
/ 17 июня 2009

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

Ответы [ 3 ]

9 голосов
/ 18 июня 2009

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

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

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

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

5 голосов
/ 17 июня 2009

Одна вещь, о которой вы можете подумать - это сохранить имя хоста и часть протокола 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)
0 голосов
/ 17 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...