bisync: use `trie` internally to reduce footprint
@ivandeex is already working on this.
Since Oct 8, 2021.
- Dominant language
- Go
- Stars
- 59.8k
- Forks
- 5.4k
- Avg merge
- 2d 14h
- Merged PRs (30d)
- 48
Description
Synopsis
TODO
See 👍 and ⏬
Prior discussions
Mentioned at https://github.com/rclone/rclone/pull/5587#issuecomment-917416354 and...
https://github.com/cjnaz/rclonesync-V2/issues/59
One rclonesync user had about 2M files and ran out of memory. I optimized rclonesync to get it down to two in-memory file listings at any time...
https://github.com/rclone/rclone/pull/5164#issuecomment-843481228 (ivandeex)
Listings keep a lot of self-recursive path strings:
[/movies/]alpha, [movies/]bravo, [movies/][zeta/]hello, [movies/][zeta/]world.
This gives a good possibility for compression using trie (using by-path segmentation like above or by-character).
In short, I want to make something like a modified dghubble/trie (not this one precisely but something similar - searching github didn't return anything that'd satisfy all my requirements),
with 3 fast methods: add path, map path -> int32, int32 -> path (delete and modify operations are not needed).
I'd fill it up when a prior listing is parsed or new one generated. Delta engine and queue operations will pass the trie as a shared per-session object and use int32 instead of file names.
This is another postponed item. I'd rather start from thousands, then proceed to zillions.
I understand that rclone deals with the file system recursively by directory rather than the whole tree?
Depends on backend features. --fast-list enables whole tree at least in Google Drive.
bisync just uses internal walk API leaving optimizations to lower level.
How to use GitHub
- Please use the 👍 reaction to show that you are affected by the same issue.
- Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
- Subscribe to receive notifications on status change and new comments.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.