Salve, ho la necessita di aggiornare di "continuo" un db (chiamiamolo master) con dati provenienti da altri db (chiamiamoli slave).
Ovviamente, in termini di struttura, i db sono tutti uguali.
Ogni db (sia il master che gli slave) sono popolati da dati dei rispettivi processi/programmi che si appoggiano a relativo db.
Abbiamo (semplificando) che:
db A(diciamo il master) con una tabella X e un db B (diciamo il primo slave) con relativa tabella X.
il numero di tuple su tabella x di A segue una sua numerazione e diciamo che ci sono 100 record id=1,2,..100;
il numero di tuple su tabella x di B segue la sua numerazione e diciamo che ci sono 10 record id=1,2,...10;
devo copiare i record della tabella x di B sulla tabella x di A.
ogni tabella ha una chiave primaria numeriva autoincrementante.
Una prima idea potrebbe essere quella di esportare tutto della tabella x del db B tranne le chiavi primarie e poi importare i record sulla tabella master; durante la copia, mysql "riassegna" le chiavi primarie in automatico e fin qui, diciamo, che protrebbe essere fattibile.
Primo problema, mentre il "primo aggiornamento" tra le due tabelle dovrebbe andare a buon fine, durante il "secondo aggiornamento" (la popolazine della tabella x di B è arrivata a, diciamo, 20 record) ci sarebbe di nuovo la copia dei primi 10 record (record gia copiati con la prima iterazione del processo) oltre ai nuovi (con id= da 11 a 20), che ovviamente porta ad una moltiplicazione dei record non rispondente alla "somma" del numero di record delle due tabelle.
Allora si potrebbe pensare a marcare i record, gia copiati, dello slave (i due db non sarebbero piu uguali) ed esportare con condizione "se il mark=copiato" allora non esportare eccc ecc.
Forse tutto questo è possibile tramite codice php ecc ma mi sembra estremamente "macchinoso", c'è qualche altro metodo intrinseco a mysql che implementa tutto questo ?
saluti

Rispondi quotando
