Secondo le specifiche DNS la lunghezza massima del nome a dominio è :
255 * 3 =765 <767 (appena appena :-) )
Tuttavia, nota che ogni componente può essere lungo solo 63 caratteri.
Quindi suggerirei di tagliare l'URL nei bit dei componenti.
Utilizzo di http://foo. example.com/a/really/long/path?with=lots&of=query¶meters=that&goes=on&forever&and=ever
Probabilmente questo sarebbe adeguato:
- flag del protocollo ["http" -> 0 ] (memorizza "http" come 0, "https" come 1, ecc.)
- sottodominio ["foo"] (255 - 63 =192 caratteri:potrei sottrarre altri 2 perché min tld è di 2 caratteri)
- dominio ["example"], ( 63 caratteri )
- tld ["com"] (4 caratteri per gestire "info" tld )
- percorso [ "a/really/long/path" ] (per tutto il tempo che desideri -memorizzare in una tabella separata )
- queryparameters ["with=lots&of=query¶meters=that&goes=on&forever&and=ever" ] ( memorizzare in una tabella chiave/valore separata )
- numero di porta / elementi di autenticazione usati raramente possono trovarsi in una tabella con chiave separata, se effettivamente necessario.
Questo ti offre dei bei vantaggi:
- L'indice si trova solo nelle parti dell'URL in cui è necessario eseguire la ricerca (indice più piccolo!)
- Le query possono essere limitate alle varie parti dell'URL (trova ogni URL nel dominio facebook per esempio)
- qualsiasi URL che abbia un sottodominio/dominio troppo lungo è fasullo
- Parametri di query facili da eliminare.
- Ricerca di nomi di dominio/tld senza distinzione tra maiuscole e minuscole
- scarta lo zucchero della sintassi ( "://" dopo il protocollo, "." tra sottodominio/dominio, dominio/tld, "/" tra tld e percorso, "?" prima della query, "&" "=" nel interrogazione)
- Evita il principale problema della tabella sparsa. La maggior parte degli URL non avrà parametri di query né percorsi lunghi. Se questi campi sono in una tabella separata, la tua tabella principale non prenderà la dimensione hit. Quando si eseguono query, nella memoria verranno inseriti più record, quindi prestazioni delle query più veloci.
- (altri vantaggi qui).