Synchronisation de tables entre plusieurs DB

Bonjour,

Je suis confronté à un problème de taille pour moi, je fais appel à
vos lumières, merci d’avance !

Je dois déployer plusieurs appli rails, qui ont à peut prêt le même
schéma de DB.
Chacune des applis est autonome en ce qui concerne les usages courant
tels que création de compte, commentaire etc…

50% du contenu de ces applis est identique et provient d’entré dans la
BDD de notre appli principal.
Donc une fois que de nouvelles entrés ou modification ont lieu (sur
environ 25 tables) il faut que les changement se repecutent sur
chacune des autres applis.

Si je résume, on à 50% du contenu de la DB de chaque Appli qui est
quasi équivalent, mais il n’y a que sur une appli que nous réalisons
les changements, il faut donc qu’ils se répercutent sur les autres.

L’idéal aurait été d’utiliser une seule base pour toutes les applis
mais cela n’est pas possible car ce n’est que 50% de la base qui est
commune.

La seule solution que je vois est de faire une sorte de sync toute les
nuit, via un flux XML… mais ca va être lourd !

Est-ce que quelqu’un voit une autre solution possible ?
ou alors personne n’a rien compris à mes explication ??? :smiley:

Merci de m’eclairer…

Guillaume.

Ce serait ptet l’occasion d’utiliser ActiveResource :

Les 50% communs sur un base unique acessible en REST par tous les
autres.

A supposer aue ça n’occasionne pas des problèmes de perfs bien sûr.


IciMarché fédère l’e-commerce de proximité
http://icimarche.fr

Merci pour la réponse.
je vais me renseigner de ce pas sur ActiveResource …

D’autres idées ?
(on sait jamais :))

On 21 mai, 16:28, “philippe lachaise” [email protected]

On 21 mai, 16:37, guillaume [email protected] wrote:

Merci pour la réponse.
je vais me renseigner de ce pas sur ActiveResource …

D’autres idées ?
(on sait jamais :))

Pour ne pas pénaliser les performances,
Tu peut également regarder du coté ActiveMessaging, afin d’effectuer
les mises des modèles de manière asynchrone.

ci-dessous un lien qui correspond bien à ton besoin

http://www.shaneharvie.com/2007/06/asynchronous-messaging-with-rails.html

Merci Mourad,
de prime abord ca semble plus simple à mettre en place qu’une solution
sous ActiveRessource…
après je me demande qu’elle est l’impact général sur les perfs, et si
c’est possible d’envoyer le message à plusieurs applis.

Le problème peut aussi se concevoir du point de vue des données
uniquement. Avec du MySQL il est possible de faire de la
synchronisation entre bases et ne prenant en compte que certaines
tables…

Bon courage

Greg

Le 21 mai 2008 18:00, guillaume [email protected] a écrit :

???
Soit je ne comprend plus ma réponse, soit je ne comprend pas bien ta
question… Ce qui deviens de plus en plus fréquent !

Greg

Le 21/05/08, guillaume[email protected] a écrit :

que je ne comprenne rien !

Le 21/05/08, Gregoire LEJEUNE[email protected] a écrit :

Tout a fait sauf que je dois prendre en compte aussi les attributs
(les columns)… et la replication mysql ne le prend pas en compte :confused:

On 21 mai, 18:13, “Gregoire LEJEUNE” [email protected]

j’ai dit (enfin je crois) que mes tables à répliquer étaient à 95%
équivalentes.
Sauf que sur les appli déployés (hors master), je dois ajouter une
colonne dont le contenu est spécifique par application.

La réplication Mysql ne permet pas d’exclure des colonnes de tables…
la est le pb de cette solution :(…

On 21 mai, 18:44, “Gregoire LEJEUNE” [email protected]

On 21 mai, 18:46, guillaume [email protected] wrote:

j’ai dit (enfin je crois) que mes tables à répliquer étaient à 95%
équivalentes.
Sauf que sur les appli déployés (hors master), je dois ajouter une
colonne dont le contenu est spécifique par application.

La réplication Mysql ne permet pas d’exclure des colonnes de tables…
la est le pb de cette solution :(…

Si les colonnes en question ne sont pas présentes dans la base de
donnée maitre, elle ne devrait pas être affectées par la réplication,
non ?

Hum a verifier en effet… mais bon ca me parait pas très flexible
comme solution la replication Mysql.
Surtout que je n’ai pas forcément besoin de qqch en temps réel

J’ai trouvé ce post,
http://www.eribium.org/blog/?p=112

Apparement il s’agit d’un plugin pour faire ce dont j’ai besoin…
par contre question doc c’est pas ca !! :slight_smile:

guillaume wrote the following on 21.05.2008 18:46 :

j’ai dit (enfin je crois) que mes tables à répliquer étaient à 95%
équivalentes.
Sauf que sur les appli déployés (hors master), je dois ajouter une
colonne dont le contenu est spécifique par application.

Pourquoi ne pas modéliser tes données de manière à ce que ces
informations, au lieu d’être dans une colonne supplémentaire, soient
stockées dans un modèle séparé relié au premier par une relation 1-1 ?

Lionel

http://www.eribium.org/blog/?p=119

la page sur le plugin

Ce n’est pas bete,
je vais y réfléchir mais à première vue je pense que ca va devoir
m’obliger à reecrire bcp de code :(…

merci

On 21 mai, 19:19, Lionel B. [email protected]

guillaume wrote the following on 21.05.2008 19:25 :

Ce n’est pas bete,
je vais y réfléchir mais à première vue je pense que ca va devoir
m’obliger à reecrire bcp de code :(…

En même temps, cela veut dire que tu pourrais probablement n’utiliser
qu’une seule base…

Lionel

Hum non :slight_smile:

On 21 mai, 19:26, Lionel B. [email protected]

Arthur Pétry wrote the following on 23.05.2008 14:05 :

[…]
(A part que les has_many ne marcheront pas si tu as des liens entre
les 2 bases)

Sûr ? Les :joins et :include de find et le :through de has_many ne
marcheront clairement pas et il n’y aura pas d’intégrité référentielle
ça c’est évident.
Mais en dehors de cela je ne vois pas d’obstacle technique à ce que les
associations fonctionnent pour les accès simples.

Lionel

On 23 mai 08, at 14:12, Lionel B. wrote:

Mais en dehors de cela je ne vois pas d’obstacle technique à ce que
les
associations fonctionnent pour les accès simples.

Effectivement, je n’ai pas testé les accès simples, mais je pensais
aux includes & co.
Bref ça dépend de ce que fait l’appli en question.

Arthur

On 21 mai 08, at 16:26, guillaume wrote:

L’idéal aurait été d’utiliser une seule base pour toutes les applis
mais cela n’est pas possible car ce n’est que 50% de la base qui est
commune.

Quand tu dis 50% c’est 50% des lignes d’une même table ou 50% des
tables ?

Car si le partage se fait par table, rien ne t’empêche d’avoir
certains ActiveRecord qui se connectent à une base commune, et les
autres à une base par appli.

(A part que les has_many ne marcheront pas si tu as des liens entre
les 2 bases)

Arthur