Visualizzazione dei risultati da 1 a 4 su 4

Discussione: sincronizzazione mysql

  1. #1

    sincronizzazione mysql

    La mia e' una richiesta un po' particolare, tutti bene o male si sono scontrati prima o poi con le sincronizzazioni (copio il record, lo flaggo etc.), quello che cerco io e' in realtà una sincronizzazione client server fra istanze simili di mysql.
    In pratica sto cercando una cosa molto simile ad oracle lite, ma per MYSQL

    Problema (semplificato):
    un cliente deve gestire un'applicazione in 2 sedi separate. Una delle 2 sedi pero' è sprovvista di connessione stabile (problema INSORMONTABILE), quindi è necessario installare una struttura client server che possa essere sincronizzata tramite un tasto del client.

    Scenario:
    - Server centrale con N tabelle e un'applicazione online
    - Clients (saranno 2, ma il numero è irrilevante), ogni client è formato da un'applicazione LOCALE PHP + un DB mysql formato da un sottoinsieme delle tabelle del server centrale

    In pratica ogni qualvolta su un client viene inserito/modificato/eliminato un record, lo stesso dato dovrà essere riportato sul server, e quindi successivamente propagato sugli altri client.

    Il problema è che le modifiche possono essere concorrenti, ad esempio se sia sul client A che sul client B viene modificato lo stesso record, dovra' essere tenuta come valida l'ultima modifica, indipendentemente da quando viene sincronizzato il client A o il client B. Questo deve essere applicato per QUALSIASI tabella, e potrebbe a mio avviso gestito con una tabella di messaggi simile a questa:

    codice:
    CLIENT  | TABELLA  | RECORD | TIPO_OPERAZIONE  | DATA_OPERAZIONE  
    -------------------------------------------------------------------
    A       | articoli |   A002 | insert           | 2010-01-01 01:10 
    A       | articoli |   B001 | update           | 2010-01-04 02:10 
    B       | articoli |   B001 | update           | 2010-01-04 03:10
    La tabella in pratica comunica al server quali sono le operazioni che sono state fatte sulle tabelle.
    in questo esempio sia A che B hanno fatto un'update al record B001 della tab articoli, pero' l'ultima modifica è quella fatta da B, e quindi sarà quella da tenere valida (anche se A sincronizza con il server dopo che l'ha fatto B).
    Questo è solo un esempio, però la cosa potrebbe essere molto più complessa, quindi chiedo: nessuno si è mai scontrato con un problema simile? sapete se esistono script che trattanola cosa?
    Io sto pensando di produrre qualcosa di generico, e credo che potrebbe essere utile a molti... Parliamone!


  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Be', partendo dai principi che hai enunciato, la soluzione non mi sembra difficile, e non ti servono "tabelle di messaggi".
    Basta che ciascuna delle tabelle interessate abbia una colonna contenente il timestamp dell'ultima modifica, e quando fai la sincronizzazione aggiorni il database principale per le righe che hanno un valore più recente nella tabella client.

  3. #3
    e se una riga viene cancellata?
    e se 2 client modificano lo stesso record?
    la fai troppo semplice, pensa primo alla concorrenza, secondo che il flusso di dati è bi-direzionale, quindi quando il client sincronizza prima di mandare su i suoi aggiornamenti deve ricevere quelli del server.
    se fosse così facile non esisterebbero strumenti per la sincronizzazione delle applicazioni tipo oracle lite.
    Il problema è che volevo capire se c'e' qualcuno che ha già affrontato l'argomento, che mi potesse spiegare se esiste qualcosa di simile per MySQL


  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se due client modificano lo stesso record, hai detto che vale l'ultima modifica no? Quindi col mio sistema sei a posto. Per la sincronizzazione dal server vale lo stesso principio, se il client ha una modifica più recente del dato presente sul server rifiuta l'update.

    L'ipotesi della cancellazione prima non l'avevi fatta. Premesso che la cancellazione "fisica" dovrà avvenire solo sul server e non sui client, che dovranno mantenere un flag di cancellazione col timestamp relativo, rimane da stabilire come ti devi comportare se un client modifica un record dopo che un altro client l'aveva cancellato.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.