Domanda

La mia domanda è molto simile a questa . Tuttavia, sono su MySQL e cerco la tecnologia "più bassa" soluzione che posso trovare.

La situazione è che ho 2 database che dovrebbero contenere gli stessi dati ma che vengono aggiornati principalmente quando non sono in grado di contattarsi. Ho il sospetto che ci sia una sorta di clustering o cosa master / slave che sarebbe in grado di sincronizzarli bene. Tuttavia, nei miei casi questo è un grosso problema in quanto si tratta solo di un DB scratch per uso personale.

Qual è un buon modo per farlo?

Il mio approccio attuale è quello di avere una tabella federata su una di esse e, di tanto in tanto, riempire i dati sull'altro filo con un insert / select. Diventa un po 'contorto cercando di gestire le chiavi primarie e cosa no. ( insert ignore sembra non funzionare correttamente)

P.S. Posso facilmente creare una query che seleziona le righe da trasferire.

È stato utile?

Soluzione 2

La mia soluzione attuale è

  • imposta una tabella federata nella casella di origine che prende la tabella nella casella di destinazione
  • imposta una vista nel riquadro di origine che seleziona le righe da aggiornare (come join della tabella federata)
  • imposta un'altra tabella federata nel riquadro di destinazione che acquisisce la vista nel riquadro di origine
  • rilascia un INSERT ... SELECT ... ON DUPLICATE UPDATE sulla casella di destinazione per eseguire il pull.

Suppongo che potrei semplicemente prendere la tabella di origine e fare tutto in una volta, ma in base ai log delle query che ho visto, immagino che finirei con circa 20K query in esecuzione o circa 100-300 MB di trasferimento dati a seconda di come avvengono le cose. La configurazione sopra venduta comporta circa 4 query e un numero di dati trasferito leggermente inferiore a quello effettivamente necessario.

Altri suggerimenti

La replica integrata di MySQL è molto semplice da configurare e funziona bene anche quando i DB sono disconnessi per la maggior parte del tempo. Direi che configurarlo sarebbe molto più semplice di qualsiasi soluzione personalizzata là fuori.

Vedi http://www.howtoforge.com/mysql_database_replication per istruzioni, dovresti essere attivo e in esecuzione in 10-15 minuti e non dovrai pensarci più.

L'unico aspetto negativo che posso vedere è che è asincrono, ovvero. devi avere un master designato che ottiene tutte le modifiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top