Ik ben bezig met een replicatie-systeem tussen 2 databases, en die moet platform/database onafhankelijk zijn. Dat heb ik nu allemaal prima voor elkaar, en op een aantal locaties is het ook al operationeel, maar ik heb nog 1 probleem waar ik nog geen goede oplossing voor heb:
Hoe weet de database waar naartoe wordt gerepliceerd welke records verwijderd zijn?
Tot nu toe heb ik 3 oplossingen kunnen verzinnen:
1) Laat de target database kijken in de source database welke records 'ie "teveel" heeft.
Dit is echter geen optie, omdat bij offline replicatie (uitwisseling via XML files) de target niet bij de source database kan. Bovendien is het te zwaar over bv. een dialup lijntje. Op een cruiseschip bij Tahiti hebben ze geen snelle ADSL-verbinding met de wal...
2) Voeg aan iedere tabel een 'Deleted' veld toe, en verwijder de records niet echt.
Te doen, maar dit betekent dat elke where clause van elke query hierop moet worden aangepast. En dat zijn er nogal wat.
3) Een 'on delete' trigger op iedere tabel die z'n primary key in een 'deleted records' tabel wegschrijft. Die records kunnen dan aan de andere kant door het replicatie-tool worden verwijderd.
Ik ben nu bezig geweest met de 3e optie, omdat daarvoor geen queries, etc. hoeven worden aangepast, maar het legt nogal wat beslag op de performance van de database (MSSQL in m'n tests, maar het moet ook draaien op InterBase en Oracle).
Iemand een geniaal idee?
Hoe weet de database waar naartoe wordt gerepliceerd welke records verwijderd zijn?
Tot nu toe heb ik 3 oplossingen kunnen verzinnen:
1) Laat de target database kijken in de source database welke records 'ie "teveel" heeft.
Dit is echter geen optie, omdat bij offline replicatie (uitwisseling via XML files) de target niet bij de source database kan. Bovendien is het te zwaar over bv. een dialup lijntje. Op een cruiseschip bij Tahiti hebben ze geen snelle ADSL-verbinding met de wal...
2) Voeg aan iedere tabel een 'Deleted' veld toe, en verwijder de records niet echt.
Te doen, maar dit betekent dat elke where clause van elke query hierop moet worden aangepast. En dat zijn er nogal wat.
3) Een 'on delete' trigger op iedere tabel die z'n primary key in een 'deleted records' tabel wegschrijft. Die records kunnen dan aan de andere kant door het replicatie-tool worden verwijderd.
Ik ben nu bezig geweest met de 3e optie, omdat daarvoor geen queries, etc. hoeven worden aangepast, maar het legt nogal wat beslag op de performance van de database (MSSQL in m'n tests, maar het moet ook draaien op InterBase en Oracle).
Iemand een geniaal idee?