Como configurar a replicação bidirecional em uma única tabela em symmetricDS?

0

Instalei e configurei o software de replicação de banco de dados a partir do link no cliente e no servidor. Eu segui as instruções para configurar o exemplo de replicação e tudo funciona como anunciado.

Estou interessado em uma replicação bidirecional em uma única tabela. Isso significa que cada banco de dados no cliente e no servidor pode ser inserido / atualizado / excluído e as alterações ocorrem no outro banco de dados. Cada tabela é originadora e destino de conteúdo para o outro.

Li todo o manual para symmetricDS e não há nenhum exemplo de como uma tabela bidirecional deve ser configurada. Há um único parágrafo no manual que diz que pode ser feito, mas não como.

Onde estão as instruções para criar replicação de banco de dados bidirecional em SDs simétricas? O exemplo padrão que eles fornecem são bombas de replicação direcional única.

Meu sistema:

Client: Fedora 17 Linux with postgresql
Server: Windows 8 with mysql

Minha tentativa presunçosa de bombas bidirecionais falhou:

O gatilho sym_trigger_router é onde você define a direção das bombas de dados. Eu crio uma bomba nas duas direções. Mas isso cria um problema com conflitos impostos por chave. Se uma inserção ou atualização ou exclusão for executada no mesmo momento na mesma chave, o banco de dados terá que tomar medidas corretivas para restaurar a sanidade.

Existe alguma instrução sobre como fazer isso ou alguém fez isso?

    
por Eric Leschinski 17.08.2013 / 19:31

1 resposta

0

Replicação de tabela bidirecional em SDs simétricas

A replicação da tabela bidirecional não é trivial porque você deve lidar com todo tipo de conflito que possa surgir. Um conflito de exemplo é quando uma linha é inserida no servidor e no cliente, que juntos violariam uma chave exclusiva. Tanto o cliente quanto o servidor permitem que a inserção / atualização ocorra porque eles não sabem que há uma atualização de entrada que violaria a chave.

O mecanismo de sincronização dos dois lados pensa: "Ah, não, nós dois dissemos aos nossos usuários que não havia problema em adicionar essa linha com base no que sabíamos, mas não podemos sincronizar agora porque isso violaria a exclusividade".

O mecanismo de sincronização tem uma opção:

1.  Take the last insert/update by timestamp and destroy the request that came 
    first.  This is undesirable because the first person thought they committed,
    successfully when in reality their transaction was erased without anyone's 
    consent.

2.  Reject both rows, if I can't make everyone happy, I'm not letting anything
    through, and log the conflict to an external table to be dealt with later.
    The two users who thought they submitted data will find their transaction
    in a queue.

3.  Merge the rows, take a little from one, and a little from the other, and 
    create a hybrid row.  Or take one or the other based on some priority system
    or based on how filled out it is.

Este é apenas um exemplo de um conflito. Existem centenas de circunstâncias concebíveis onde um conflito surgiria que você deve planejar.

As centenas de circunstâncias concebíveis em que um conflito pode acontecer devem ter uma ação corretiva definida na tabela de configuração: sym_conflict .

Você poderia direcionar symmetricDS para mesclar as linhas de acordo com as regras, negar as transações até que um humano tenha revisado as linhas ou até mesmo programado para jogar fora o bebê com a água do banho. Isso é definido em Capítulo 3.8 do guia do usuário , configurando conflitos e resolução de dados.

O número de possíveis conflitos baseia-se na configuração e nas limitações da sua tabela de banco de dados. À medida que você adiciona condições e limitações à sua tabela, o número de possíveis conflitos aumenta exponencialmente. Se você tiver chaves exclusivas, precisará preparar conflitos de chave exclusivos e definir resoluções. Se você tiver chaves primárias / estrangeiras em outras tabelas, precisará de resoluções de conflitos para elas. Se você obtiver 90% dos conflitos, mas perder alguns, então, quando os conflitos ocorrerem, os bancos de dados não serão idênticos no cliente e no servidor.

    
por 17.08.2013 / 19:51