Optimizar proceso de comparaciones entre entidades

Preguntado hace 1 año

Ramón Soriano
Votos
PositivosNegativosTotal
1 0 1
40 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Hola a todos, ha llegado a mí un proceso heredado que actualmente tarda horas en el que se extraen dos treemap de entidades, uno procedente de la base de datos y otro de ficheros xml. Actualmente la clave es el identificador y el valor la entidad.

El programa trata de asimilar los datos buscando posibles repetidos, pero entendiendo cosas como que "calle Simón Bolivar" es lo mismo que "c/ simón bolívar" y cosas así por distintos campos.

El problema es que la cantidad de datos recibida ha cambiado de una manera desproporcionada, de 1 a 20. Y los tiempos se han disparado.

Se me ocurre alguna mejora haciendo varios treemap cambiando la clave por el campo que vaya a comparar, haciendo que "calle Simón Bolivar" y "c/ simón bolívar" se unifiquen como "calle simon bolivar". Esto daría lugar a 12 treemap para los datos en los que quiero integrar. El problema de este enfoque es que el consumo de memoria va a ser enorme.

¿Se os ocurre alguna alternativa?

Gracias por adelantado.

Actualizando datos

1 Respuesta

Hace 1 año

Julián Mur
Votos
PositivosNegativosTotal
101

Hombre, habría que conocer en detalle el intrínculis del asunto, pero por lo que que cuentas, si vas a hacer ese tipo de comparaciones me parece que el servidor de base de datos está más preparado y controla mejor los índices de lo que vas a poder hacerlo en java, en mi opinión.

Según eso, ¿qué haría yo? Guardaría los datos en el formato unificado "calle simon bolivar" en la tabla principal, o sí esta va a crecer demasiado puedes hacer una tabla anexa con el id de la principal y con los campos extra que necesites. Haría otra tabla para los datos a importar, guardando los datos en ese formato. Una vez hecho esto hacer las consultas apropiadas controlando completamente el plan de ejecución para que todas las consultas vayan por índice, creándolos cuando sea necesario y aprovechándolos en las comparaciones, por ejemplo si vas a hacer un like, no lo hagas abierto por delante, es decir usa like 'cosa%' en vez de like '%cosa%'.

Saludos.

Cerrar

la verdad es que va muuucho mejor :) aunque hemos tenido que rehacer un montón de cosas :$ muuuchas gracias! Ramón Soriano hace 1 año

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres