È possibile accedere agli elementi solo tramite la chiave primaria in una tabella hash. Questo è più veloce che con un algoritmo di albero (O(1)
invece di log(n)
), ma non è possibile selezionare gli intervalli (tutto il resto x
e y
). Gli algoritmi albero supportano questo valore in Log(n)
dove un indice hash può comportare una scansione completa della tabella O(n)
. Anche il sovraccarico costante degli indici hash è in genere maggiore (che non è un fattore nella notazione theta, ma esiste ancora). anche algoritmi ad albero sono di solito più facile da mantenere, crescere con i dati, la scala, ecc
indici hash lavorare con i formati predefiniti hash, così si finisce con alcune "secchi" in cui gli oggetti vengono memorizzati in. Questi oggetti sono ricollegati per trovare davvero quello giusto all'interno di questa partizione.
Quindi, se si dispone di piccole dimensioni si hanno un sacco di overhead per piccoli elementi, grandi formati risultato in un'ulteriore scansione.
Gli algoritmi di tabelle hash di oggi sono generalmente in scala, ma il ridimensionamento può essere inefficiente.
Esistono infatti algoritmi di hashing scalabili. Non chiedermi come funziona - è un mistero anche per me. AFAIK si sono evoluti dalla replica scalabile dove re-hashing non è facile.
sua chiamata rush - R eplication U mirino S calable H incenerimento, e questi algoritmi sono quindi chiamati algoritmi RUSH.
Tuttavia, potrebbe esserci un punto in cui l'indice supera una dimensione tollerabile rispetto alle dimensioni dell'hash e l'intero indice deve essere ricostruito. Di solito questo non è un problema, ma per enormi enormi database, questo può richiedere giorni.
Il compromesso per algoritmi ad albero è piccolo e sono adatti per quasi tutti i casi l'uso e, quindi, sono di default.
Tuttavia, se si dispone di un caso d'uso molto preciso e si sa esattamente cosa e solo ciò che sta per essere necessario, è possibile usufruire di indici di hashing.
Le tabelle hash non supportano le query di intervallo e non possono crescere o ridursi uniformemente durante l'operazione. –
@HenningMakholm Perché non hash per le colonne che non richiedono query di intervallo? – Pacerier