| Does anyone take issue with the fact that CRDTs seem to require keeping a history of every change ever made to the document? Seems like it could get unwieldy very fast. Especially, in the face of a bad actor spamming a document with updates. I've considered using CRDTs in a few projects now, but the requirement to keep a running log of updates forever has ruled them out. I've ended up using other less sound (more prone to failure), but more practical methods of doing sync. Perhaps, I'm missing something. Wouldn't be the first time. Are there alternatives without this requirement, or that would at least allow a cap on the update log? |
Here's a very simple example: If there are only 5 users concurrently editing a document and each user has seen operations o1...oN, then you can safely compress the data for o1...oN.
Depending on the CRDT type you may not need to store any log at all. For an add-only set, for example, you only need to store the elements.
I think what's harder to solve is the metadata overhead problem. Most CRDT based text editors have a huge per-character overhead. As Martin mentioned, Automerge used to have a overhead of ~200bytes per character, but using a new binary encoding format they were able to reduce the overhead down to 1.5-7 bytes per character. (https://speakerdeck.com/ept/crdts-the-hard-parts?slide=67).