2012-02-22 12 views
7

Estoy usando Perl para conectarme a 2 bases de datos diferentes (MySQL y Sybase) usando DBI, hay alrededor de 700,000 registros en cada uno y necesito que sean iguales (lo más probable es que haya algunos registros diferentes cada semana más o menos) , hacer esto por primera vez sería simplemente una cuestión de copiar la tabla, pero esto debe hacerse de forma regular (al menos una vez por semana), y simplemente dejar caer la tabla y copiar todo de nuevo cada vez no es una buena solución, entonces me preguntaba: ¿Cuál es la forma más rápida de comparar alrededor de 700,000 filas de 2 bases de datos diferentes usando Perl?¿Cuál es la forma más rápida de comparar alrededor de 700,000 filas de 2 bases de datos diferentes usando Perl?

Nota: Las tablas tienen 5 campos (todos ellos de tipo carácter incluyendo la clave principal)

Respuesta

4

carga cada tabla, clasificados, a Perl en su totalidad, a continuación, ejecute Algorithm:Diff en las dos listas. Al final, obtendrá una buena lista de filas para eliminar y filas para insertar. Algunas filas pueden ser eliminadas y reinsertadas (si tiene teclas foráneas colgando de esas filas, necesitará hacer una actualización en lugar de eliminar/insertar).

700,000 filas no es una gran cantidad de datos en las máquinas modernas, ni una gran cantidad de memoria.

Si solo necesita la existencia de filas (es decir, si las filas existen o no, en lugar de los cambios de fila reales), puede hacer un diff en las claves, y luego buscar las filas que necesita desde allí.

+0

Si los campos que no son clave son grandes, puede descargar la clave y solo el hash sha1 de los otros campos y compararlos como se indicó anteriormente. –

+1

flotantes puede ser un dolor al comparar, es posible que deba limitar su precisión. (Hehe 700K no es nada, 240 millones de filas pueden ser divertidas) – Rich

Cuestiones relacionadas