Add inline value support for small values (≤8 bytes) (#89271)
# Implement Inline Value Storage in SST Files
This PR enhances the Static Sorted Table (SST) file format by implementing inline value storage for small values (≤8 bytes). Instead of storing these small values in separate value blocks, they are now stored directly in the key blocks, which:
1. Reduces indirection overhead (8 bytes per value)
2. Improves read performance by eliminating an extra lookup
3. Reduces the total size of SST files
The implementation:
- Adds a new `EntryValue::Inline` variant for values ≤8 bytes
- for values <=8 bytes the 'small value' encoding is pure overhead (8 bytes to address <=8 bytes). This threshold was chosen to not regress key block sizes.
* from an 'overall data perspective' inline is beneficial for basically all acceptable value sizes. However, it will very likely regress binary search performance to stuff maximally large values inline, so we don't do this for now.
- Introduces key block entry types 8-255 to encode inline values (supporting up to 247 bytes)
- Updates the README to document the inline value format
- Enhances `ArcSlice` with a new `slice_from_subslice` method for zero-copy access to inline values
- Adds a `Read` implementation for `ArcSlice<u8>` to support streaming reads