[lmdb #7] Optionally mount restored DBs using squashfs #669
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The new config flag
db_lmdb_restore_unpack(default true) controls unpacking of the DB when it is restored. If this flag is set to false, then the DB will not be unpacked by restore, instead we just keep the squashfs file and attempt to mount it when the DB is opened. This allows storing compressed DBs and decompressing on the fly. The DB is unmounted when closed, so we're only keeping mounts for the subset of DBs that are being actively used. Mounting/unmounting are very fast, so this shouldn't impact open/close latency.The overhead for Glass to access a compressed DB this way seems to be about 10% the first time, and 0% after the uncompressed pages are cached. This was using the current default compression algorithm of zstd level 8.
Currently using
squashfuse_llto mount which is supposed to be a little faster thansquashfuseand not quite as fast as a nativemount -t squashfs, but the latter requires the server to be running as root.