Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment stocker des URL dans MySQL

Selon la spécification DNS la longueur maximale du nom de domaine est de :

255 * 3 =765 <767 (à peine :-) )

Cependant, notez que chaque composant ne peut comporter que 63 caractères.

Je suggérerais donc de découper l'URL en composants.

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

Ce serait probablement suffisant :

  • indicateur de protocole ["http" -> 0 ] (stockez "http" comme 0, "https" comme 1, etc.)
  • sous-domaine ["foo" ] ( 255 - 63 =192 caractères :je pourrais en soustraire 2 de plus car le tld min est de 2 caractères)
  • domaine ["exemple"], ( 63 caractères )
  • tld ["com"] ( 4 caractères pour gérer "info" tld )
  • path [ "a/really/long/path" ] (aussi longtemps que vous le souhaitez -stockez dans une table séparée )
  • queryparameters ["with=lots&of=query¶meters=that&goes=on&forever&and=ever" ] ( stocker dans une table clé/valeur séparée )
  • les éléments de numéro de port/d'authentification qui sont rarement utilisés peuvent se trouver dans une table à clé distincte si nécessaire.

Cela vous donne quelques avantages intéressants :

  • L'index ne concerne que les parties de l'URL sur lesquelles vous devez effectuer une recherche (index plus petit ! )
  • les requêtes peuvent être limitées aux différentes parties de l'url (trouver chaque url du domaine facebook par exemple)
  • toute URL qui a un sous-domaine/domaine trop long est fausse
  • facilité de supprimer les paramètres de requête.
  • Recherche simple de nom de domaine/tld insensible à la casse
  • supprimez la syntaxe sugar ("://" après protocole, "." entre sous-domaine/domaine, domaine/tld, "/" entre tld et chemin, "?" avant requête, "&" "=" dans le requête)
  • Évite le problème majeur des tables creuses. La plupart des URL n'auront pas de paramètres de requête, ni de longs chemins. Si ces champs se trouvent dans une table séparée, votre table principale ne subira pas le coup de taille. Lorsque vous effectuez des requêtes, davantage d'enregistrements tiennent en mémoire, ce qui accélère les performances des requêtes.
  • (plus d'avantages ici).