It's always a good idea to have a last change field (date) on your records. Keep in mind that, if you start to synchronize, you have to take care of conflicts.

If both sides can insert, use a partitioning scheme for your primary keys. Example: Site A starts from 1000000000, Site B from 2000000000 (make this numbers large enough or simply divide your primary key size by the number of concurrent sites).

Rough synchronize plot:


Get the modified records from source A, beginning from the last sync cycle.
For each record, check:

Is it newly inserted in A? Then insert it in B
Is it modified in A, but not in B: update B
Is it modified in A and in B: resolve conflicts on a field level.

Get the modified records from source B, beginning from the last sync cycle
For each record, check:

Is it newly inserted in B? Then insert it in A
Is it modified in B, but not in A: update A
Is it modified in B and in A: resolve conflicts on a field level.



Ideas for synchronizing records programmatically
I've noticed a number of new webapps and sites are being hosted at .io domains (the top-level domain for the British Indian Ocean Territories). A couple examples include:


Forecast.io
GitHub.io
Firepad.io


And the list goes on and on.

Is there any particular cause for the sudden popularity of .io domains?
