@InterfaceAudience.Private public class FastDiffDeltaEncoder extends BufferedDataBlockEncoder
DiffKeyDeltaEncoder
but supposedly faster.
Compress using:
- store size of common prefix
- save column family once in the first KeyValue
- use integer compression for key, value and prefix (7-bit encoding)
- use bits to avoid duplication key length, value length
and type if it same as previous
- store in 3 bits length of prefix timestamp
with previous KeyValue's timestamp
- one bit which allow to omit value if it is the same
Format:
- 1 byte: flag
- 1-5 bytes: key length (only if FLAG_SAME_KEY_LENGTH is not set in flag)
- 1-5 bytes: value length (only if FLAG_SAME_VALUE_LENGTH is not set in flag)
- 1-5 bytes: prefix length
- ... bytes: rest of the row (if prefix length is small enough)
- ... bytes: qualifier (or suffix depending on prefix length)
- 1-8 bytes: timestamp suffix
- 1 byte: type (only if FLAG_SAME_TYPE is not set in the flag)
- ... bytes: value (only if FLAG_SAME_VALUE is not set in the flag)Modifier and Type | Class and Description |
---|---|
private static class |
FastDiffDeltaEncoder.FastDiffCompressionState |
protected static class |
FastDiffDeltaEncoder.FastDiffSeekerState |
BufferedDataBlockEncoder.BufferedEncodedSeeker<STATE extends BufferedDataBlockEncoder.SeekerState>, BufferedDataBlockEncoder.ClonedSeekerState, BufferedDataBlockEncoder.SeekerState
DataBlockEncoder.EncodedSeeker
Modifier and Type | Field and Description |
---|---|
(package private) int |
FLAG_SAME_KEY_LENGTH |
(package private) int |
FLAG_SAME_TYPE |
(package private) int |
FLAG_SAME_VALUE |
(package private) int |
FLAG_SAME_VALUE_LENGTH |
(package private) int |
MASK_TIMESTAMP_LENGTH |
(package private) int |
SHIFT_TIMESTAMP_LENGTH |
Constructor and Description |
---|
FastDiffDeltaEncoder() |
Modifier and Type | Method and Description |
---|---|
private int |
compressSingleKeyValue(DataOutputStream out,
Cell cell,
Cell prevCell) |
DataBlockEncoder.EncodedSeeker |
createSeeker(KeyValue.KVComparator comparator,
HFileBlockDecodingContext decodingCtx)
Create a HFileBlock seeker which find KeyValues within a block.
|
private int |
findCommonTimestampPrefix(byte[] curTsBuf,
byte[] prevTsBuf) |
ByteBuffer |
getFirstKeyInBlock(ByteBuffer block)
Return first key in block.
|
protected ByteBuffer |
internalDecodeKeyValues(DataInputStream source,
int allocateHeaderLength,
int skipLastBytes,
HFileBlockDefaultDecodingContext decodingCtx) |
int |
internalEncode(Cell cell,
HFileBlockDefaultEncodingContext encodingContext,
DataOutputStream out) |
String |
toString() |
private void |
uncompressSingleKeyValue(DataInputStream source,
ByteBuffer out,
FastDiffDeltaEncoder.FastDiffCompressionState state) |
afterDecodingKeyValue, afterEncodingKeyValue, decodeKeyValues, encode, endBlockEncoding, ensureSpace, newDataBlockDecodingContext, newDataBlockEncodingContext, startBlockEncoding
final int MASK_TIMESTAMP_LENGTH
final int SHIFT_TIMESTAMP_LENGTH
final int FLAG_SAME_KEY_LENGTH
final int FLAG_SAME_VALUE_LENGTH
final int FLAG_SAME_TYPE
final int FLAG_SAME_VALUE
private int findCommonTimestampPrefix(byte[] curTsBuf, byte[] prevTsBuf)
private void uncompressSingleKeyValue(DataInputStream source, ByteBuffer out, FastDiffDeltaEncoder.FastDiffCompressionState state) throws IOException, EncoderBufferTooSmallException
public int internalEncode(Cell cell, HFileBlockDefaultEncodingContext encodingContext, DataOutputStream out) throws IOException
internalEncode
in class BufferedDataBlockEncoder
IOException
private int compressSingleKeyValue(DataOutputStream out, Cell cell, Cell prevCell) throws IOException
IOException
protected ByteBuffer internalDecodeKeyValues(DataInputStream source, int allocateHeaderLength, int skipLastBytes, HFileBlockDefaultDecodingContext decodingCtx) throws IOException
internalDecodeKeyValues
in class BufferedDataBlockEncoder
IOException
public ByteBuffer getFirstKeyInBlock(ByteBuffer block)
DataBlockEncoder
block
- encoded block we want index, the position will not changepublic DataBlockEncoder.EncodedSeeker createSeeker(KeyValue.KVComparator comparator, HFileBlockDecodingContext decodingCtx)
DataBlockEncoder
comparator
- what kind of comparison should be usedCopyright © 2007–2019 The Apache Software Foundation. All rights reserved.