Exportar (0) Imprimir
Expandir todo

Entender y evitar los bucles de sincronización

Actualizado: febrero de 2014

 

 

Bienvenida a SQL Data Sync (Vista previa). Este tema es el cuarto de los cinco que debe conocer antes de diseñar e implementar un plan de sincronización de datos. Los cinco temas preparatorios son:

El complemento Microsoft Azure SQL Data Sync del portal Silverlight de Microsoft Azure se ha dado de baja. A partir de ahora, use el Portal de administración de Microsoft Azure, para SQL Data Sync de Azure.

El acceso a SQL Data Sync (Vista previa) se realiza desde la pestaña SYNC de Base de datos SQL en el Portal de administración de Microsoft Azure . La pestaña SYNC solo está disponible cuando se dispone de uno o varios grupos de sincronización. Vea el tema Cómo: Crear un grupo de sincronización (SDS) para obtener información sobre cómo crear y modificar un grupo de sincronización desde este portal.

Vea la sección Navegación más adelante para obtener vínculos a temas que debe leer antes de empezar e instrucciones sobre cómo crear y modificar grupos de sincronización.

Un bucle de sincronización se produce por la superposición de bases de datos en dos o más grupos de sincronización de forma que un cambio en una base de datos de un grupo de sincronización lo vuelve a escribir en la misma base de datos otro grupo de sincronización. Los bucles de sincronización se perpetúan a sí mismos y pueden dar lugar a grandes cantidades de datos que sobrescriben repetidamente datos idénticos en dos o más bases de datos.

Cualquiera de las causas siguientes puede producir un bucle de sincronización.

  • Una referencia circular dentro de una base de datos o una tabla.

  • Una referencia circular que implica dos o más grupos de sincronización.

  • Una sola base de datos registrada con diferentes agentes y agregada a un grupo de sincronización bajo dos o más agentes.

Cuando diseñe las topologías de sincronización, es perfectamente correcto tener una única base de datos en varios grupos de sincronización. La figura 1 es una ilustración de esto. Aunque la base de datos A está compartida por el grupo de sincronización 1 y el grupo de sincronización 2, no hay ningún bucle de retroalimentación que perpetúe la escritura y reescritura de los mismos datos en la misma base de datos. También es posible compartir más de una base de datos entre dos grupos de sincronización y que no haya ningún bucle. Explicaremos estas configuraciones más adelante en este tema.

Repasemos la secuencia de eventos que se producen cuando se realiza un cambio en una base de datos en la figura 1. Supongamos que el cambio se realiza en la base de datos C en este caso.

  1. Se modifica la fila 1 de la base de datos C.

  2. En los metadatos de la base de datos C se crea un registro que indica que la fila 1 se modificó y dónde se originó el cambio.

  3. El grupo de sincronización 1 realiza la sincronización.

    1. Observa que alguien distinto de SG1 ha modificado la fila 1 de la base de datos C.

    2. La fila 1 de la base de datos C se escribe en la central de GS1.

    3. Se crea un registro en los metadatos de GS1 que indica que GS1 modificó la fila 1.

    4. La fila 1 de GS1 se escribe en la base de datos A.

    5. Se crea un registro en los metadatos de la base de datos A que indica que GS1 modificó la fila 1. El grupo de sincronización 1 ha terminado la sincronización.

Si no se realizan nuevos cambios en ninguna de las bases de datos, la próxima vez que se realice una sincronización no se escribirá ningún dato en ninguna de las bases de datos.

Figura 1: Dos grupos de sincronización que comparten una base de datos. No hay ningún bucle de sincronización

La misma secuencia tiene lugar en la dirección opuesta (en relación con la ilustración 1) si el cambio se inicia en la base de datos D.

