Pregunta

Tabla1:Todo, incluyendo el fregadero de la cocina.Las fechas en el formato incorrecto (el año pasado así que usted puede ordenar en la columna), Números almacenados como VARCHAR, la dirección completa en la 'calle' columna, nombre y apellido en la columna nombre, la ciudad en la columna lastname, incompleta direcciones, las Filas que la actualización anterior filas por el movimiento de datos de un campo a otro basado en un conjunto de reglas que ha cambiado a lo largo de los años, los registros duplicados, registros incompletos, la basura, los registros...nombre de ella...ah, y por supuesto, no una marca de tiempo o columna de CLAVE PRINCIPAL en la vista.

Tabla2:Cualquier esperanza de normalización salió por la ventana al agrietamiento este bebé abra.Tenemos una fila para cada entrada Y actualización de filas en la tabla uno.Así duplicados, como si no hay mañana (800MB de la pena) y columnas como Phone1 Phone2 Phone3 Phone4 ...Phone15 (que no son llamadas de teléfono.Yo lo uso para la ilustración) La clave externa es..así de tener que adivinar.Hay tres candidatos dependiendo de qué tipo de datos se encontraba en la fila en la tabla1

Tabla3:Puede ser peor.Oh, sí.La "clave externa es una columna VARCHAR combinación de guiones, puntos, números y letras!si eso no da el partido (que a menudo no), a continuación, una segunda columna de producto similar de código.Las columnas que tienen nombres que NO tienen ninguna correlación con los datos dentro de ellos, y la obligatoriedad de Phone1 Phone2 Phone3 Phone4...Phone15.Hay columnas Duplicadas de Tabla1 y no una marca de tiempo o columna de CLAVE PRINCIPAL en la vista.

Table4:fue descrito como un trabajo en progreso y sujetos a cambio en cualquier momento.Es essentailly similares a la de los demás.

En cerca de 1 millón de filas este es un GRAN lío.Por suerte no es mi gran lío.Desgraciadamente tengo que tirar de un composit registro para cada "cliente".

Al principio me ideado cuatro etapas de la traducción de la Tabla1 agregar una CLAVE PRINCIPAL y la conversión de todas las fechas en que se pueden ordenar formato.A continuación, un par de pasos de consultas que devuelven los datos filtrados hasta que tuve Tabla1 a donde yo podría utilizar para tirar de las otras tablas para formar el compuesto.Después de semanas de trabajo tengo esta abajo a un solo paso utilizando algunos trucos.Así que ahora puedo mi punto de aplicación en el lío y sacar un bonito y limpio tabla de compuesto de capas de datos.Por suerte, me basta con que uno de los números de teléfono de mis propósitos para la normalización de mi mesa no es un problema.

Sin embargo, esto es donde el verdadero trabajo comienza, porque cada día cientos de empleados añadir/actualizar/eliminar esta base de datos en formas que no quiero imaginar y cada noche tengo que recuperar las filas nuevas.

Desde las filas existentes en cualquiera de las tablas puede ser cambiado, y ya que no hay ninguna marca de tiempo EN la ACTUALIZACIÓN de las columnas, voy a tener que recurrir a los registros de saber lo que ha sucedido.Por supuesto, esto supone que hay un registro binario, que no hay!

Introducir el concepto se fue hacia abajo, como el plomo globo.Bien podría haber dicho que sus niños van a tener que someterse a una cirugía experimental.No son exactamente hi tech...en caso de que no había reunido...

La situación es un poco delicado ya que tiene información valiosa que mi empresa quiere mal.He sido enviado por la gerencia de una gran corporación (usted sabe que se) a "hacer que suceda".

Yo no puedo pensar en ninguna otra manera de controlar el precio de la noche de las actualizaciones, que analizar el bin del archivo de registro con otra aplicación, para averiguar lo que ellos han hecho para que la base de datos durante el día y, a continuación, compuestos de mi mesa en consecuencia.Yo realmente sólo tiene que mirar a su tabla1 para averiguar qué hacer a mi mesa.Las otras mesas proporcionar campos para limpiar el registro.(Usando el MAESTRO ESCLAVO no ayuda porque voy a tener un duplicado del desorden.)

