Sto realizzando un'app per iOS, beh, in realtà due. L'App A sarà in grado di scrivere TO-DO su un database MySQL remoto, e l'App B sarà in grado di leggere ciò che l'App A ha scritto / modificato. L'app B deve essere sempre aggiornata e ci possono essere più di un'istanza di App B in esecuzione su diversi iDevice. L'app B ha archiviato la copia quasi esatta di ciò che l'App A ha scritto sul DB MySQL remoto, in un DB SQLite locale. Le operazioni MySQL sono gestite da un semplice script PHP. Il problema è come aggiornare il DB locale dell'app B quando qualcosa cambia nel database MySQL remoto (ovvero quando l'app A scrive qualcosa di nuovo o modifica qualcosa esistente). Ho trovato due soluzioni possibili: la prima è di dire al PHP l'last_row_id (l'id dell'ultima riga che l'App B ha ricevuto dal server) in modo che il PHP possa chiedere a MySQL di ottenere tutte le righe con un ID maggiore ( ID è un valore di incremento automatico sulla tabella MySQL).
Ma ... Questo non aiuterà a scoprire gli elementi modificati.
La seconda soluzione che ho pensato è stata quella di mettere una colonna "last_updated" su MySQL con un timestamp e aggiornarla ogni volta che la riga cambia. L'app B dovrebbe memorizzare il timestamp dell'ultima sincronizzazione e riportare questo valore a PHP in modo che possa richiedere a MySQL tutte le righe che hanno una data / ora maggiore di quella che riceve dall'app B.
Ma ... Entrambe le soluzioni falliscono quando MySQL è in cluster e in cluster (e questo è quello che mi interessa di più). L'approccio di auto-incremento dell'ID fallisce perché non sarà più progressivo (vedi auto_increment_offset e auto_increment_increment), e l'approccio di timestamp non sarebbe affidabile perché l'orologio può essere fuori sincrono su qualsiasi server MySQL.
Come risolveresti questo problema in modo affidabile?