Le 04/04/2012 07:49, Une Bévue a écrit :
> s'il y a modifs simultanées des deux côtés, je ne vois pas comment
> faire.
En fait, cela ne peut se produire.
Si tu n'avais qu'une seule base et deux utilisateurs qui modifient un
enregistrement en même temps, le SGBD ferai passer une requête avant
l'autre, et s'il n'existe aucun trigger sur le ONCREATE, alors en gros
la modification du premier serait purement écrasé.
donc si tu as l'exacte même date de modification, tu peux définir
l'ordre que tu veux cela n'a pas d'importance.
> sinon avoir une table de modifications temporaire vidée après synchro.
>
> restent les cas où il y a eu insertion, je ne vois pas comment gérer le
> "rowid SERIAL PRIMARY KEY", puis-je forcer sa valeur ?
Il me semble que oui tant que l'id n'existe pas (et qu'il n'existe pas
d'id superieur)
Enfin ça reste a vérifier.
> par exemple, j'ai incerré un item de chaque côté, sur des bases
> supposées synchronisées, ils ont donc un contenu différent et un rowid
> identique.
Tout le problème est là!
Tes deux enregistrements on effectivement le même ID !
Pour peu que tu ai en plus crée d'autre enregistrement ayant une
jointure avec le premier, alors là c'est la cauchemard.
En fait il faut raisonner "Object" et non plus "Enregistrement".
En gros il faut dire: je dois synchronier un objet. Peu importe la
valeur de ses serials (qui ne sont plus représentatif dans ton cas).
Tu relis l'objet entièrement (donc éventuellement plusieurs
enregistrement liés entre eux) et tu le recrée dans la base de données
destination.
Essayer de conserver la valeur des sérials n'a aucun intérêt ici ! Ils
ne peuvent pas servir de clés.
Il te faut une clé algorithmique. C'est à dire calculée en fonction de
la valeur de l'objet qui soit différente à chaque nouvel objet, même si
deux objets sont créés en même temps sur deux bases de données différente.
Pour être clair, si tu crée les même "items" sur tes deux base de
données, exactement en même temps, il faut que tu sache qu'il ne s'agit
pas du même items répliqué mais bien de deux items distincts.
Donc tu l'as compris, ton item doit contenir une information concernant
la machine qui l'a crée (ton portable ou ton micro).
Cela peut être l'IP, l'adresse MAC, un cookie quelconque, ...
> je garderais, par exemple, la ligne correspondant à l'insertion la plus
> ancienne et incrémenterait le rowid de la plus récente.
>
> Y a t'il des tutos spécifiques à ce genre de pb ?
Sans doute !
http://www.google.fr/webhp?sourceid=chrome-instant&ix=seb&ie=UTF-8&ion=1#hl=fr&output=search&sclient=psy-ab&q=synchronisation%20sgbd&oq=&aq=&aqi=&aql=&gs_l=&pbx=1&fp=f8ef0e11bfe086e9&ix=seb&ion=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&biw=1920&bih=1075
Etienne