[Databases] Koppelling en synchronisatie?

Pagina: 1
Acties:

  • traviandus
  • Registratie: Februari 2001
  • Laatst online: 25-03-2025
Stel ik heb een netwerk met een aantal database servers. Deze bevatten allen een database met exact dezelfde structuur en inhoud. Als ik een aanpassing maak in 1 database wil ik dat deze aanpassing ook de andere databases wordt doorgevoerd. Dit hoeft niet direct te gebeuren, maar de wijziging mag zich langzaam verspreiden over het netwerk.

Nu vroeg ik me af of ik dit zelf moet proggen of dat er een (freeware) database implementatie is dit iets dergelijks kan (MySQL?, PostgreSQL?).

Als het niet kan ben ik benieuwd naar suggesties hoe ik dit het beste op kan lossen.

Verwijderd

Wat je zoekt heet replicatie en dat werkt automatisch. In MySQL schijnt het ook te zitten (zie http://www.mysql.com/doc/en/Replication.html).
Ik heb alleen ervaring met MS-SQL en Oracle.

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 17:26

TheDane

1.618

Nou, 't kan in ieder geval in Oracle 8i ++

Daarmee kun je database links maken tussen verschillende databases die fysiek van elkaar gescheiden zijn. Via die database links kun je snapshots of materialized views definieren (die data uit 1 of meer tabellen selecteren) en via een oracle Job kun je die snapshots regelmatig laten refreshen. (bijvoorbeeld snachts)

Of je bouwt een trigger die alle data exporteert op 't moment dat er iets aangepast wordt. Je zou dan misschien met een cronjob deze data in de andere databases kunnen pompen.

Verwijderd

Ik denk dat je inderdaad het beste kan kijken naar database replicatie. Of het door jou gewenste DB product dat bevat is een kwestie van feature lijsten afzoeken op de sites van deze producten. Er zitten echter wel een paar haken en ogen aan.

Zo moet je heel goed nadenken over synchronisatieproblemen. Als gegevens in meer dan 1 database aangepast kunnen worden, is het mogelijk dat deze aanpassingen tegenstrijdigheden gaan bevatten. Als de prijs voor product X in database A overdag wordt aangepast van 8 naar 10 Euro, maar in database B van 8 naar 9 Euro, welke prijs moet 's nachts dan in beide databases neergezet worden? Daarom is het verstandig om 1 database 'leading' te maken, en de andere 'read-only'. Eventueel kan je deze beperkingen ook in sub-setten verdelen, bijv. in database A mogen alleen klantgegevens gewijzigd en toegevoegd worden en orders opgeslagen, in database B mogen alleen producten worden gewijzigd en toegevoegd, en orders afgehandeld.

Soms zijn de replicatiemogelijkheden echter niet aanwezig of niet complex genoeg voor de door jouw gewenste functionaliteit, en moet je zelf een synchronisator bouwen. Je loopt feitenlijk tegen dezelfde problemen op zoals ik die zojuist beschreef, maar kan wat flexibeler met problemen omgaan. Bijv. kun je een dataconflict ontdekken tijdens replicatie, en een gebruiker vragen om handmatig het probleem op te lossen, en tegelijkertijd het product tot die tijd te blokkeren omdat er evt. een foute prijs op zit.

HTH :)