Repasemos la secuencia de eventos que se producen cuando se realiza un cambio en una base de datos en la figura 2. Nuevamente supongamos que el cambio se realiza en la base de datos C.

  1. Se modifica la fila 1 de la base de datos C.

  2. En los metadatos de la base de datos C se crea un registro que indica que la fila 1 se modificó y dónde se originó el cambio.

  3. El grupo de sincronización 1 realiza la sincronización.

    1. Observa que alguien distinto de SG1 ha modificado la fila 1 de la base de datos C.

    2. La fila 1 de la base de datos C se escribe en la central de GS1.

    3. Se crea un registro en los metadatos de GS1 que indica que GS1 modificó la fila 1.

    4. La fila 1 de GS1 se escribe en las bases de datos A y B.

    5. Se crea un registro en los metadatos de las bases de datos A y B que indica que GS1 modificó la fila 1.

    El grupo de sincronización 1 ha terminado la sincronización.

  4. El grupo de sincronización 2 realiza la sincronización.

    1. Observa que alguien distinto de GS2 ha modificado la fila 1 de la base de datos A (o B).

    2. La fila 1 de la base de datos A se escribe en la central de GS2.

    3. Se crea un registro en los metadatos de GS2 que indica que GS2 modificó la fila 1.

    4. La fila 1 de GS2 se escribe en las bases de datos B (o A) y D.

    5. Se crea un registro en los metadatos de las bases de datos B (o A) y D que indica que GS2 modificó la fila 1.

    El grupo de sincronización 2 ha terminado la sincronización.

Si no se realizan nuevos cambios en ninguna de las bases de datos, la próxima vez que GS1 realice la sincronización observará un cambio en la base de datos A (o B) que no hizo (lo realizó GS2 en el último ciclo). Aunque los datos no son distintos de lo que hay en todas las bases de datos de ambos grupos de sincronización, se tratan como datos modificados y el ciclo de sincronización anterior se ejecuta de nuevo una y otra vez de manera indefinida.

Merece la pena destacar que mientras nuestro bucle de sincronización de ejemplo solo implica una fila, lo que es cierto para una fila lo es también para cualquier número de filas. Imagine una base de datos con un millón de filas donde el 1% de las filas sin modificar se cambian en cada ciclo de sincronización. Después de un ciclo estará recorriendo de forma infinita 10.000 filas. Después de dos ciclos, estará recorriendo esas 10.000 más 9.900 filas adicionales, lo que hace un total de 19.900 filas. Y el número de filas del bucle continúa aumentando, nunca se reduce.

Figura 2: Dos grupos de sincronización con un bucle de sincronización

La figura 3 ilustra un escenario más complejo en el que el bucle puede no ser tan fácil de identificar como en la figura 2.

En la figura 3 hay tres grupos de sincronización. Cada grupo de sincronización tiene una base de datos central y otras dos bases de datos. Cada base de datos está compartida por dos grupos de sincronización pero ningún par de grupos de sincronización comparte las mismas dos bases de datos.

  • SG1: A y B

  • SG2: B y C

  • SG3: C y A

