Come i motori di ricerca costruiscono il loro indice: velocità, peso e hashing

14

I ragni non si fermano. Strisciano. Trovano nuove pagine, aggiornano quelle vecchie e non finiscono mai il lavoro. Il web cambia troppo velocemente per essere completato. Ma una volta raccolti i dati, inizia il vero lavoro. Il motore deve immagazzinarlo. Deve renderlo ricercabile.

Non si tratta semplicemente di scaricare il testo in una cartella. Due cose contano qui. Innanzitutto, quali dati conservi? Secondo: come lo organizzi?

Perché l’archiviazione semplice fallisce

Immagina un motore di ricerca che ricorda solo una parola e l’URL in cui è apparsa. Inutile. Otterresti lo stesso risultato per “banca” su un sito finanziario e “banca” su una pagina turistica sulle rive del fiume. Nessun contesto. Nessuna classifica.

Un vero motore ha bisogno di più. Tiene traccia della frequenza. Conta la frequenza con cui appare un termine. Guarda la posizione. Le parole nel titolo contano più delle parole nel piè di pagina. Le parole nei link contano. Le parole nei meta tag contano. Ad ogni fattore viene assegnato un peso.

Questa ponderazione è proprietaria. Google utilizza una formula. Bing ne usa un altro. Ecco perché la stessa query produce risultati diversi su piattaforme diverse. Non esiste un unico ordine “corretto” dei risultati. Esistono solo algoritmi diversi che danno priorità a segnali diversi.

Dati di imballaggio serrati

Lo spazio di archiviazione costa denaro. Gli ingegneri comprimono i dati. Il white paper originale di Google descrive l’utilizzo di soli due byte (16 bit) per archiviare metadati complessi per una singola parola.

In quei 16 bit:
– Da 2 a 3 bit potrebbero tenere traccia delle maiuscole
– Da 2 a 3 bit potrebbero tenere traccia della dimensione del carattere
– Da 2 a 3 bit potrebbero tracciare la posizione rispetto ad altre parole

Sembra incredibilmente piccolo. Eppure contiene informazioni sufficienti per classificare una pagina in modo efficace. I dati vengono compattati. È codificato. Quindi è pronto per l’indice.

La soluzione della tabella hash

Un indice ha un compito: la velocità. Trovare i dati istantaneamente. Anche per query complesse.

Potresti pensare che l’ordine alfabetico funzioni. Non è così. In inglese, le parole “M” sono ovunque. Le parole “X” sono rare. Un dizionario riflette questo. M è spesso. X è magro. La ricerca di “M” richiede più tempo rispetto alla ricerca di “X” in un sistema scarsamente ottimizzato a causa dello squilibrio della distribuzione.

L’hashing risolve questo problema.

Hashing applica una formula a ciascuna parola. Converte la parola in un valore numerico. Questo valore distribuisce le voci in modo uniforme su un numero fisso di bucket. Ignora l’alfabeto. Ignora la frequenza linguistica. Crea uniformità artificiale.

La tabella hash contiene la chiave numerica e un puntatore ai dati effettivi. I dati stessi possono essere archiviati nel modo più efficiente possibile. Il puntatore colma il divario tra la ricerca rapida e l’archiviazione pesante.

Questa separazione è fondamentale. Non esegui la scansione dell’intero database. Calcoli l’hash, vai direttamente al secchio e tiri il puntatore. È diretto. È veloce. Gestisce il carico.

Perché questo è importante per te

La prossima volta che digiti una query e ottieni risultati in millisecondi, ricorda la tabella hash. Ricorda la ponderazione. Ricorda la compressione. Il web è disordinato. È caotico. Ma l’indice lo doma. Trasforma il rumore in ordine.

I ragni continuano a strisciare. L’indice continua a crescere. E gli algoritmi continuano a perfezionarsi. Perché se si fermano, te ne accorgi.