DejaVu is the component of data snapshot and sync for SiYuan.
- Git-like version control
- File deduplication in chunks
- Data compression
- AES Encrypted
- Cloud sync and backup
- Folders are not supported
- Permission attributes are not supported
- Symbolic links are not supported
Design reference from ArtiVC.
ID
Each entity is identified by SHA-1Index
file list, each index operation generates a new indexmemo
index memocreated
index timefiles
file listcount
count of total filessize
size of total files
File
file, a new file is generated when the actual data file path or content changespath
file pathsize
file sizeupdated
last update timechunks
file chunk list
Chunk
file chunkdata
actual data
Ref
refers to the indexlatest
built-in reference, automatically points to the latest indextag
tag reference, manually point to the specified index
Repo
repository
DataPath
data folder path, the folder where the actual data file is locatedPath
repo folder path, the repo is not stored in the data folder, we need to specify the repo folder path separately
The repo folder layout is as follows:
├─indexes
│ 0531732dca85404e716abd6bb896319a41fa372b
│ 19fc2c2e5317b86f9e048f8d8da2e4ed8300d8af
│ 5f32d78d69e314beee36ad7de302b984da47ddd2
│ cbd254ca246498978d4f47e535bac87ad7640fe6
│
├─objects
│ ├─1e
│ │ 0ac5f319f5f24b3fe5bf63639e8dbc31a52e3b
│ │
│ ├─56
│ │ 322ccdb61feab7f2f76f5eb82006bd51da7348
│ │
│ ├─7e
│ │ dccca8340ebe149b10660a079f34a20f35c4d4
│ │
│ ├─83
│ │ a7d72fe9a071b696fc81a3dc041cf36cbde802
│ │
│ ├─85
│ │ 26b9a7efde615b67b4666ae509f9fbc91d370b
│ │
│ ├─87
│ │ 1355acd062116d1713e8f7f55969dbb507a040
│ │
│ ├─96
│ │ 46ba13a4e8eabeca4f5259bfd7da41d368a1a6
│ │
│ ├─a5
│ │ 5b8e6b9ccad3fc9b792d3d453a0793f8635b9f
│ │ b28787922f4e2a477b4f027e132aa7e35253d4
│ │
│ ├─be
│ │ c7a729d1b5f021f8eca0dd8b6ef689ad753567
│ │
│ ├─d1
│ │ 324c714bde18442b5629a84a361b5e7528b14a
│ │
│ ├─f1
│ │ d7229171f4fa1c5eacb411995b16938a04f7f6
│ │
│ └─f7
│ ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0
│
└─refs
│ latest
│
└─tags
v1.0.0
v1.0.1
DejaVu uses the GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 open source license.
- https://github.com/dustin/go-humanize
MIT license
- https://github.com/klauspost/compress
BSD-3-Clause license
- https://github.com/panjf2000/ants
MIT license
- https://github.com/InfuseAI/ArtiVC
Apache-2.0 license
- https://github.com/restic/restic
BSD-2-Clause license
- https://github.com/sabhiram/go-gitignore
MIT license