3 ms·
CRDTs are really cool if your merging function behaves intuitively in the context of your application. You can easily implement a distributed VCS by using the L
by cranium 4y ago
CRDTs are really cool if your merging function behaves intuitively in the context of your application. You can easily implement a distributed VCS by using the Last Writer Wins, but it would be a nightmare to work with – imagine having your modifications rolled back because someone committed after you.
In the same way some operations are embarrassingly parallelizable (think adding elements to a set), some operations are inherently conflicting: editing elements of the same text, image, directory,... More than trying to decide in all cases which modification wins, we should detect when there are multiple legitimate options and ask the user to choose. Like a merge conflict in Git for example.
The application state feels so clean when conflicts can't arise or are automatically dealt with. But we have to acknowledge there are only so much datastructures that can merge automatically and still be intuitive for the user.
- preseinger 4y ago+1, I think the most valuable lesson we've learned w.r.t. CRDTs at the moment is that valid merge operations basically don't generalize, and basically have to leverage properties that are application-specific. This isn't a fatal flaw, it just constrains the design space.