Pregunta

Estoy tratando de implementar la sincronización bidireccional Multi-Master para un nodo central y muchos clientes que utilizan simémetros. Los clientes se están comunicando solo con nodo central (topología de estrella). Tengo un problema con tratar con los conflictos en las claves primarias.

Por ejemplo, la base de datos contiene la tabla "Persona" con ID de columnas, nombre, ... en DB central, tengo filas:

  1. aaa
  2. BBB
  3. CCC
  4. El primer cliente conecta y descarga la carga inicial, por lo que tiene la misma base de datos. El segundo cliente hace lo mismo.

    Ahora primero y segundo clientes crean una nueva fila en su DB local. Primero:

    1. aaa
    2. BBB
    3. CCC
    4. ddd
    5. segundo:

      1. aaa
      2. BBB
      3. CCC
      4. eee
      5. Intentarán sincronizar, pero hay conflicto en 4. Row. Este conflicto se puede detectar fácilmente en simémetros, pero ahora quiero resolverlo mediante la llave de incremento hasta que se inserta y luego envíe cambios a los clientes ... Así que el resultado será:

        1. aaa
        2. BBB
        3. CCC
        4. ddd
        5. eee
        6. en cada base de datos. ¿Cómo puede hacerse esto? Gracias.

¿Fue útil?

Solución

Cuando se trata de un escenario bidireccional multi-maestro, no es una buena idea usar un pk incremento automático.

La práctica estándar es crear un GUID para que la PK evite los conflictos entre sus clientes.

VER EL SITIO SIGUIENTE PARA MÁS DETALLES.

Selección de una clave principal apropiada para un entorno distribuido

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