On 6 Oct 2010, at 1:29pm, David Haymond wrote:

> I am completely new to SQLite (and SQL in general), and I am currently 
> working on an iPhone app that uses the embedded SQLite engine to cache 
> offline data. What is the best way to implement synchronization capabilities 
> (change tracking, state tracking, etc.) in a separate table (such as meta), 
> so that the app can sync to the server?
> 
> My database contains two tables: locations and trips. trips is the child of 
> locations.

Does it actually have to synchronise ?  In other words, are changes made to 
both copies, or only to the copy on the iPhone ?  If changes are made to only 
one copy, you can just copy that copy (if you see what I mean).

If changes are made to both copies, you're in for a world of hurt because you 
really need to separate out intentional changes from the changes actually made. 
 One way to do it is to keep a log of the operations executed since the last 
synch.  For example you could make another table 'changelog':

timestamp       operation
2398479         INSERT INTO locations ...
2402372         UPDATE trips ...

To synchronise you just execute the log, in timestamp order, on all the other 
copies.  This does not work properly under all circumstances because UPDATE 
commands can interfere with one-another, but in a simple database it should 
work fine.

To do things properly you need to maintain a separate unchanged model, synch it 
with all the satellites, then copy it to all the satellites.  It's complicated 
and requires lots of bytes moved about.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to