Collaborative Text Editing Without CRDTs or OT
21–30 of 86 posts
Re: Collaborative Text Editing Without CRDTs or OT
#22Earlier quoted context omitted.
Why not just use an ever incrementing u64?
Then you need central coordination, either a single central server containing the counter, or something like Snowflake where you have multiple counters, each assigned orthogonal blocks ahead of time (that need to coordinate with a central server). UUIDs/ULIDs/etc are fully distributed, you can have two clients assign an ID without coordinating with ~0% of collision.
Re: Collaborative Text Editing Without CRDTs or OT
#23Earlier quoted context omitted.
Why not just use an ever incrementing u64?
An incrementing u64 requires either atomic increments between concurrent clients or recalculation logic to consistently find the newly incremented ID after conflicting information syncs. UUIDs just spit out a unique ID without any complexity or associations with other clients.
Re: Collaborative Text Editing Without CRDTs or OT
#24I'm not an expert on this, but the main difference with a CRDT like Automerge seems to be the server reconciliation. See for example this article [1]. Automerge handles concurrent insertions by using a sequence number and relying on an agreed ordering of agent ids when insertions are concurrent, while this scheme relies on the server to handle them in the order they come in. The article mentions this: > This contrast…
Re: Collaborative Text Editing Without CRDTs or OT
#25Earlier quoted context omitted.
An incrementing u64 requires either atomic increments between concurrent clients or recalculation logic to consistently find the newly incremented ID after conflicting information syncs. UUIDs just spit out a unique ID without any complexity or associations with other clients.
There's closely related idea that might work, though. Each device editing text could be assigned a 32-bit ID by the server (perhaps auto-incrementing). Devices then maintain a separate 32-bit ID that they increment for each operation they perform. The ID used for each character is (device_id, edit_id), which should fit nicely in 8 bytes.
Any given collaborative document will probably only see ~1k clientIds in its lifetime, so the odds of a collision are fairly low, though I'd be more comfortable with a 64-bit ID.
Re: Collaborative Text Editing Without CRDTs or OT
#26For example, if your client-sent request to insert a character fails, do you just retry the request? What if an update arrived in the intervening time? (Edit: they acknowledge this case in the “Client-Side” section, the proposal is to rewind and replay, and a simpler proposal to block until the pending queue is flushed)
From a frontend vantage I feel like there may be a long tail of underspecified UI/UX edge cases, such that CRDT would be simpler overall. And how does the editor feel to use while riding the NYC subway where coverage is spotty?
Re: Collaborative Text Editing Without CRDTs or OT
#27Is the take-home message of the post that the full complexity of CRDTs/OT is necessary only in the absence of a central server?
Re: Collaborative Text Editing Without CRDTs or OT
#28Does this finally solve collaborative text editing and its friends? Such an awesome approach.
Re: Collaborative Text Editing Without CRDTs or OT
#29Use of server reconciliation makes me think client-side reconciliation would be tricky… how do you preserve smooth editor UX while applying server updates as they arrive? For example, if your client-sent request to insert a character fails, do you just retry the request? What if an update arrived in the intervening time? (Edit: they acknowledge this case in the “Client-Side” section, the proposal is to rewind and rep…
In practice, it works quite well. Here's more info:
https://marijnhaverbeke.nl/blog/collaborative-editing.html https://marijnhaverbeke.nl/blog/collaborative-editing-cm.htm...
Re: Collaborative Text Editing Without CRDTs or OT
#30Does this finally solve collaborative text editing and its friends? Such an awesome approach.
Could it? If you and I are simultaneously editing a list of people and you are trying to order them by age and I'm ordering them alphabetically, we are still going to have to reconcile the result.