Non, pas exactement.
Pour rappel, le système pour éviter les écritures partielles c'est quelque chose sur lequel j'avais travaillé lors de ma courte et décevante carrière de développeur pro; pour le reste et en particulier la gestion des bases de données, je ne suis pas plus bête qu'un autre mais je n'ai ni expérience ni formation particulière.

Ce que j'avais compris de ton problème est que la mauvaise qualité de la connexion te faisait craindre d'avoir à gérer des situations où tes bases ont été à moitié synchronisées (lorsque la connexion saute en cours de synchronisation). Pour résoudre cela, je proposais de hasher les bases de données (ou au moins les données que tu veux synchroniser si ça ne concerne pas toute la base) de façon à avoir une valeur très condensée, tenant sur quelques bits, donc facile à transmettre d'une base à l'autre sans corruption. Et de faire une comparaison de ces hash pour vérifier que la synchronisation s'est bien passée: si oui, écriture en base des données stockées dans des variables tampon, sinon on recommence la synchronisation à zéro. Note que si par malheur le hash était corrompu lors de la transmission les conséquences n'ont rien de grave: il y aura juste reprise de la synchronisation (qui de toute façon aura eu peu de chances de s'être bien passée si une valeur aussi légère que le hash est mal transmise).

Et bien sûr si les synchronisations sont importantes tu découpes le processus en petits morceaux pour ne pas avoir à recommencer complètement à zéro en cas de coupure de connexion mais seulement au début du morceau en cours. Comme dit précédemment, je n'ai aucune idée de comment faire celà avec MySQL.

Et évidemment, si j'ai mal compris ce que tu voulais faire, ma proposition tombe forcément à côté de la plaque.

Par ailleurs tu n'as pas répondu à ma question demandant si ce sont les mêmes données qui peuvent être modifiées dans les 5 villages? Ni, si oui, comment tu prioritises une modification sur l'autre?

On 20/06/2014 18:51, T. Idriss TINTO wrote:
Ce que tu propose, c'est que j'écrive un code qui, en un temps t compare
la BDlocal avec la BDcentrale et si elles sont différentes, que des
données manquant dans l'une soient hashées en envoyées dans l'autre pour
mise à jour. C'est bien ça?
Dans un premier temps, j'essaye de voire si je ne peux pas avec des
technologies existantes configurer MySQL pour qu'elle puisse gérer elle
même les synchronisations. ça sera nettement plus efficace je trouve.
Si je ne trouve pas une façon de la faire avec des technos. existantes,
je me mettrai au code :)

Merci

Le 20/06/2014 17:48, Lien Rag a écrit :
hasher tes données et comparer systématiquement les hash ne résoud pas
ton problème?
Et si tu ne crains pas une attaque tu peux même utiliser un simple MD5
si j'ai bien compris, il n'y a aucun risque de confusion accidentelle
(par contre le MD5 est vulnérable à une imposture par quelqu'un de
vraiment doué)...

On 20/06/2014 13:26, T. Idriss TINTO wrote:
Bonjour,

Merci Lien, c'est surtout la conception qui m’intéresse.
Les écritures partielles, je n'aurai pas à m'en soucier si j'arrive à
adapter les concepts existants.
L'exigence est que l'ensemble des bases doivent avoir les même données,
pas en temps réel mais au moins à la fin de la journée. Donc aucune
architecture n'est encore choisit.
La réplication maitre-esclave de MySQL aurait été bien, mais les
écritures se font dans le maître, alors que dans mon cas, je n'ai aucune
assurance que le maître restera connecté à l'esclave.
Apparemment un système multi-maitre marcherai, mais je ne maîtrise pas
encore bien le comportement du système en cas de déconnexion puis
reconnexion d'un maître.

Regards

Le 20/06/2014 00:02, Lien Rag a écrit :
Pour le code lui-même, je ne peux pas t'aider...

Pour la conception, je suppose que ce que tu crains c'est des
écritures partielles?
Est-ce que tu as une base de données mère?

Le principe dans ce genre de cas sensible c'est de ne pas faire
d'écriture en dur (dans la base elle-même) avant d'avoir eu
confirmation que tout c'est bien passé: tu stockes dans des variables
temporaires en attendant que toute l'opération d'échanges de données
soit terminée. A ce moment-là tu envoies une validation et les
variables temporaires sont toutes écrites en base.

Maintenant peut-être que c'est évident pour tout le monde, dans ce cas
je me tais et laisse les pros parler.

On 19/06/2014 14:30, T. Idriss TINTO wrote:
Bonjour à tous,

J'ai une problématique et je viens quérir votre aide.

J'ai 5 PC répartis dans 5 villages et sur lesquelles tourne une
application exploitant une base de données MySQL et j'ai un serveur
central dans une autre zone géographique.
Je veux qu'à la fin de la soirée, toutes mes 6 bases MySQL soient
synchronisées.

Comme technologie d'interconnexion, j'utilise un GPRS pas du tout
stable.

Merci d'avance





--
Ce message a été envoyé à la liste [email protected]
Gestion de votre abonnement : http://dakarlug.org/liste
Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug
Le site du DakarLUG : http://dakarlug.org

Répondre à