rocksdb/utilities/blob_db
Andrew Kryczka 6c40806e51 Digest ZSTD compression dictionary once per SST file (#4251)
Summary:
In RocksDB, for a given SST file, all data blocks are compressed with the same dictionary. When we compress a block using the dictionary's raw bytes, the compression library first has to digest the dictionary to get it into a usable form. This digestion work is redundant and ideally should be done once per file.

ZSTD offers APIs for the caller to create and reuse a digested dictionary object (`ZSTD_CDict`). In this PR, we call `ZSTD_createCDict` once per file to digest the raw bytes. Then we use `ZSTD_compress_usingCDict` to compress each data block using the pre-digested dictionary. Once the file's created `ZSTD_freeCDict` releases the resources held by the digested dictionary.

There are a couple other changes included in this PR:

- Changed the parameter object for (un)compression functions from `CompressionContext`/`UncompressionContext` to `CompressionInfo`/`UncompressionInfo`. This avoids the previous pattern, where `CompressionContext`/`UncompressionContext` had to be mutated before calling a (un)compression function depending on whether dictionary should be used. I felt that mutation was error-prone so eliminated it.
- Added support for digested uncompression dictionaries (`ZSTD_DDict`) as well. However, this PR does not support reusing them across uncompression calls for the same file. That work is deferred to a later PR when we will store the `ZSTD_DDict` objects in block cache.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4251

Differential Revision: D9257078

Pulled By: ajkr

fbshipit-source-id: 21b8cb6bbdd48e459f1c62343780ab66c0a64438
2018-08-23 19:28:18 -07:00
..
blob_compaction_filter.cc Blob DB: Improve FIFO eviction 2018-03-06 11:57:42 -08:00
blob_compaction_filter.h Blob DB: Improve FIFO eviction 2018-03-06 11:57:42 -08:00
blob_db_impl.cc Digest ZSTD compression dictionary once per SST file (#4251) 2018-08-23 19:28:18 -07:00
blob_db_impl.h BlobDB: Fix expired file not being evicted (#4294) 2018-08-20 22:42:33 -07:00
blob_db_iterator.h Change and clarify the relationship between Valid(), status() and Seek*() for all iterators. Also fix some bugs 2018-05-17 02:56:56 -07:00
blob_db_listener.h Blob DB: Improve FIFO eviction 2018-03-06 11:57:42 -08:00
blob_db_test.cc BlobDB: Fix expired file not being evicted (#4294) 2018-08-20 22:42:33 -07:00
blob_db.cc BlobDB: Cleanup TTLExtractor interface (#4229) 2018-08-06 11:58:05 -07:00
blob_db.h BlobDB: Can return expiration together with Get() (#4227) 2018-08-06 17:43:14 -07:00
blob_dump_tool.cc Digest ZSTD compression dictionary once per SST file (#4251) 2018-08-23 19:28:18 -07:00
blob_dump_tool.h Blob DB: blob_dump to show uncompressed values 2018-04-05 11:12:16 -07:00
blob_file.cc Blob DB: enable readahead for garbage collection (#3648) 2018-06-23 23:12:00 -07:00
blob_file.h BlobDB: is_fifo=true also evict non-TTL blob files (#4049) 2018-06-25 22:43:05 -07:00
blob_index.h Blob DB: Inline small values in base DB 2017-10-26 12:30:54 -07:00
blob_log_format.cc BlobDB: Remove the need to get sequence number per write 2017-12-15 13:27:30 -08:00
blob_log_format.h BlobDB: Remove the need to get sequence number per write 2017-12-15 13:27:30 -08:00
blob_log_reader.cc Blob DB: enable readahead for garbage collection (#3648) 2018-06-23 23:12:00 -07:00
blob_log_reader.h Blob DB: enable readahead for garbage collection (#3648) 2018-06-23 23:12:00 -07:00
blob_log_writer.cc BlobDB: refactor DB open logic 2017-12-11 12:12:38 -08:00
blob_log_writer.h BlobDB: refactor DB open logic 2017-12-11 12:12:38 -08:00