Potrebno je da redovno (svaka 2-3 dana) vrsim sinhronizaciju 4 tabele u MySQL bazi. Od ove 4 tabele, jedna je primarna, a druge 3 su povezane sa njom preko id-a. Mislim da je za samu sustinu stvari nebitno koji su konkretno podaci u tabelama, ono sto je bitno je da postoji zavisnost izmedju tabela.
Podatke koje sinhronizujem dobijam u obliku XML fajla. Svaki XML fajl koji dobijem sadrzi sve informacije (a ne samo promjene, sto bi bilo idealno).
Inicijalno sam napravio PHP skriptu koja cita XML fajl i za svaki unos pravi odgovarajucu INSERT sintaksu za SQL, a zatim ovako generisan fajl pokrenuo kroz MySQL CLI. Kako su sve tabele inicijalno bile prazne, id-ovi su isli sukcesivno od nule, te nije bilo problema prilikom povezivanja preko id-a.
Sada se, kao sto sam napomenuo, javio zahtjev da se tabele moraju redovno sinhronizovati. Ovo ce opet vrsiti neka PHP skripta koju ce redovno pozivati CRON, ili ce se mozda cak i rucno pokretati (zbog nekih problema koji nisu povezani sa temom), uglavnom potrebno je sto je moguce vise automatizovati ovaj proces.
Takodje, jedan od pozeljnih zahteva bi bio da sam PHP kod koji treba da updejtuje bazu ne vrsi nikakvu interakciju sa bazom, vec samo proizvodi rezultujuci SQL kod koji ce kasnije biti importovan kroz Command Line Interface. Tj. PHP kod nema nikakve povratne informacije od baze (kao sto su broj trenutnog id-a u glavnoj tabeli i slicno) i jedini ulaz mu je XML. Razlog za ovo je sto ce se kasnije ova php skripta integrisati u jedan drugi sistem.
Konkretno pitanje je koji bi bio najoptimalniji pristup za sinhronizaciju baze?
Jedino rjesenje koje ja vidim je prilikom svakog novog primanja XML fajla, obrisati sve iz ove 4 tabele i odraditi import od nule. Ovo mi se nikako ne cini optimalno, jer ulazni XML fajl moze imati i po par desetina MB, a glavna tabela trenutno ima oko 30000 redova.
Razmisljao sam i o koristenju UPDATE sintakse, medjutim prilikom nekih testova pokazalo se da ona radi veoma sporo na ovolikom broju redova. Takodje, problem sa UPDATE je da rekordi koji ne postoje u update XML fajlu nece biti uklonjeni iz trenutne baze.
Ako nisam dao dovoljno informacija, to je zato sto sam pokusao da ne idem previse u sirinu.
Hvala na odgovorima