[0] https://github.com/SaveTheRbtz/zstd-seekable-format-go
[1] https://github.com/facebook/zstd/blob/dev/contrib/seekable_f...
[2] e.g FastCDC https://www.usenix.org/system/files/conference/atc16/atc16-p...
[0] https://github.com/SaveTheRbtz/zstd-seekable-format-go
[1] https://github.com/facebook/zstd/blob/dev/contrib/seekable_f...
[2] e.g FastCDC https://www.usenix.org/system/files/conference/atc16/atc16-p...
This change achieved a 10X speedup on normal operations compared to the old code that used SCCS files.
The compressed format stored data blocks in arbitrary order and then the index at the end of the file gave the data layout. Then allows write to the file without rewriting. BitKeeper itself only needed to append to the end of the file, but the format could support inserting data in the middle by only appending to the physical file.
It also had a data redundancy CRC layer that could detect data corruption and recover data from some types of corruption.
https://www.bitkeeper.org/ https://github.com/bitkeeper-scm/bitkeeper/blob/master/src/l... https://github.com/bitkeeper-scm/bitkeeper/blob/994fb651a404...
Another thought is if it is possible and how to coordinate te re-using dictionaries.
If you need a mature compression implementation for bazel I would recommend using recent bazel versions w/ gRPC-based bazel-remote: https://github.com/buchgr/bazel-remote
bazel nowadays supports end-to-end compression w/ `--experimental_remote_cache_compression`: https://github.com/bazelbuild/bazel/pull/14041