From 15e78a895b37534749fd327c5551f51ba66e5eb1 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Fri, 18 Nov 2022 21:01:56 +0800 Subject: [PATCH] docs: add glossary --- docs/Glossary.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/Glossary.md diff --git a/docs/Glossary.md b/docs/Glossary.md new file mode 100644 index 00000000..1a7d5dee --- /dev/null +++ b/docs/Glossary.md @@ -0,0 +1,34 @@ +# Glossary + +| Name | Meaning | Note | +|-------------------------|----------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DAG | Directed Acyclic Graph | The changes in Loro form a DAG. The relationship is expressed by deps field. | +| [RLE](#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](#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](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Version_vector) | | + + +### 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