La alternativa es crear un hash único para cada fila de la tabla1 y construir una tabla hash.A continuación, me gustaría ir a través de TODA la base de datos cada noche para comprobar si los hashs partido.Si no, me gustaría leer ese registro y comprobar si existe en mi base de datos, si lo hace, entonces me gustaría actualizar mi base de datos, si no, a continuación, su nuevo disco y lo puse.Esta es feo y no es rápido, pero el análisis de un registro binario de archivo no está bastante bien.

He escrito esto para ayudar a conseguir claro sobre el problema.a menudo diciendo que alguien te ayuda a aclarar el problema de hacer una solución más obvia.En este caso sólo tengo una más grande dolor de cabeza!

Sus pensamientos se agradecería mucho.

¿Fue útil?

Solución

Los Archivos de Registro (Registros binarios) fueron mi primer pensamiento demasiado.Si supieras cómo se hicieron las cosas que haría estremecer.Para cada fila hay muchas entradas en el registro como piezas están añadido y cambiado.Su ENORME!Por ahora lo establecido en el Hash de enfoque.Con algunas inteligente archivo de paginación de la memoria de este es bastante rápido.

Otros consejos

Yo no soy un MySQL persona, así que esto se está saliendo de la izquierda del campo.

Pero creo que los archivos de registro pueden ser la respuesta.

Afortunadamente, usted realmente sólo necesita saber 2 cosas desde el registro.

Usted necesita el registro/rowid, y que necesita de la operación.

En la mayoría de los DB, y supongo MySQL, hay implícita una columna en cada fila, como un rowid o recordid, o lo que sea.Se trata de la fila interna número utilizado por la base de datos.Esta es su "libre" de la clave principal.

Después, usted necesita la operación.En particular, si es una instrucción insert, update o delete operación en la fila.

Consolidar toda esta información, en orden de tiempo, y, a continuación, ejecute a través de ella.

Para cada insert, update, seleccione la fila de su original DB, y la inserción/actualización de la fila en su destino DB.Si es un delete, luego de eliminar la fila.

No se preocupan por los valores de campo, no son importantes.Hacer la fila entera.

Esperemos que no debe "analizar" registro binario de archivos, MySQL ya debe tener rutinas para hacer eso, usted sólo tiene que encontrar y averiguar cómo usarlos (incluso puede haber algunas práctico "registro de volcado" de la utilidad que puede utilizar).

Esto le permite mantener el sistema bastante simple, y sólo debería depender de su actividad real durante el día, más que el total de tamaño de base de datos.Finalmente, más adelante se puede optimizar por lo que es "más inteligente".Por ejemplo, tal vez se inserte una fila, a continuación, actualizar, luego borrarlos.Usted sabe que usted puede simplemente ignorar esa fila completamente en su repetición.

Obviamente, esto requiere un poco de sabiduría arcana en orden a leer los archivos de registro, pero el resto debe ser sencillo.Me gustaría pensar que los archivos de registro de sellos de tiempo, así que usted puede saber para trabajar en las filas "a partir de hoy", o cualquiera que sea el rango de fecha que desee.

No puedes usar el código existente que da acceso a esta base de datos y adaptarlo a tus necesidades?Por supuesto, el código debe ser horrible, pero podría manejar la estructura de base de datos para usted, ¿no?Usted podría esperemos que concentrarse en conseguir su trabajo hecho en vez de jugar al arqueólogo a continuación.

usted puede ser capaz de utilizar maatkit del mk-tabla-herramienta de sincronización para sincronizar una base de datos de ensayo (su base de datos es muy pequeña, después de todo).Esto va a duplicar el lío"

Entonces, usted puede escribir algo que, después de la sincronización, realiza varias consultas para generar un conjunto de más cuerdo tablas que usted puede, a continuación, informe a partir de.

Me imagino que esto se podría hacer sobre una base diaria sin un problema de rendimiento.

Haciendo que todo fuera un servidor diferente se evite afectar a la base de datos original.

El único problema que puedo ver es si algunas de las tablas no tienen claves primarias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top