Citat:
God_Of_HellFire:U koliko je neko imao iskustva sa sinhronizacijom dve baze (bez obzira koje) neka kaže kako je rešio ovaj problem.
Radio sam ja u 4D-u. Osnovna ideja je da prvo imaš uporedni spisak tabela i polja na serveru i klijentu koja treba sinhronizovati (u 4D terminologiji se to zove bind). Zatim, u svakoj tabeli koja se sinhronizuje treba da imaš tzv. timestamp polje koje ti govori kada je taj record poslednji put sinhronizovan, u mom slučaju timestamp je jedno longint polje koje predstavlja broj sekundi od odredjenog datuma. Ovo može da bude i kombinacija polja tipa date i time ili već kako je prirodno u alatu u kojem radiš. U bazi imaš jedan globalni podatak kada si poslednji put uspešno obavio sinhronizaciju. Pred svaku sinhronizaciju prodješ kroz bind i napraviš selekcije recorda u svakoj tabeli koje treba sinhronizovati.
Takodje, kada je reč o brisanju recorda ja sam se odlučio za taktiku da imam posebnu tabelu u bazi u kojoj beležim koji record iz koje tabele treba obrisati. To znači da kada korisnik na klijentu hoće da obriše record iz neke tabele koja je u bindu za sinhronizaciju, prethodno u trigeru podatak o tom slogu upišeš u ovu posebnu tabelu obrisanih slogova, pa ga i fizički obrišeš.
Svaki od klijenata mora da ima i svoji kod jedinstven medju klijentima, aplikacija koju sam ja radio je bila namenjena agencijama za prodaju nekretnina u Španiji, a tamo svaka agencija mora da bude učlanjena u udruženje agencija i svaka agencija dobija jedinstveni broj kao član udruženja, pa je to meni bio idealni kandidat za šifru klijenta.
Samu sinhronizaciju je fizički bilo moguće ostvariti na nekoliko načina: upotrebom 4D Opena (to je API za pristup 4D Serveru iz drugih aplikacija, ali i iz drugih 4D aplikacija), FTP-om ili mailom. U prvom slučaju sam klijent se kačio na server i komandama direktno ažurirao bazu na serveru, dok u drugom slučaju klijentska aplikacija u jedan ili nekoliko BLOB-ova spremi sve izmene i pošalje to na server, a sam proces ažuriranja se obavlja na serveru.
Ovo sve radi, praktično u jednom smeru, od klijenta ka serveru. Ukoliko je potrebno napraviti potpunu sinhronizaciju, onda moraš i na serveru da vodiš računa šta se, kada i sa kojim klijentom poslednji put sinhronizovalo pa da server spremi klijentu podatke koje će ovaj da preuzme prilikom sledeće sinhronizacije.