Managing delete / edit on the same tree item in a multi-user app (CRDTs)
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Conflict-free Replicated Data Types (CRDTs) are critical in developing distributed systems where multiple users can edit the same data concurrently without the need for constant connectivity to a central server. This approach is especially relevant when managing operations like delete or edit on the same tree item in a multi-user application. This article delves into the technical nuances of employing CRDTs for managing such edits and deletions effectively.
What are CRDTs?
CRDTs, or Conflict-free Replicated Data Types, are data structures that powerfully resolve conflicts inherent in distributed systems. These types enable multiple participants to operate on data independently and simultaneously, with eventual consistency guarantees without requiring immediate conflict resolution mechanisms.
Types of CRDTs
There are primarily two types of CRDTs:
- State-based CRDTs (CvRDTs): These propagate state by merging, ensuring that each state is monotonically increasing according to a partial order.
- Operation-based CRDTs (CmRDTs): These propagate operations instead of states, which need to be commutative (i.e., they can be applied in any order without changing the result).
For managing tree structures, operation-based CRDTs are commonly used because they provide more granular control over changes and are more efficient in terms of data transmission.
Managing Tree Items
In a multi-user scenario, a tree might represent a hierarchical structure such as folders and files or organizational hierarchies. Each node in the tree could be a potential site for concurrent operations. Typical operations might include creating a new node (add), modifying a node’s data (edit), or removing a node (delete).
Examples and Technical Explanation
Assume a scenario in which two users concurrently interact with the same node of a tree:
- User A deletes a node.
- User B edits the same node.
Using CRDTs, these operations would be handled as follows:
To manage these operations, each node in the tree can be associated with a unique identifier and a version vector. The version vector aids in understanding the causal relationship between different operations.
- Delete Operation: When a delete operation is issued, the operation, along with the node ID and the current version vector, is propagated to all replicas.
- Edit Operation: Similar to deletion, the edit operation is tagged with the node ID and version vector and then propagated.
When these operations reach different replicas, CRDTs ensure that they are merged in a way that respects the causality and user intentions as much as possible.
For example, if a delete operation and an edit operation are concurrent, CRDTs can employ policies like:
- Bias towards delete: Prioritize deletion over edits. Any concurrent edit operation will be nullified.
- Bias towards edits: Allow edits to override deletions, perhaps by resurrecting the deleted node with the edited content.
Implementation Challenges
Implementing CRDTs for tree-based structures involves challenges such as ensuring efficient propagation of changes, managing larger payloads (especially in state-based CRDTs), and handling deep trees with numerous nodes. Moreover, detecting and merging concurrent changes requires careful design to respect causality without overwhelming system performance.
Key Points Summary
| Key Aspect | Description |
| Conflict Management | CRDTs manage conflict without central oversight. |
| Types of CRDTs | State-based and Operation-based. |
| Node Operations | Add, Edit, and Delete. |
| Challenges | Payload management and operation propagation. |
Conclusions
CRDTs offer a robust framework for managing conflicts in a multi-user environment, specifically for operations on tree items like edits and deletions. By leveraging unique identifiers and version vectors, CRDTs help maintain data integrity and consistency even when facing simultaneous updates from multiple users. The choice of strategy (e.g., preferring deletions over edits or vice versa) will largely depend on the specific requirements of the application and its data consistency needs.
Understanding and implementing CRDTs effectively requires deep knowledge of distributed systems and the specific application domain, making it a challenging yet rewarding endeavor for system designers and developers.

