1) Con el propósito de una colisión hash muy baja, ¿puedo salirse con la suya simplemente usando la mitad de los 128 bits de un sha1 en lugar de lidiar con el sha1 mismo? Entiendo que esto no es adecuado para hashes criptográficos, pero solo necesito los hash para las claves de la tabla hash.¿Está bien para usar solo 64 bits de sha1 hash como id?
2) El tiempo de cálculo no es una prioridad, y además estoy recopilando datos muy pequeños. En particular, voy a tomar 2 o 3 hashes de 64 bits y mezclarlos para obtener otro hash de 64 bits. ¿Hay una mejor opción que sha1 para este propósito? Nuevamente, las colisiones deberían ser muy poco probables.
3) Soy un sql newb. ¿Es una buena idea usar hashes de 64 bits como id en sql? ¿Los id de 64 bits causarán problemas de rendimiento en sqlite o postgres? Voy a necesitar coordinar los datos en varias bases de datos (incluido un índice Lucene), así que pensé que debería tratar con los hash directamente en las tablas en lugar de molestar con los identificadores autoincormentados (que solo serían significativos en un db, no en todas las tiendas de datos). Creo que 64 bits es un buen compromiso: lo suficientemente grande para colisiones poco probables, pero ahorra espacio (¿y tiempo de búsqueda?).
4) ¿Qué hay de CRC-64? ¿Eso produce una distribución lo suficientemente aleatoria?
Supongo que GUID/UUID es más o menos lo que quiero. No estoy seguro si el soporte de sqlite es adecuado, así que investigaré eso. Como dije, soy un recién llegado de sql. – Jegschemesch
Sqlite3 se puede ampliar fácilmente para admitir UUID, y lo he hecho con éxito en una aplicación para iPhone. –
estoy de acuerdo en esta respuesta. Tengo una tabla llena de cientos de millones de filas y utilizo los primeros 64 bits como clave entera sin definir en lugar de un hash sha1 como cadena por motivos de rendimiento. con 350 millones de filas tuve algunas colisiones con 56 bits. siempre combino la clave hash de 64 bits con su fecha para que tanto hashkey como date tengan que coincidir. Usando ese método, solo tengo 30 millones de filas por día que pueden causar colisiones, reduciendo en gran medida la posibilidad de que ocurra a largo plazo. una colisión conduciría a una paz única de información mal colocada, en mi caso vale la pena el ahorro. – bhelm