mirror of
https://github.com/loro-dev/loro.git
synced 2024-12-03 21:18:25 +00:00
5.5 KiB
5.5 KiB
Glossary
Name | Meaning | Note |
---|---|---|
DAG | Directed Acyclic Graph | The changes in Loro form a DAG. The relationship is expressed by deps field. |
RLE | Run Length Encoding | We not only use it on the encoding, but also in the vec and tree. |
Change | A merged batch of ops | |
Frontiers | The DAG nodes that no one has dependencies on them | They can be represented by a series of id |
Op | Operation | |
State (of a Container) | The | In the code, the state most refers to the visible state to users. For example, the text string of a text container, the key value pairs in the map container |
Effect (of an Op) | How the op affect the state | We use CRDT to calculate the effect (obviously) |
Tracker | A special data structure to calculate the effects | |
Container | A unit of CRDT data structure | |
Content | Content of an Op | |
ID | A global unit id for an Op | It has the structure of {clientId, counter} |
Counter | The second field inside ID | |
Lamport | Lamport timestamp | |
Span | A series of continuous things | |
Causal Order | The order of happen-before relationship | The DAG expresses the causal order of the changes |
VV | Version Vector | In code, it has exclusive end, VV {0: 8} means the last op id of client 0 is 0-7 |
RLE
We not only use RLE on the encoding, but also in the vec and tree.
i.e. the elements can be merged, sliced and have lengths. We call the element with length of 1 as atom element (cannot be sliced).
We use a Rle
trait to express it. So Op
, Change
, elements inside RleTree
all implement Rle
.
This gives us a compact way to represent the mergeable elements.
Container
Each op is associated with one container. Different CRDT algorithms use different types of containers. There are hierarchical relationship between containers, but they cannot affect each other
Convention
- There are methods like
id_last
,id_end
,lamport_last
,lamport_end
.last
refers to the last one, butend
refers to the exclusive end of a range. For example, OpSpan ranging from 0-0 till 0-8 has id_last of 0-8 and id_end of 0-9