Repasemos la secuencia de eventos que se producen cuando se realiza un cambio en una base de datos en la figura 3. Supongamos que el cambio se realiza en la base de datos A.

  1. Se modifica la fila 1 de la base de datos A.

  2. En los metadatos de la base de datos A se crea un registro que indica que la fila 1 se modificó y dónde se originó el cambio.

  3. El grupo de sincronización 1 realiza la sincronización.

    1. Observa que alguien distinto de GS1 ha modificado la fila 1 de la base de datos A.

    2. La fila 1 de la base de datos A se escribe en la central de GS1.

    3. Se crea un registro en los metadatos de GS1 que indica que GS1 modificó la fila 1.

    4. La fila 1 de GS1 se escribe en la base de datos B.

    5. Se crea un registro en los metadatos de la base de datos B que indica que GS1 modificó la fila 1.

    El grupo de sincronización 1 ha terminado la sincronización.

  4. El grupo de sincronización 2 realiza la sincronización.

    1. Observa que alguien distinto de GS2 ha modificado la fila 1 de la base de datos B.

    2. La fila 1 de la base de datos B se escribe en la central de GS2.

    3. Se crea un registro en los metadatos de GS2 que indica que GS2 modificó la fila 1.

    4. La fila 1 de GS2 se escribe en la base de datos C.

    5. Se crea un registro en los metadatos de la base de datos C que indica que GS2 modificó la fila 1.

    El grupo de sincronización 2 ha terminado la sincronización.

  5. El grupo de sincronización 3 realiza la sincronización.

    1. Observa que alguien distinto de GS3 ha modificado la fila 1 de la base de datos C.

    2. La fila 1 de la base de datos C se escribe en la central de GS3.

    3. Se crea un registro en los metadatos de GS3 que indica que GS3 modificó la fila 1.

    4. La fila 1 de GS3 se escribe en la base de datos A.

    5. Se crea un registro en los metadatos de la base de datos A que indica que GS3 modificó la fila 1.

    El grupo de sincronización 3 ha terminado la sincronización.

Si no se realizan nuevos cambios en ninguna de las bases de datos, la próxima vez que GS1 realice la sincronización observará que alguien distinto de GS1 ha modificado la fila 1 de la base de datos A. GS1 lo considerará un cambio completamente diferente aunque los datos sean idénticos a los de todas las bases de datos y centrales. Así, todo el ciclo de sincronización se repite infinitamente.


Figura 3: Tres grupos de sincronización con un bucle de sincronización

La clave para impedir bucles de sincronización es evitar tener cualquier ruta de acceso en la que otro grupo de sincronización escriba en última instancia un cambio de datos en un grupo de sincronización en la base de datos de origen. Hay tres formas de lograrlo.

  • Diseñar el sistema de sincronización de modo que no puedan existir bucles.

    Por ejemplo:

    En la figura 2 podría quitar la base de datos A o B del área compartida.

    En la figura 3 podría quitar cualquier base de datos de cualquier grupo de sincronización y se interrumpiría el bucle.

  • Usar filtrado de filas.

    Si crea filtros mutuamente exclusivos al configurar cada grupo de sincronización, no habrá dos grupos de sincronización que sincronicen los mismos datos.

    Por ejemplo:

    En la figura 2 podría agregar el filtro de fila Area = "NA" a un grupo de sincronización y Area = "EU" al otro.

  • Usar la dirección de sincronización.

    Por ejemplo:

    Si establece las direcciones de sincronización como se muestra en la figura 4, no tendrá ningún bucle.

Figura 4: Usar la dirección de sincronización para impedir bucles

SQL Data Sync (Vista previa) es una característica de Base de datos SQL. Desde el Portal de administración de Azure puede realizar todas las tareas necesarias para crear, implementar y modificar un grupo de sincronización.

 

Crear un grupo de sincronización

Hay seis pasos para crear un grupo de sincronización desde el Portal de administración de Azure. Los detalles de cada paso se pueden encontrar siguiendo estos vínculos.

  1. Inicie sesión en el Portal de administración de la Base de datos SQL de Azure
    SQL Data Sync (Vista previa) se encuentra como pestaña debajo de Base de datos SQL solo cuando se crea un grupo de sincronización.

  2. Instalar un cliente de agente de SQL Data Sync (Vista previa)

  3. Registrar una base de datos de SQL Server con un cliente de agente

  4. Crear el grupo de sincronización (SDS)

  5. Definir los datos de sincronización (SDS)

  6. Configurar el grupo de sincronización (SDS)

Modificar un grupo de sincronización

Puede modificar un esquema de un grupo de sincronización agregando o quitando las tablas o columnas del grupo de sincronización o alterando el tipo de datos o el ancho de la columna. Los detalles se pueden encontrar siguiendo los vínculos.

Vea también

Mostrar:
© 2014 Microsoft