-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request: δ-CRDTs #50
Comments
Sorry for taking so long to reply, work has been taking most of my time this past week. I personally don't have a need for this, but I'm not against it and If you have a concrete use-case (and it sounds like you do) to drive the design of delta CRDT's I'm very happy to work with you to get them added into the library. The reason why I'm hesitant to just go ahead and implement some papers directly is that there is a big engineering challenge in make these algorithms actually usable, as an example, take the problem of choosing at what point the delta should be calculated and shared across the network. Do the two actors negotiate with each other to compute the minimal delta's between the two of them? Does each actor collect up a log of delta's and distribute those (essentially a more compressed CmRDT)? Or do actors keep track of what they had sent to other actors and only compute delta's since last sync? These different approaches likely will influence the design of the CRDT It sounds like you do have a concrete use-case that could drive these decisions so I would say you are in the best possible position to help with an implementation. I'd be more than happy to help you anywhere I can. |
Honestly, I was very pleased with how quickly you responded!
I was thinking of a simpler approach; define a set of traits that users can implement that handle some of those details, and provide a small set of supporting data structures that can be used as building blocks. I don't have enough experience with CRDTs to engineer them myself, so please view the following as thoughts that need to be mutually worked on.
Thank you! But as you noted, this is going to require significant engineering effort. I think what we should do for the moment is spend sometime designing things as far we're able to. Do you have a lot of users, or a forum where you can post requests for comment? It might be something worth discussing with a larger group. |
A brief comment: you might probably know about latest research results about delta-state based CRDT optimization, showing that straightforward antientropy algorithms performs pretty well, having even better network transmission rate then op-based. https://blog.acolyer.org/2019/03/11/efficient-synchronisation-of-state-based-crdts/ |
@DePizzottri Actually, I didn't know about that, so thank you for the link! I'm mostly interested in just using the library, CRDTs aren't central to my research. But thank you again for the link. |
@ngortheone Thank you for the link to the paper! I will read it shortly. As for the Haskell and Scala implementations, since the rest of my codebase is in Rust, I'd prefer a Rust library. Crossing language boundaries always seems to hurt me at some point or other. |
@ckaran Judging on the past month and a bit, my schedule does not seem to let me be of much help to you on this project. |
@davidrusu I understand your being overworked, and unfortunately, I'm in the same boat. This will have to wait until after I defend my PhD. |
I agree, it looks like OP-based CRDT, but I spotted there are a few important differences:
Interestingly, Shapiro[2] defines two mixed types: operation-based emulation of state-based object and state-based emulation of operation-based object. After reading the definitions carefully I think it might [1] https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type#Operation-based_CRDTs |
If you mean the dependence on some incarnations of vector clock/version vector as causality tracking mechanism, that's true. And that's true for most delta-state based CRDTs. |
This is a feature request/future plans kind of comment.
Do you have any plans to implement δ-CRDTs in the future? I explained my use cases in this issue, but I suspect that others have similar requirements.
The text was updated successfully, but these errors were encountered: