Domanda

Sto salvando l'URL in un database e quando ne inserisco uno nuovo, voglio verificare se quell'URL esiste già nel database.

Una pratica comune (se non sbaglio) è quella di hash gli URL usando MD5 o SHA-1 ecc ... e controllare quel campo nel database per duplicati prima di inserirne uno nuovo.

So che MD5 può produrre collisioni, anche sha-1 ...

Cosa mi suggerisci? Le mie esigenze sono:

  • Dimensione DB: Alla fine da 10 a 20 milioni di record nel database

  • Prestazioni/velocità: Dimensione di hash in modo quindi non avrà un carico pesante che controlla i duplicati (ci sarà l'indice ovviamente su quel campo)

  • Tolleranza: Non mi interessa se ricevo 1 collisione ogni 100.000 record. Le mie esigenze sono più nei confronti delle prestazioni (piccolo hash) anziché delle collisioni dello 0% (grande hash).

  • Possibilità di attacco da parte degli URL malformati per produrre collisioni di proposito: Estremamente basso

  • Danno massimo possibile in caso di un attacco così riuscito: Estremamente basso

Domande:

  • Credi che MD5 sia abbastanza (qualcosa di meglio da suggerire)?

  • Forse MD5 è persino eccessivo Per me e potrei seriamente ottenere benefici per le prestazioni usando qualcosa di più semplice?

Grazie in anticipo ragazzi!

È stato utile?

Soluzione

Che ne dici di usare MD5 o un hash relativamente economico simile (forse Quark?), e nel raro caso di collisione che controlla l'intero URL per le voci corrispondenti? In questo modo la maggior parte delle volte hai solo il controllo di hash economico, ma in realtà non inserisci mai un URL duplicato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top