[Bucardo-general] scenario advice
Grant Maxwell
grant.maxwell at maxan.com.au
Mon Aug 17 15:09:36 UTC 2009
Hi there
Im new to bucardo but am pleased at what it is doing for me already. I
have a scenario that I would like to ask advice on.
I have three (or more) databases arranged as (using my terminology)
Central, Tower1 and Tower2. The Towers create message records that are
replicated back to the Central.
The towers share a table (called table A). They both update and insert
records in their version of table A, and table A needs to be
replicated between them. The primary key is kept unique by assigning
sequential numbers from a different range on each tower for inserts.
records are created in Table B and are replicated to Central from each
tower but not replicated between towers.
a field (F1) in table B is a foreign key (FK) reference to the primary
key (PK) of Table A.
There is a 2nd field (F2) in Table A that is unique by constraint.
This is all about field F2. Each database has to have exactly one
record in table A for unique value of F2. F1 is just an integer
sequential Primary Key and provides glue between table B records and
table A as a Foreign key. F2 must be consistent across all versions on
all databases, but F1 must remain consistent (if it already exists) to
the local database context. Try to put this into english, a book can
have a different reference number(F1) in multiple shops but has to
have the same title(F2).
Scenario:
A new message record is created on Tower 1 for table B. There was no
Table A record for field F2 so one was created. The table B and table
A records need to replicate to Central, and table A records need to
replicate to Tower 2 (and other towers).
Potential Conflict: (1)
Central might have a record in table A for unique field F2 but with a
different PK value in F1
This means Central has other messages which refer back to its
version of the Table record via foreign key, but the new Table B
record which will also be replicated
to Central will have the same F2 field but a different F1 field.
Notes:
It does not matter if the table B records on Central and Tower
servers do not match for the foreign key, so long as they remain valid
in the context of their
own database.
Proposed solution:
1. use a custom routine before the record is replicated to central
to check for a conflict on the 2nd field and adjust the outgoing
message record
to point at the Central version of table A record PK, and
2. do not replicate the table A record from tower to central.
Question:
Is it possible in a bucardo conflict management script to determine
if the conflict was about duplicate values in field F2.
Potential conflict (2)
Tower 1 Table A records need to be replicated to Tower 2 (and Tower
3 etc). Conflict resolution is tricky because when field F2 conflicts
(this happens a lot),
there are records in Table B of each tower that depends on the local
F1 FK version of the table A record.
Proposed solution:
1. use a conflict custom routine that uses UPDATE to synchronize the
detail fields to be the same on each tower, but on each tower keep its
own PK value for both
fields F1 and F2. This will assure that each tower knows about the
existence of a Field F2 record but uses a local version of F1 PK to
maintain the local FK
integrity, and
2. do not replicate the table A record between towers.
Because of the work distribution across the towers, these conflicts
will happen a lot, being created by race conditions.
Questions
1. Anyone think this might be done better or differently ?
2. Is there a way to create a one to many replication so that each
tower will replicate to every other tower (kind of a fully meshed
replication)?
thanks for you input folks
Grant
> P please consider the environment before printing this e-mail
>
The information in this e-mail is confidential and may be legally
privileged. It is intended solely for the addressee. Access to this e-
mail by anyone else is unauthorised. If you have received this
communication in error, please notify us immediately by return e-mail
with the subject heading "Received in error" or telephone +61 2
80050094, then delete the email and destroy any copies of it. If you
are not the intended recipient, any disclosure, copying, distribution
or any action taken or omitted to be taken in reliance on it, is
prohibited and may be unlawful. Opinions, conclusions and other
information in this e-mail and any attachments that do not relate to
the business of the maXan are neither given nor endorsed by it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mail.endcrypt.com/pipermail/bucardo-general/attachments/20090818/43d0bcb4/attachment.html
More information about the Bucardo-general
mailing list