loro/crates/loro-internal/docs/diff_calc.md

24 lines
1.2 KiB
Markdown
Raw Normal View History

2024-08-06 09:10:51 +00:00
# Internal of Diff Calculation
Diff calculation is the core of the `diff` command. It is responsible for calculating the difference between two versions of a container.
# Three modes of diff calculation
## 1. Checkout Mode
This is the most general mode of diff calculation. It can be used whenever a user want to switch to a different version.
But it is also the slowest mode. It relies on the `ContainerHistoryCache`, which is expensive to build and maintain in memory.
## 2. Import Mode
This mode is used when the user imports new updates. It is faster than the checkout mode, but it is still slower than the linear mode.
- The difference between the import mode and the checkout mode: in import mode, target version > current version.
So when calculating the `DiffCalculator` doesn't need to rely on `ContainerHistoryCache`, except for the Tree container.
- The difference between the import mode and the linear mode: in linear mode, all the imported updates are ordered, no concurrent update exists.
so there is no need to build CRDTs for the calculation
## 3. Linear Mode
This mode is used when we don't need to build CRDTs to calculate the difference. It is the fastest mode.