Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como armazenar URLs no MySQL


De acordo com a especificação de DNS o comprimento máximo do nome de domínio é:

255 * 3 =765 <767 (apenas um pouco :-))

No entanto, observe que cada componente pode ter apenas 63 caracteres.

Então, sugiro cortar o URL nos bits do componente.

Usando http://foo. example.com/a/really/long/path?with=lots&of=query¶meters=that&goes=on&forever&and=ever

Provavelmente isso seria adequado:
  • sinalizador de protocolo ["http" -> 0 ] ( armazene "http" como 0, "https" como 1 etc. )
  • subdomínio ["foo" ] ( 255 - 63 =192 caracteres :eu poderia subtrair mais 2 porque min tld é 2 caracteres )
  • domínio ["exemplo"], (63 caracteres)
  • tld ["com"] (4 caracteres para lidar com "info" tld)
  • caminho [ "a/realmente/longo/caminho"] ( contanto que você queira -armazene em uma tabela separada )
  • queryparameters ["with=lots&of=query¶meters=that&goes=on&forever&and=ever" ] ( armazenar em uma tabela de chave/valor separada )
  • portnumber / itens de autenticação que raramente são usados ​​podem estar em uma tabela de chave separada, se realmente necessário.

Isso lhe dá algumas vantagens interessantes:
  • O índice está apenas nas partes do URL que você precisa pesquisar (índice menor!)
  • as consultas podem ser limitadas às várias partes do URL (encontre todos os URLs no domínio do Facebook, por exemplo)
  • qualquer URL que tenha um subdomínio/domínio muito longo é falso
  • fácil de descartar parâmetros de consulta.
  • pesquisa fácil de nomes de domínio/tlds que não diferencia maiúsculas de minúsculas
  • descarte o açúcar de sintaxe ( "://" após o protocolo, "." entre subdomínio/domínio, domínio/tld, "/" entre tld e caminho, "?" antes da consulta, "&" "=" no consulta)
  • Evita o grande problema de tabela esparsa. A maioria das urls não terá parâmetros de consulta, nem caminhos longos. Se esses campos estiverem em uma tabela separada, sua tabela principal não terá o tamanho atingido. Ao fazer consultas, mais registros caberão na memória, portanto, desempenho de consulta mais rápido.
  • (mais vantagens aqui).