Almacenamos representaciones de millones de compuestos químicos como BLOB en una base de datos MySQL. También mantenemos hashes de estos BLOB cuando necesitamos consultar entre estos compuestos y comparar estos hashes en las consultas.
Dado que descubrimos que las funciones hash estándar (como CRC) proporcionadas por la biblioteca MySQL chocan con frecuencia para nuestro caso de uso, utilizamos una función hash personalizada específica para nuestros datos, la envolvimos como un complemento de MySQL y creamos una función definida por el usuario con esto. complemento de la siguiente manera:
CREATE FUNCTION customhash RETURNS INTEGER SONAME 'customhash.so'Desafortunadamente, necesitamos mover nuestra instalación de MySQL a otro centro de datos administrado y, debido a las razones de seguridad y la política del centro de datos, no podemos personalizar MySQL agregando complementos.
Recientemente escuchamos sobre la biblioteca XXHash , hicimos algunas pruebas y descubrimos que tiene un gran rendimiento y no genera colisiones en nuestros datos. Además, resulta que ya ha sido utilizado internamente por la distribución estándar de MySQL .
Me pregunto si es posible configurar el servidor MySQL para llamar a la función XXH64_digest en nuestras rutinas MySQL sin compilarlo como complemento.
Revisé el código fuente de MySQL y las funciones integradas y no pude encontrar ninguna forma de ejecutar XXHash en las rutinas de MySQL . Parece que MySQL usa XXHash internamente y no es visible para el usuario.
Para ejecutar XXHash en las rutinas de MySQL , he desarrollado un complemento en caso de que alguien necesite usar el algoritmo XXHash en el servidor MySQL .
Este complemento se puede encontrar aquí: repositorio de Github para xxhash_mysql_plugin .
Después de instalar el complemento, puede ejecutar la función xxhash en sus declaraciones seleccionadas como se muestra a continuación: