Tengo large datasets con millones de registros en formato XML. Estos conjuntos de datos son volcados completos de datos de una base de datos hasta cierto punto en el tiempo.¿Cómo puedo determinar la diferencia entre dos grandes conjuntos de datos?
Entre dos volcados se pueden haber agregado nuevas entradas y las existentes pueden haberse modificado o eliminado. Supongamos que el esquema permanece sin cambios y que cada entrada tiene una ID única.
¿Cuál sería la mejor manera de determinar el delta entre dos de estos conjuntos de datos (incluidas las eliminaciones y actualizaciones)?
Mi plan es cargar todo en un RDBMS e ir desde allí.
Primero, cargue el volcado anterior. Luego, cargue el volcado más nuevo en un esquema diferente, pero al hacerlo verificará si la entrada es nueva o es una actualización de una entrada existente. En caso afirmativo, registraré la identificación en una nueva tabla llamada "cambios".
Una vez hecho esto, iré a través del antiguo volcado revisando todas las entradas y veré si tienen un registro coincidente (es decir, la misma ID) en el nuevo volcado. De lo contrario, inicie sesión en los cambios.
Suponiendo que buscar un registro por ID es una operación O(log n)
, esto debería permitirme hacer todo en O(n log n)
vez.
Como puedo determinar la diferencia observando la presencia o la ausencia de registros con solo la ID y la última fecha de modificación, también pude cargar todo en la memoria principal. La complejidad del tiempo será la misma, pero con el beneficio adicional de menos E/S de disco, lo que debería hacer que esto sea más rápido en órdenes de magnitud.
Sugerencias? (Nota: esta es más una pregunta de rendimiento que cualquier otra cosa)
"Porque puedo determinar ... lo que debería hacer esto más rápido en órdenes de magnitud". "Esta es más una cuestión de rendimiento que cualquier otra cosa". ...Así que hacer esto en la memoria será mucho más rápido y lo que más le preocupa es el rendimiento. Parece que respondiste tu propia pregunta. – Gerrat