Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Php + MySQL: mantenere sincronizzate due tabelle su due db diversi

    Buon giorno a tutti,
    ho due database su due diversi server, diciamo 'dummy_db_source' e 'dummy_db_dest'.
    In entrambi i database è presente la tabella 'dummy_table' che contiene alcuni campi:

    id
    name
    active (il record è attivato o meno, serve per capire se è visualizzabile dall'utente o meno)
    added (data di aggiunta del record)
    modified (data dell'ultima modifica del record)

    Quello che vorrei riuscire ad ottenere è scaricare ad intervalli di tempo regolari i dati da 'dummy_db_source.dummy_table' per copiarli in 'dummy_db_dest.dummy_table'.

    In un primo momento ho ragionato così:
    1) Ottengo la data di aggiunta dell'ultimo record in dummy_db_dest.dummy_table
    codice:
    $last_add = SELECT added FROM dummy_db_dest.dummy_table ORDER BY added DESC LIMIT 1
    2) Seleziono tutti i record maggiori di quella data da dummy_db_source
    codice:
    SELECT * FROM dummy_db_source.dummy_table WHERE added > $last_add ORDER BY added ASC
    3) Quindi salvo i dati così ottenuti in dummy_db_dest.dummy_table

    Con questo sistema, però, ottengo solo i nuovi record, mentre ho la necessità di sincronizzare anche eventuali modifiche ai record precedenti (dummy_db_source.dummy_table.added <= $last_add)
    Continuando con questo ragionamento, quindi, dovrei scrivere un altro script che si occupi solo dell'aggiornamento. E problemi non ce ne sarebbero se non fosse che
    1) I record sono moltissimi (parliamo di migliaia)
    2) L'operazione di synch andrebbe eseguita almeno una volta al giorno

    E stiamo parlando quindi di un bel po' di dati.

    La domanda, quindi, è: esiste un modo per velocizzare e semplificare l'operazione o l'unica via percorribile è quella dei due script, uno per l'aggiornamento e l'altro per il download dei nuovi dati?

    Grazie mille,
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  2. #2
    Non puoi memorizzare direttamente i dati nell'uno e nell'altro db??

  3. #3
    No, perchè è un'applicazione web.
    Quindi l'utente accede al frontend che sta su un server e che è collegato ad un database.
    Su un altro server, invece, vengono eseguite le operazioni più complesse che necessitano dei dati che appunto devo copiare.

    Uso due server diversi perchè in questo momento non ho intenzione di investire in infrastrutture cloud che non potrei sfruttare al massimo (prima che me lo chiedi ).
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da mircov
    No, perchè è un'applicazione web.
    Quindi l'utente accede al frontend che sta su un server e che è collegato ad un database.
    Su un altro server, invece, vengono eseguite le operazioni più complesse che necessitano dei dati che appunto devo copiare.

    Uso due server diversi perchè in questo momento non ho intenzione di investire in infrastrutture cloud che non potrei sfruttare al massimo (prima che me lo chiedi ).
    E' una cosa di cui non ho mai avuto bisogno, ho trovato questo link, magari l'hai già letto.

    http://dev.mysql.com/doc/refman/5.5/en/replication.html

    Nel caso fosse la soluzione che ti serve mi piacerebbe sapere se l'implementazione è difficile e se ti va bene.

    Ciao :-)

  5. #5
    Appunto sul server su cui c'è il frontend eseguo un'operazione che va a modificare il database A ok? lo script che esegue la query per il database A, non può effettuare una nuova query ma sul database B?

    Anche se ci potrebbero essere dei problemi se sul frontend si sono diversi utenti collegati

  6. #6
    @gianiaz: grazie mille! Appena riprendo in mano questo problema cerco di capire se questa soluzione può andar bene o meno e poi ti faccio sapere, nel caso lo facessi, se l'implementazione è complicata o meno.

    @Ischiawebsoft: no, perchè ho strutturato l'applicazione in modo che il frontend non acceda mai al server (e quindi al db) del backend. Questo per problemi infrastrutturali del server che non sto qui a spiegare. Ma uno dei motivi principali è di velocità (prevedo di gestire molti utenti e il server del backend non dispone di molta banda: le operazioni potrebbero diventare lunghe).

    Tutte queste operazioni di synch e recupero e scrittura dati sono effettuate da un altro server, b appunto, che oltre ad avere il db esegue a ciclo continuo anche dei cronjob che si occupano di svolgere tutte le varie operazioni di calcolo, synch, ecc.

    La soluzione migliore, al momento, rimane quella di usare la replication...
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.