[PHP/MySQL] 2 zijdig synchroniseren van een tabel.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gnirts_modnar
  • Registratie: Juni 2007
  • Laatst online: 19-04 08:52
Hallo allemaal,

Ik zit met het volgende probleem, ik heb twee verschillende databases met dezelfde structuur. In beide databases worden dingen gewijzigd en toegevoegd. Nu ben ik op zoek naar een script dat een tabel in de database kan synchroniseren. Ik heb hier zelf al even over nagedacht, en het nodige op internet gezocht. Ik heb iets gelezen over master en slave binnen mysql zelf. maar volgens mij is dat slechts een kant op.

Zelf loop ik hier op vast:

Ik denk dat er twee opties zijn,

OPTIE 1
de wijzigingen in db1 naar db2 schrijven, die kan ik selecteren omdat ik in de tabel een veld heb die een waarde krijgt als er wijzigingen in zijn. dat veld (flag) heeft ook een apparte waarde voor nieuwe records. Vervolgens de tabel in db1 legen, en de hele tabel uit db2 terug kopieren. en vervolgens alle flags weer legen.

Ik denk dat dit op den duur traag wordt omdat je tabel groeit. en alle gegevens terug kopieren gewoon veel tijd gaat kosten.

OPTIE 2
Weer de wijzigingen/inserts selecteren in een van beide tabellen, die naar de ander schrijven flags in de eerste tabel weer op nul zetten dan hetzelfde herhalen voor de andere tabel.

hier denk ik dat het een probleem wordt als je wijzigingen gaat doen in een van beide tabellen omdat op den duur de id's niet meer gelijk zijn. Want als ik in db1 & 2 allebei 10 records heb, en ik voeg in beide een toe, en dan ga ik synchroniseren, zullen de nieuwe records in de twee tabellen een ander id hebben. namelijk 11 & 12, en voor de andere tabel 12 & 11.

Het is misschien een idee om een extra soort id te maken die voor ieder record 100% uniek is, iets met een timestamp oid. Maar dat is niet helemaal waterdicht.

misschien zijn er andere opties, of is er een systeem om die id's gelijk te houden. In ieder geval is alle hulp welkom

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Optie 0: 1 database gebruiken. Want dit is uiteindelijk een niet goed werkende situatie. Dit leidt onvermijdelijk tot data reduntantie. Twee-weg synchronisatie is altijd lastig (wat als persoon A in database 1 exact dezelfde informatie invoert als Persoon B in database 2)

Ik ben zeer benieuwd naar je redenen waarom je dit niet kan of wilt doen.

Indien niet mogelijk, dan zou ik voor Optie 2 gaan. Het probleem met die id's kun je omzeilen door gegarandeerd unieke Id's te gebruiken. bv de Id's van database 1 zijn altijd even en die van database zijn altijd oneven. ofzoiets. Timestamps of andere willekeurige data is niet uniek.

Waarschijnlijk gebruik je her en der auto_increment velden? Die moet je dan allemaal vervangen, wellicht door 1 id tabel die je gebruikt om Id's te genereren.

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 17:55
Kijk eens naar SQLyog. Die heeft een data synchronisatie tool ingebouwd, die je ook kunt schedulen als een job.

Acties:
  • 0 Henk 'm!

  • gnirts_modnar
  • Registratie: Juni 2007
  • Laatst online: 19-04 08:52
Haha optie 0, dat geeft wel weer aan dat ik hier op de goede plek zit. De reden hiervoor is dat iemand de data uit de database offline wel kunnen benaderen en wil kunnen wijzigen. Dat verhaal over even en oneven id's lijkt me erg lastig te implementeren in het bestaande pakket. Dat gaat een hele hoop tijd kosten denk ik.

SQLyog: klinkt goed.. maar om nou hiervoor een pakket aan te schaffen is een beetje overkill

Acties:
  • 0 Henk 'm!

  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 08:29

BBrunekreeft

Dus...

gnirts_modnar schreef op woensdag 25 juli 2007 @ 10:46:
SQLyog: klinkt goed.. maar om nou hiervoor een pakket aan te schaffen is een beetje overkill
SQLyog Job Agent 6.04 For Linux is gratis.
Werkt prima (gebruik het zelf ook)

Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Laatst online: 16:24
Waarom wijzig je op twee databases? Want als je dat doet om de load te verdelen dan kan je beter master-slave setup gebruiken en alle inserts/updates/deletes op 1 doen (master) en de meeste selects op de ander (slave)

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • gnirts_modnar
  • Registratie: Juni 2007
  • Laatst online: 19-04 08:52
gnirts_modnar schreef op woensdag 25 juli 2007 @ 10:46:
De reden hiervoor is dat iemand de data uit de database offline wel kunnen benaderen en wil kunnen wijzigen.
Daarom doe ik dat dus, we overwegen wel een vodafone datacard aan te schaffen om zo gewoon de database te benaderen.

Maar bedankt voor de suggestie
Pagina: 1