Domanda

Sto cercando di implementare la sincronizzazione bidirezionale multi-master per un nodo centrale e molti client usando simmetriche. I clienti stanno comunicando solo con il nodo centrale (topologia stella). Ho problemi con la gestione dei conflitti nelle chiavi primarie.

Ad esempio il database contiene la tabella "Persona" con ID colonne, nome, ... in DB centrale Ho file:

    .
  1. aaa
  2. BBB
  3. ccc
  4. Il primo client collega e scarica il carico iniziale, quindi ha lo stesso DB. Secondo client fanno lo stesso.

    Ora primo e secondo i clienti creano una nuova riga nel loro DB locale. Primo:

      .
    1. aaa
    2. BBB
    3. ccc
    4. DDD
    5. Secondo:

        .
      1. aaa
      2. BBB
      3. ccc
      4. Eee
      5. Proverà la sincronizzazione, ma c'è conflitto in 4. Row. Questo conflitto può essere facilmente rilevato in simmetriche, ma ora voglio risolverlo con la chiave di incremento fino a quando non viene inserita e quindi invia le modifiche ai client ... Quindi il risultato sarà:

          .
        1. aaa
        2. BBB
        3. ccc
        4. DDD
        5. Eee
        6. in ogni database. Come può essere fatto? Grazie.

È stato utile?

Soluzione

Quando si tratta di uno scenario bidirezionale multi-master, non è una buona idea utilizzare un PK incrementato automatico.

La pratica standard è quella di creare un GUID per il PK per evitare conflitti tra i tuoi clienti.

Vedi il seguente sito per maggiori dettagli.

Selezione di una chiave primaria appropriata per un ambiente distribuito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top