The new “last write wins” default conflict resolution in 4.0 still isn’t ideal for multi-user sync scenarios. Is there any plan for Operational Transforms instead?
The current conflict resolution particularly breaks down when relationships between documents are involved. For example, a Parent object might have a children property that is an array of UUIDs. If two users modify the same Parent object by adding new entries to children, what we really need to do is merge the two arrays, not take the one that was saved 2 milliseconds later than the other. Doing that results in data corruption because we’ve discarded the new entries from the user who saved just a little bit earlier.
This is true even for single-user sync scenarios. Consider a user who modifies a document on his iPhone while offline. Later, he modifies that same document (which does NOT have the iPhone changes yet) on his Mac, saves it, and then his iPhone reconnects. All the changes from the iPhone are blown away because the “last write wins” algorithm chooses the Mac’s version. Data loss.
Bulletproof sync and smart conflict resolution are precisely what I (and everyone!) need from a DBaaS. Those are the hard problems. The new “last write wins” approach isn’t really an improvement; it’s more of a sidestep.
Is more robust conflict resolution on the roadmap?