PDA

View Full Version : [MySQL+Java] Sincronizzare 3 database


friwer
05-06-2010, 22:03
Per raccogliere e consultare i dati utili per la mia tesi (:tie:), ho avuto la malsana idea di scrivere un'applicazione in java per facilitare l'inserimento, la modifica e l'esportazione (in pdf ed excel) dei dati stessi.
Fin qui tutto ok: ho utilizzato Hibernate per le operazioni di crud, ho installato mysql sulla macchina test e tutto funziona a dovere.
Il problema è che, all'inserimento e alla modifica dei dati, parteciperanno 3 editor diversi: il sottoscritto, un altro tesista e il prof.
L'uni mi ha concesso un database mysql + accesso vpn da utilizzare come master: l'idea è che (previa verifica della connessione) ogni editor possa consultare e modificare i dati inseriti da tutti.
In sostanza mi serve un modo per sincronizzare i 3 db locali con il db centrale, in maniera bidirezionale ed asincrona (non è detto che si lavori insieme), possibilmente senza installare ulteriori programmi al di fuori di mysql server e la gui che sto scrivendo.
Ovviamente il tutto deve essere fatto lato client: sul db dell'università posso fare solo normali operazioni amministrative, assolutamente non installare alcunché.
Che faccio mi sparo? :yeah:

friwer
06-06-2010, 18:41
uppettino :D

friwer
07-06-2010, 15:24
Accetto qualsiasi risposta ("sei un caso disperato", "non ne ho idea", "lo so ma non te lo dico"...) purché cessi questo monologo.. :sofico:

Kenger
07-06-2010, 17:07
Non ne ho idea.

:D

friwer
07-06-2010, 22:29
ti ringrazio...sarai citato nelle preghierine della sera... :D

DanieleC88
08-06-2010, 07:02
Toh, un conterraneo. :D

Non so bene se ti sono d'aiuto, ma hai provato a considerare il caso in cui scrivi una tabella contenente un campo INTEGER UNSIGNED per ognuna delle altre tabelle, nel quale salverai un numero relativo all'ultima modifica effettuata: quando accedi ad una tabella in lettura, prima di lavorare sui dati del DB locale, confronti questo numero salvato sul DB in locale con il DB in remoto, e se è minore procedi a sincronizzare quella tabella; infine potrai lavorarci su in locale senza collisioni (si spera).

Lo so che è un approccio magari rozzo e un po' semplicistico, ma non mi viene di meglio al momento. :stordita:

ciao ;)

DanieleC88
08-06-2010, 07:12
Il problema di quell'approccio è la relativa lentezza che ci sarà inevitabilmente ad ogni bisogno di aggiornare il tutto. Ovviamente il database in remoto andrebbe bloccato in lettura e scrittura ad ogni operazione di aggiornamento, altrimenti hai delle inconsistenze se qualcuno nel frattempo sta cercando di leggere quanto è stato fatto in remoto per confrontarlo col proprio DB locale. E se ci fossero delle differenze tra i campi dovresti fare una sorta di "merge", come fa Subversion.

Documentandomi meglio, scopro che MySQL ti offre un meccanismo utile al tuo scopo, in effetti: http://dev.mysql.com/doc/refman/5.0/en/replication.html. Non lo conosco, e quindi non so dirti se è il caso di usarlo o no, ma penso valga la pena di fare qualche prova. :p

ciao ;)

friwer
08-06-2010, 14:34
Nelle prime fasi di progettazione, mi sono già imbattuto in Replication. Il problema è che, da quel poco che ne so, non copre appieno lo scenario da me descritto.
Replication in MySQL features support for one-way, asynchronous replication, in which one server acts as the master, while one or more other servers act as slaves.
in pratica serve più per un backup centralizzato che ad una collaborazione (il mio caso).
Avevo anche pensato a SQLyog (http://www.webyog.com/en/downloads.php) ma le funzioni di sync sono relegate alle versioni a pagamento :muro:

banryu79
08-06-2010, 15:15
"sei un caso disperato"™

:D

friwer
09-06-2010, 12:08
"sei un caso disperato"™

:D

mio malgrado, pare che tu abbia ragione... :help: