diff --git a/sstable/colblk/prefix_bytes.go b/sstable/colblk/prefix_bytes.go index 00d9f10071..f55b8e2478 100644 --- a/sstable/colblk/prefix_bytes.go +++ b/sstable/colblk/prefix_bytes.go @@ -822,7 +822,7 @@ func (b *PrefixBytesBuilder) Put(key []byte, bytesSharedWithPrev int) { currentBundlePrefixOffset: 1, completedBundleLen: 0, compressedDataLen: len(key), - offsetEncoding: DetermineUintEncoding(0, uint64(len(key))), + offsetEncoding: DetermineUintEncoding(0, uint64(len(key)), UintEncodingRowThreshold), } case b.nKeys&(b.bundleSize-1) == 0: // We're starting a new bundle. @@ -855,7 +855,7 @@ func (b *PrefixBytesBuilder) Put(key []byte, bytesSharedWithPrev int) { currentBundleDistinctKeys: 1, compressedDataLen: completedBundleSize + len(key) - (b.bundleCount(b.nKeys)-1)*blockPrefixLen, } - curr.offsetEncoding = DetermineUintEncoding(0, uint64(curr.compressedDataLen)) + curr.offsetEncoding = DetermineUintEncoding(0, uint64(curr.compressedDataLen), UintEncodingRowThreshold) b.data = append(b.data, key...) b.addOffset(0) // Placeholder for bundle prefix. b.addOffset(uint32(len(b.data))) @@ -897,7 +897,7 @@ func (b *PrefixBytesBuilder) Put(key []byte, bytesSharedWithPrev int) { curr.compressedDataLen -= (b.bundleCount(b.nKeys) - 1) * curr.blockPrefixLen // The compressedDataLen is the largest offset we'll need to encode in the // offset table. - curr.offsetEncoding = DetermineUintEncoding(0, uint64(curr.compressedDataLen)) + curr.offsetEncoding = DetermineUintEncoding(0, uint64(curr.compressedDataLen), UintEncodingRowThreshold) b.data = append(b.data, key...) b.addOffset(uint32(len(b.data))) } diff --git a/sstable/colblk/testdata/data_block/rewrite_suffixes b/sstable/colblk/testdata/data_block/rewrite_suffixes index fb38d52000..6bfc3221fb 100644 --- a/sstable/colblk/testdata/data_block/rewrite_suffixes +++ b/sstable/colblk/testdata/data_block/rewrite_suffixes @@ -13,7 +13,7 @@ write poi@12#0,SET:big yaya@5#0,SET:mini ---- -size=110: +size=102: 0: prefixes: prefixbytes(16): 2 keys 1: suffixes: bytes: 2 rows set; 5 bytes in data 2: trailers: uint: 2 rows @@ -38,13 +38,13 @@ data block header │ ├── 021-022: b 00000010 # col 2: uint │ ├── 022-026: x 44000000 # col 2: page start 68 │ ├── 026-027: b 00000001 # col 3: bool - │ ├── 027-031: x 4d000000 # col 3: page start 77 + │ ├── 027-031: x 47000000 # col 3: page start 71 │ ├── 031-032: b 00000011 # col 4: bytes - │ ├── 032-036: x 60000000 # col 4: page start 96 + │ ├── 032-036: x 58000000 # col 4: page start 88 │ ├── 036-037: b 00000001 # col 5: bool - │ ├── 037-041: x 6b000000 # col 5: page start 107 + │ ├── 037-041: x 63000000 # col 5: page start 99 │ ├── 041-042: b 00000001 # col 6: bool - │ └── 042-046: x 6c000000 # col 6: page start 108 + │ └── 042-046: x 64000000 # col 6: page start 100 ├── data for column 0 (prefixbytes) │ ├── 046-047: x 04 # bundle size: 16 │ ├── offsets table @@ -68,27 +68,27 @@ data block header │ ├── 063-066: x 403132 # data[0]: @12 │ └── 066-068: x 4035 # data[1]: @5 ├── data for column 2 (uint) - │ ├── 068-069: x 80 # encoding: const - │ └── 069-077: x 0100000000000000 # 64-bit constant: 1 + │ ├── 068-069: x 01 # encoding: 1b + │ ├── 069-070: x 01 # data[0] = 1 + │ └── 070-071: x 01 # data[1] = 1 ├── data for column 3 (bool) - │ ├── 077-078: x 00 # default bitmap encoding - │ ├── 078-080: x 0000 # padding to align to 64-bit boundary - │ ├── 080-088: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ └── 088-096: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ ├── 071-072: x 00 # default bitmap encoding + │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 ├── data for column 4 (bytes) │ ├── offsets table - │ │ ├── 096-097: x 01 # encoding: 1b - │ │ ├── 097-098: x 00 # data[0] = 0 [100 overall] - │ │ ├── 098-099: x 03 # data[1] = 3 [103 overall] - │ │ └── 099-100: x 07 # data[2] = 7 [107 overall] + │ │ ├── 088-089: x 01 # encoding: 1b + │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] + │ │ ├── 090-091: x 03 # data[1] = 3 [95 overall] + │ │ └── 091-092: x 07 # data[2] = 7 [99 overall] │ └── data - │ ├── 100-103: x 626967 # data[0]: big - │ └── 103-107: x 6d696e69 # data[1]: mini + │ ├── 092-095: x 626967 # data[0]: big + │ └── 095-099: x 6d696e69 # data[1]: mini ├── data for column 5 (bool) - │ └── 107-108: x 01 # zero bitmap encoding + │ └── 099-100: x 01 # zero bitmap encoding ├── data for column 6 (bool) - │ └── 108-109: x 01 # zero bitmap encoding - └── 109-110: x 00 # block padding byte + │ └── 100-101: x 01 # zero bitmap encoding + └── 101-102: x 00 # block padding byte rewrite from=@12 to=@22 ---- @@ -135,7 +135,7 @@ data block header │ ├── 021-022: b 00000010 # col 2: uint │ ├── 022-026: x 4d000000 # col 2: page start 77 │ ├── 026-027: b 00000001 # col 3: bool - │ ├── 027-031: x 56000000 # col 3: page start 86 + │ ├── 027-031: x 51000000 # col 3: page start 81 │ ├── 031-032: b 00000011 # col 4: bytes │ ├── 032-036: x 68000000 # col 4: page start 104 │ ├── 036-037: b 00000001 # col 5: bool @@ -169,11 +169,13 @@ data block header │ ├── 073-075: x 4036 # data[1]: @6 │ └── 075-077: x 4036 # data[2]: @6 ├── data for column 2 (uint) - │ ├── 077-078: x 80 # encoding: const - │ └── 078-086: x 0100000000000000 # 64-bit constant: 1 + │ ├── 077-078: x 01 # encoding: 1b + │ ├── 078-079: x 01 # data[0] = 1 + │ ├── 079-080: x 01 # data[1] = 1 + │ └── 080-081: x 01 # data[2] = 1 ├── data for column 3 (bool) - │ ├── 086-087: x 00 # default bitmap encoding - │ ├── 087-088: x 00 # padding to align to 64-bit boundary + │ ├── 081-082: x 00 # default bitmap encoding + │ ├── 082-088: x 000000000000 # padding to align to 64-bit boundary │ ├── 088-096: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ └── 096-104: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 ├── data for column 4 (bytes) @@ -210,13 +212,13 @@ data block header │ ├── 021-022: b 00000010 # col 2: uint │ ├── 022-026: x 50000000 # col 2: page start 80 │ ├── 026-027: b 00000001 # col 3: bool - │ ├── 027-031: x 59000000 # col 3: page start 89 + │ ├── 027-031: x 54000000 # col 3: page start 84 │ ├── 031-032: b 00000011 # col 4: bytes - │ ├── 032-036: x 70000000 # col 4: page start 112 + │ ├── 032-036: x 68000000 # col 4: page start 104 │ ├── 036-037: b 00000001 # col 5: bool - │ ├── 037-041: x 7e000000 # col 5: page start 126 + │ ├── 037-041: x 76000000 # col 5: page start 118 │ ├── 041-042: b 00000001 # col 6: bool - │ └── 042-046: x 7f000000 # col 6: page start 127 + │ └── 042-046: x 77000000 # col 6: page start 119 ├── data for column 0 (prefixbytes) │ ├── 046-047: x 04 # bundle size: 16 │ ├── offsets table @@ -244,26 +246,28 @@ data block header │ ├── 074-077: x 403534 # data[1]: @54 │ └── 077-080: x 403534 # data[2]: @54 ├── data for column 2 (uint) - │ ├── 080-081: x 80 # encoding: const - │ └── 081-089: x 0100000000000000 # 64-bit constant: 1 + │ ├── 080-081: x 01 # encoding: 1b + │ ├── 081-082: x 01 # data[0] = 1 + │ ├── 082-083: x 01 # data[1] = 1 + │ └── 083-084: x 01 # data[2] = 1 ├── data for column 3 (bool) - │ ├── 089-090: x 00 # default bitmap encoding - │ ├── 090-096: x 000000000000 # padding to align to 64-bit boundary - │ ├── 096-104: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ └── 104-112: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ ├── 084-085: x 00 # default bitmap encoding + │ ├── 085-088: x 000000 # padding to align to 64-bit boundary + │ ├── 088-096: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ └── 096-104: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 ├── data for column 4 (bytes) │ ├── offsets table - │ │ ├── 112-113: x 01 # encoding: 1b - │ │ ├── 113-114: x 00 # data[0] = 0 [117 overall] - │ │ ├── 114-115: x 03 # data[1] = 3 [120 overall] - │ │ ├── 115-116: x 06 # data[2] = 6 [123 overall] - │ │ └── 116-117: x 09 # data[3] = 9 [126 overall] + │ │ ├── 104-105: x 01 # encoding: 1b + │ │ ├── 105-106: x 00 # data[0] = 0 [109 overall] + │ │ ├── 106-107: x 03 # data[1] = 3 [112 overall] + │ │ ├── 107-108: x 06 # data[2] = 6 [115 overall] + │ │ └── 108-109: x 09 # data[3] = 9 [118 overall] │ └── data - │ ├── 117-120: x 666f6f # data[0]: foo - │ ├── 120-123: x 626172 # data[1]: bar - │ └── 123-126: x 626178 # data[2]: bax + │ ├── 109-112: x 666f6f # data[0]: foo + │ ├── 112-115: x 626172 # data[1]: bar + │ └── 115-118: x 626178 # data[2]: bax ├── data for column 5 (bool) - │ └── 126-127: x 01 # zero bitmap encoding + │ └── 118-119: x 01 # zero bitmap encoding ├── data for column 6 (bool) - │ └── 127-128: x 01 # zero bitmap encoding - └── 128-129: x 00 # block padding byte + │ └── 119-120: x 01 # zero bitmap encoding + └── 120-121: x 00 # block padding byte diff --git a/sstable/colblk/testdata/keyspan_block b/sstable/colblk/testdata/keyspan_block index cd361d0d2e..9bc1ab225c 100644 --- a/sstable/colblk/testdata/keyspan_block +++ b/sstable/colblk/testdata/keyspan_block @@ -10,7 +10,7 @@ size=37: add a-b:{(#0,RANGEDEL)} ---- -size=57: +size=50: 0: user keys: bytes: 2 rows set; 2 bytes in data 1: start indices: uint: 2 rows 2: trailers: uint: 1 rows @@ -232,7 +232,7 @@ size=37: add b-d:{(#4,RANGEKEYSET,@3,coconut)} ---- -size=70: +size=64: 0: user keys: bytes: 2 rows set; 2 bytes in data 1: start indices: uint: 2 rows 2: trailers: uint: 1 rows @@ -256,9 +256,9 @@ keyspan-decoder │ ├── 21-22: b 00000010 # col 2: uint │ ├── 22-26: x 2d000000 # col 2: page start 45 │ ├── 26-27: b 00000011 # col 3: bytes - │ ├── 27-31: x 36000000 # col 3: page start 54 + │ ├── 27-31: x 30000000 # col 3: page start 48 │ ├── 31-32: b 00000011 # col 4: bytes - │ └── 32-36: x 3b000000 # col 4: page start 59 + │ └── 32-36: x 35000000 # col 4: page start 53 ├── data for column 0 (bytes) │ ├── offsets table │ │ ├── 36-37: x 01 # encoding: 1b @@ -273,23 +273,23 @@ keyspan-decoder │ ├── 43-44: x 00 # data[0] = 0 │ └── 44-45: x 01 # data[1] = 1 ├── data for column 2 (uint) - │ ├── 45-46: x 80 # encoding: const - │ └── 46-54: x 1504000000000000 # 64-bit constant: 1045 + │ ├── 45-46: x 02 # encoding: 2b + │ └── 46-48: x 1504 # data[0] = 1045 ├── data for column 3 (bytes) │ ├── offsets table - │ │ ├── 54-55: x 01 # encoding: 1b - │ │ ├── 55-56: x 00 # data[0] = 0 [57 overall] - │ │ └── 56-57: x 02 # data[1] = 2 [59 overall] + │ │ ├── 48-49: x 01 # encoding: 1b + │ │ ├── 49-50: x 00 # data[0] = 0 [51 overall] + │ │ └── 50-51: x 02 # data[1] = 2 [53 overall] │ └── data - │ └── 57-59: x 4033 # data[0]: @3 + │ └── 51-53: x 4033 # data[0]: @3 ├── data for column 4 (bytes) │ ├── offsets table - │ │ ├── 59-60: x 01 # encoding: 1b - │ │ ├── 60-61: x 00 # data[0] = 0 [62 overall] - │ │ └── 61-62: x 07 # data[1] = 7 [69 overall] + │ │ ├── 53-54: x 01 # encoding: 1b + │ │ ├── 54-55: x 00 # data[0] = 0 [56 overall] + │ │ └── 55-56: x 07 # data[1] = 7 [63 overall] │ └── data - │ └── 62-69: x 636f636f6e7574 # data[0]: coconut - └── 69-70: x 00 # block padding byte + │ └── 56-63: x 636f636f6e7574 # data[0]: coconut + └── 63-64: x 00 # block padding byte iter seek-ge a diff --git a/sstable/colblk/testdata/uints b/sstable/colblk/testdata/uints index ab5b075ca7..f2da68ef9c 100644 --- a/sstable/colblk/testdata/uints +++ b/sstable/colblk/testdata/uints @@ -495,13 +495,18 @@ write size rows=(6) ---- -Size(6, 0) = 9 +Size(6, 0) = 7 finish rows=6 ---- uints - ├── 0-1: x 80 # encoding: const - └── 1-9: x 0100000000000000 # 64-bit constant: 1 + ├── 0-1: x 01 # encoding: 1b + ├── 1-2: x 01 # data[0] = 1 + ├── 2-3: x 01 # data[1] = 1 + ├── 3-4: x 01 # data[2] = 1 + ├── 4-5: x 01 # data[3] = 1 + ├── 5-6: x 01 # data[4] = 1 + └── 6-7: x 01 # data[5] = 1 # Test 32-bit delta encoding. diff --git a/sstable/colblk/uints.go b/sstable/colblk/uints.go index be0d4c5d71..ceabbaf42c 100644 --- a/sstable/colblk/uints.go +++ b/sstable/colblk/uints.go @@ -81,24 +81,48 @@ func (e UintEncoding) String() string { return fmt.Sprintf("%db%s", e.Width(), deltaString) } +// UintEncodingRowThreshold is the threshold under which the number of rows can +// affect the best encoding. This happens when the constant 8 bytes for the +// delta base doesn't make up for saving a byte or two in the per-row encoding. +const UintEncodingRowThreshold = 8 + // DetermineUintEncoding returns the best valid encoding that can be used to -// represent integers in the range [minValue, maxValue]. -func DetermineUintEncoding(minValue, maxValue uint64) UintEncoding { - // Find the number of bytes-per-value necessary for a delta encoding. - b := (bits.Len64(maxValue-minValue) + 7) >> 3 - // Round up to the nearest allowed value (0, 1, 2, 4, or 8). - if b > 4 { +// represent numRows integers in the range [minValue, maxValue]. +// +// DetermineUintEncoding returns the same result for any value of rows >= +// UintEncodingRowThreshold. +func DetermineUintEncoding(minValue, maxValue uint64, numRows int) UintEncoding { + b := byteWidth(maxValue - minValue) + if b == 8 { return UintEncoding(8) } - if b == 3 { - b = 4 - } // Check if we can use the same number of bytes without a delta encoding. isDelta := maxValue >= (1 << (b << 3)) + if isDelta && numRows < UintEncodingRowThreshold { + bNoDelta := byteWidth(maxValue) + // Check if saving (bNoDelta-b) bytes per row makes up for the 8 bytes + // required by the delta base. + if numRows*int(bNoDelta-b) < 8 { + b = bNoDelta + isDelta = false + } + } return makeUintEncoding(b, isDelta) } -func makeUintEncoding(width int, isDelta bool) UintEncoding { +// byteWidth returns the number of bytes necessary to represent the given value, +// either 0, 1, 2, 4, or 8. +func byteWidth(maxValue uint64) uint8 { + // b the number of bytes necessary to represent maxValue. + b := (uint8(bits.Len64(maxValue)) + 7) >> 3 + // Round up to the nearest power of 2 by subtracting one and filling out all bits. + b-- + b |= b >> 1 + b |= b >> 2 + return b + 1 +} + +func makeUintEncoding(width uint8, isDelta bool) UintEncoding { e := UintEncoding(width) if isDelta { e |= uintEncodingDeltaBit @@ -241,12 +265,12 @@ func (b *UintBuilder) Set(row int, v uint64) { } // Maintain the running minimum and maximum for the purpose of maintaining // knowledge of the delta encoding that would be used. - if b.stats.minimum > v || b.stats.maximum < v { + if b.stats.minimum > v || b.stats.maximum < v || row < UintEncodingRowThreshold { b.stats.minimum = min(v, b.stats.minimum) b.stats.maximum = max(v, b.stats.maximum) // If updating the minimum and maximum means that we now much use a wider // width integer, update the encoding and the index of the update to it. - if e := DetermineUintEncoding(b.stats.minimum, b.stats.maximum); e != b.stats.encoding { + if e := DetermineUintEncoding(b.stats.minimum, b.stats.maximum, row+1); e != b.stats.encoding { b.stats.encoding = e b.stats.encodingRow = row } @@ -265,9 +289,9 @@ func (b *UintBuilder) Size(rows int, offset uint32) uint32 { } // determineEncoding determines the best encoding for a column containing the -// first [rows], along with the minimum value (used as the "base" value when we -// use a stats encoding). -func (b *UintBuilder) determineEncoding(rows int) (_ UintEncoding, minimum uint64) { +// first [rows], along with a lower bound on all the values which can be used as +// a "base" if the encoding is a delta encoding. +func (b *UintBuilder) determineEncoding(rows int) (_ UintEncoding, deltaBase uint64) { if b.stats.encodingRow < rows { // b.delta.encoding became the current value within the first [rows], so we // can use it. @@ -278,18 +302,26 @@ func (b *UintBuilder) determineEncoding(rows int) (_ UintEncoding, minimum uint6 // Note that b.stats.minimum includes all rows set so far so it might be // strictly smaller than all values up to [rows]; but it is still a suitable // base for b.stats.encoding. + if invariants.Sometimes(1) && rows > 0 { + if enc, _ := b.recalculateEncoding(rows); enc != b.stats.encoding { + panic(fmt.Sprintf("fast and slow paths don't agree: %s vs %s", b.stats.encoding, enc)) + } + } return b.stats.encoding, b.stats.minimum } + return b.recalculateEncoding(rows) +} +func (b *UintBuilder) recalculateEncoding(rows int) (_ UintEncoding, deltaBase uint64) { // We have to recalculate the minimum and maximum. - minimum, maximum := computeMinMax(b.array.elems.Slice(rows)) + minimum, maximum := computeMinMax(b.array.elems.Slice(min(rows, b.array.n))) if b.useDefault { // Mirror the pessimism of the fast path so that the result is consistent. // Otherwise, adding a row can result in a different encoding even when not // including that row. minimum = 0 } - return DetermineUintEncoding(minimum, maximum), minimum + return DetermineUintEncoding(minimum, maximum, rows), minimum } // uintColumnSize returns the size of a column of unsigned integers, encoded at @@ -390,11 +422,19 @@ func (b *UintBuilder) WriteDebug(w io.Writer, rows int) { // reduceUints reduces the bit-width of a slice of unsigned by subtracting a // minimum value from each element and writing it to dst. For example, // -// reduceUints[uint64, uint8](10, []uint64{10, 11, 12}, dst) +// reduceUints[uint8](10, []uint64{10, 11, 12}, dst) // // could be used to reduce a slice of uint64 values to uint8 values {0, 1, 2}. -func reduceUints[O constraints.Integer, N constraints.Integer](minimum O, values []O, dst []N) { +func reduceUints[N constraints.Integer](minimum uint64, values []uint64, dst []N) { for i := 0; i < len(values); i++ { + if invariants.Enabled { + if values[i] < minimum { + panic("incorrect minimum value") + } + if values[i]-minimum > uint64(N(0)-1) { + panic("incorrect target width") + } + } dst[i] = N(values[i] - minimum) } } diff --git a/sstable/colblk/uints_test.go b/sstable/colblk/uints_test.go index b535c8025b..71b09ffb9e 100644 --- a/sstable/colblk/uints_test.go +++ b/sstable/colblk/uints_test.go @@ -7,6 +7,7 @@ package colblk import ( "bytes" "fmt" + "math" "strconv" "strings" "testing" @@ -17,13 +18,79 @@ import ( "github.com/cockroachdb/pebble/internal/treeprinter" ) +func TestByteWidth(t *testing.T) { + for _, tc := range []struct { + val uint64 + expected uint8 + }{ + {val: 0, expected: 0}, + {val: 1, expected: 1}, + {val: 100, expected: 1}, + {val: 255, expected: 1}, + {val: 256, expected: 2}, + {val: 500, expected: 2}, + {val: 511, expected: 2}, + {val: 512, expected: 2}, + {val: 60000, expected: 2}, + {val: 65535, expected: 2}, + {val: 65536, expected: 4}, + {val: 1 << 30, expected: 4}, + {val: 1<<32 - 1, expected: 4}, + {val: 1 << 32, expected: 8}, + {val: 1 << 50, expected: 8}, + {val: math.MaxUint64, expected: 8}, + } { + if w := byteWidth(tc.val); w != tc.expected { + t.Errorf("byteWidth(%d) = %d, want %d", tc.val, w, tc.expected) + } + } +} + func TestUintEncoding(t *testing.T) { for _, r := range interestingIntRanges { - actual := DetermineUintEncoding(r.Min, r.Max) + actual := DetermineUintEncoding(r.Min, r.Max, UintEncodingRowThreshold) if actual != r.ExpectedEncoding { t.Errorf("%d/%d expected %s, but got %s", r.Min, r.Max, r.ExpectedEncoding, actual) } } + // Testcases around avoiding delta encodings for small number of rows. + for _, tc := range []struct { + min, max uint64 + numRows int + expected UintEncoding + }{ + {min: 100, max: 300, numRows: 1, expected: makeUintEncoding(2, false)}, + {min: 100, max: 300, numRows: 5, expected: makeUintEncoding(2, false)}, + {min: 100, max: 300, numRows: 7, expected: makeUintEncoding(2, false)}, + {min: 100, max: 300, numRows: 8, expected: makeUintEncoding(1, true)}, + {min: 100, max: 300, numRows: 1000, expected: makeUintEncoding(1, true)}, + + {min: 65000, max: 65100, numRows: 1, expected: makeUintEncoding(2, false)}, + {min: 65000, max: 65100, numRows: 3, expected: makeUintEncoding(2, false)}, + {min: 65000, max: 65100, numRows: 7, expected: makeUintEncoding(2, false)}, + {min: 65000, max: 65100, numRows: 8, expected: makeUintEncoding(1, true)}, + {min: 65000, max: 65100, numRows: 10, expected: makeUintEncoding(1, true)}, + + {min: 80000, max: 100000, numRows: 1, expected: makeUintEncoding(4, false)}, + {min: 80000, max: 100000, numRows: 2, expected: makeUintEncoding(4, false)}, + {min: 80000, max: 100000, numRows: 3, expected: makeUintEncoding(4, false)}, + {min: 80000, max: 100000, numRows: 4, expected: makeUintEncoding(2, true)}, + {min: 80000, max: 100000, numRows: 10, expected: makeUintEncoding(2, true)}, + + {min: 1 << 40, max: 1<<40 + 100, numRows: 1, expected: makeUintEncoding(8, false)}, + {min: 1 << 40, max: 1<<40 + 100, numRows: 2, expected: makeUintEncoding(1, true)}, + {min: 1 << 40, max: 1<<40 + 100, numRows: 3, expected: makeUintEncoding(1, true)}, + + {min: 1 << 40, max: 1<<40 + 1000, numRows: 1, expected: makeUintEncoding(8, false)}, + {min: 1 << 40, max: 1<<40 + 1000, numRows: 2, expected: makeUintEncoding(2, true)}, + {min: 1 << 40, max: 1<<40 + 1000, numRows: 3, expected: makeUintEncoding(2, true)}, + } { + actual := DetermineUintEncoding(tc.min, tc.max, tc.numRows) + if actual != tc.expected { + t.Errorf("%d/%d/%d expected %s, but got %s", tc.min, tc.max, tc.numRows, tc.expected, actual) + } + } + } func TestUints(t *testing.T) { diff --git a/sstable/testdata/columnar_writer/simple_binary b/sstable/testdata/columnar_writer/simple_binary index d8af4f92bc..bb705cf66e 100644 --- a/sstable/testdata/columnar_writer/simple_binary +++ b/sstable/testdata/columnar_writer/simple_binary @@ -12,7 +12,7 @@ ok layout ---- sstable - ├── data offset: 0 length: 96 + ├── data offset: 0 length: 88 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 00-04: x 01000000 # maximum key length: 1 @@ -26,13 +26,13 @@ sstable │ │ │ ├── 21-22: b 00000010 # col 2: uint │ │ │ ├── 22-26: x 37000000 # col 2: page start 55 │ │ │ ├── 26-27: b 00000001 # col 3: bool - │ │ │ ├── 27-31: x 42000000 # col 3: page start 66 + │ │ │ ├── 27-31: x 3c000000 # col 3: page start 60 │ │ │ ├── 31-32: b 00000011 # col 4: bytes - │ │ │ ├── 32-36: x 58000000 # col 4: page start 88 + │ │ │ ├── 32-36: x 50000000 # col 4: page start 80 │ │ │ ├── 36-37: b 00000001 # col 5: bool - │ │ │ ├── 37-41: x 5d000000 # col 5: page start 93 + │ │ │ ├── 37-41: x 55000000 # col 5: page start 85 │ │ │ ├── 41-42: b 00000001 # col 6: bool - │ │ │ └── 42-46: x 5e000000 # col 6: page start 94 + │ │ │ └── 42-46: x 56000000 # col 6: page start 86 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 46-47: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -53,35 +53,34 @@ sstable │ │ │ ├── 55-55: x # data[0]: │ │ │ └── 55-55: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 55-56: x 81 # encoding: 1b,delta - │ │ │ ├── 56-64: x 0101000000000000 # 64-bit constant: 257 - │ │ │ ├── 64-65: x 00 # data[0] = 0 + 257 = 257 - │ │ │ └── 65-66: x ff # data[1] = 255 + 257 = 512 + │ │ │ ├── 55-56: x 02 # encoding: 2b + │ │ │ ├── 56-58: x 0101 # data[0] = 257 + │ │ │ └── 58-60: x 0002 # data[1] = 512 │ │ ├── data for column 3 (bool) - │ │ │ ├── 66-67: x 00 # default bitmap encoding - │ │ │ ├── 67-72: x 0000000000 # padding to align to 64-bit boundary - │ │ │ ├── 72-80: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 80-88: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 60-61: x 00 # default bitmap encoding + │ │ │ ├── 61-64: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 64-72: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 72-80: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 88-89: x 01 # encoding: 1b - │ │ │ │ ├── 89-90: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 90-91: x 01 # data[1] = 1 [93 overall] - │ │ │ │ └── 91-92: x 01 # data[2] = 1 [93 overall] + │ │ │ │ ├── 80-81: x 01 # encoding: 1b + │ │ │ │ ├── 81-82: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 82-83: x 01 # data[1] = 1 [85 overall] + │ │ │ │ └── 83-84: x 01 # data[2] = 1 [85 overall] │ │ │ └── data - │ │ │ ├── 92-93: x 61 # data[0]: a - │ │ │ └── 93-93: x # data[1]: + │ │ │ ├── 84-85: x 61 # data[0]: a + │ │ │ └── 85-85: x # data[1]: │ │ ├── data for column 5 (bool) - │ │ │ └── 93-94: x 01 # zero bitmap encoding + │ │ │ └── 85-86: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 94-95: x 01 # zero bitmap encoding - │ │ └── 95-96: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xa772640a] - ├── index offset: 101 length: 51 - │ ├── 00000 block:0/96 + │ │ │ └── 86-87: x 01 # zero bitmap encoding + │ │ └── 87-88: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x4ea44054] + ├── index offset: 93 length: 51 + │ ├── 00000 block:0/88 │ │ - │ └── trailer [compression=none checksum=0x2bc8f1e1] - ├── properties offset: 157 length: 561 + │ └── trailer [compression=none checksum=0x6147006e] + ├── properties offset: 149 length: 561 │ ├── 00000 obsolete-key (16) [restart] │ ├── 00016 pebble.internal.testkeys.suffixes (48) │ ├── 00064 pebble.raw.point-tombstone.key.size (32) @@ -103,16 +102,16 @@ sstable │ ├── 00539 rocksdb.raw.value.size (14) │ ├── restart points │ │ └── 00553 [restart 0] - │ └── trailer [compression=none checksum=0x8ab471b6] - ├── meta-index offset: 723 length: 33 - │ ├── 0000 rocksdb.properties block:157/561 [restart] + │ └── trailer [compression=none checksum=0xf181bf0d] + ├── meta-index offset: 715 length: 33 + │ ├── 0000 rocksdb.properties block:149/561 [restart] │ ├── restart points │ │ └── 00025 [restart 0] - │ └── trailer [compression=none checksum=0x5c950c07] - └── footer offset: 761 length: 53 + │ └── trailer [compression=none checksum=0x742412ac] + └── footer offset: 753 length: 53 ├── 000 checksum type: crc32c - ├── 001 meta: offset=723, length=33 - ├── 004 index: offset=101, length=51 + ├── 001 meta: offset=715, length=33 + ├── 004 index: offset=93, length=51 ├── 041 version: 5 └── 045 magic number: 0xf09faab3f09faab3 @@ -128,7 +127,7 @@ rocksdb.num.data.blocks: 1 rocksdb.compression: NoCompression rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; rocksdb.comparator: pebble.internal.testkeys -rocksdb.data.size: 101 +rocksdb.data.size: 93 rocksdb.filter.size: 0 rocksdb.index.size: 56 rocksdb.block.based.table.index.type: 0 @@ -167,7 +166,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -197,11 +196,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -220,7 +221,7 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 114-115: x 01 # zero bitmap encoding │ │ └── 115-116: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xe7b15329] + │ └── trailer [compression=none checksum=0x3aec6bb5] ├── index offset: 121 length: 51 │ ├── 00000 block:0/116 │ │ @@ -306,7 +307,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -336,11 +337,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -359,8 +362,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 114-115: x 01 # zero bitmap encoding │ │ └── 115-116: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xe7b15329] - ├── data offset: 121 length: 116 + │ └── trailer [compression=none checksum=0x3aec6bb5] + ├── data offset: 121 length: 108 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -374,13 +377,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 71000000 # col 5: page start 113 + │ │ │ ├── 037-041: x 69000000 # col 5: page start 105 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 72000000 # col 6: page start 114 + │ │ │ └── 042-046: x 6a000000 # col 6: page start 106 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -401,29 +404,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 0b # data[1] = 11 [103 overall] - │ │ │ │ └── 091-092: x 15 # data[2] = 21 [113 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 0b # data[1] = 11 [95 overall] + │ │ │ │ └── 083-084: x 15 # data[2] = 21 [105 overall] │ │ │ └── data - │ │ │ ├── 092-103: x 647261676f6e6672756974 # data[0]: dragonfruit - │ │ │ └── 103-113: x 656c6465726265727279 # data[1]: elderberry + │ │ │ ├── 084-095: x 647261676f6e6672756974 # data[0]: dragonfruit + │ │ │ └── 095-105: x 656c6465726265727279 # data[1]: elderberry │ │ ├── data for column 5 (bool) - │ │ │ └── 113-114: x 01 # zero bitmap encoding + │ │ │ └── 105-106: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 114-115: x 01 # zero bitmap encoding - │ │ └── 115-116: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xd56f1e7d] - ├── data offset: 242 length: 117 + │ │ │ └── 106-107: x 01 # zero bitmap encoding + │ │ └── 107-108: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x9b921b37] + ├── data offset: 234 length: 117 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -437,7 +441,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -467,11 +471,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -490,8 +496,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 115-116: x 01 # zero bitmap encoding │ │ └── 116-117: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xf74eefc6] - ├── data offset: 364 length: 113 + │ └── trailer [compression=none checksum=0xf7385208] + ├── data offset: 356 length: 113 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -505,7 +511,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -535,11 +541,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -558,8 +566,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 111-112: x 01 # zero bitmap encoding │ │ └── 112-113: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x6cd1f806] - ├── data offset: 482 length: 115 + │ └── trailer [compression=none checksum=0x5d2be678] + ├── data offset: 474 length: 115 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -573,7 +581,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -603,11 +611,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -626,8 +636,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 113-114: x 01 # zero bitmap encoding │ │ └── 114-115: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x431d47b8] - ├── data offset: 602 length: 113 + │ └── trailer [compression=none checksum=0x2f572ac1] + ├── data offset: 594 length: 105 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -641,13 +651,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6e000000 # col 5: page start 110 + │ │ │ ├── 037-041: x 66000000 # col 5: page start 102 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 6f000000 # col 6: page start 111 + │ │ │ └── 042-046: x 67000000 # col 6: page start 103 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -668,29 +678,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 06 # data[1] = 6 [98 overall] - │ │ │ │ └── 091-092: x 12 # data[2] = 18 [110 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 06 # data[1] = 6 [90 overall] + │ │ │ │ └── 083-084: x 12 # data[2] = 18 [102 overall] │ │ │ └── data - │ │ │ ├── 092-098: x 6f72616e6765 # data[0]: orange - │ │ │ └── 098-110: x 70616d706c656d6f75737365 # data[1]: pamplemousse + │ │ │ ├── 084-090: x 6f72616e6765 # data[0]: orange + │ │ │ └── 090-102: x 70616d706c656d6f75737365 # data[1]: pamplemousse │ │ ├── data for column 5 (bool) - │ │ │ └── 110-111: x 01 # zero bitmap encoding + │ │ │ └── 102-103: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 111-112: x 01 # zero bitmap encoding - │ │ └── 112-113: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xc9a1bc98] - ├── data offset: 720 length: 110 + │ │ │ └── 103-104: x 01 # zero bitmap encoding + │ │ └── 104-105: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x712b9e3f] + ├── data offset: 704 length: 102 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -704,13 +715,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6b000000 # col 5: page start 107 + │ │ │ ├── 037-041: x 63000000 # col 5: page start 99 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 6c000000 # col 6: page start 108 + │ │ │ └── 042-046: x 64000000 # col 6: page start 100 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -731,29 +742,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 06 # data[1] = 6 [98 overall] - │ │ │ │ └── 091-092: x 0f # data[2] = 15 [107 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 06 # data[1] = 6 [90 overall] + │ │ │ │ └── 083-084: x 0f # data[2] = 15 [99 overall] │ │ │ └── data - │ │ │ ├── 092-098: x 7175696e6365 # data[0]: quince - │ │ │ └── 098-107: x 726173706265727279 # data[1]: raspberry + │ │ │ ├── 084-090: x 7175696e6365 # data[0]: quince + │ │ │ └── 090-099: x 726173706265727279 # data[1]: raspberry │ │ ├── data for column 5 (bool) - │ │ │ └── 107-108: x 01 # zero bitmap encoding + │ │ │ └── 099-100: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 108-109: x 01 # zero bitmap encoding - │ │ └── 109-110: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x9ed7918a] - ├── data offset: 835 length: 114 + │ │ │ └── 100-101: x 01 # zero bitmap encoding + │ │ └── 101-102: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x60b8893d] + ├── data offset: 811 length: 106 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -767,13 +779,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6f000000 # col 5: page start 111 + │ │ │ ├── 037-041: x 67000000 # col 5: page start 103 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 70000000 # col 6: page start 112 + │ │ │ └── 042-046: x 68000000 # col 6: page start 104 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -794,29 +806,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 0a # data[1] = 10 [102 overall] - │ │ │ │ └── 091-092: x 13 # data[2] = 19 [111 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 0a # data[1] = 10 [94 overall] + │ │ │ │ └── 083-084: x 13 # data[2] = 19 [103 overall] │ │ │ └── data - │ │ │ ├── 092-102: x 73747261776265727279 # data[0]: strawberry - │ │ │ └── 102-111: x 74616e676572696e65 # data[1]: tangerine + │ │ │ ├── 084-094: x 73747261776265727279 # data[0]: strawberry + │ │ │ └── 094-103: x 74616e676572696e65 # data[1]: tangerine │ │ ├── data for column 5 (bool) - │ │ │ └── 111-112: x 01 # zero bitmap encoding + │ │ │ └── 103-104: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 112-113: x 01 # zero bitmap encoding - │ │ └── 113-114: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x6027b22b] - ├── data offset: 954 length: 89 + │ │ │ └── 104-105: x 01 # zero bitmap encoding + │ │ └── 105-106: x 00 # block padding byte + │ └── trailer [compression=none checksum=0xe7abb862] + ├── data offset: 922 length: 89 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 00-04: x 01000000 # maximum key length: 1 @@ -830,7 +843,7 @@ sstable │ │ │ ├── 21-22: b 00000010 # col 2: uint │ │ │ ├── 22-26: x 35000000 # col 2: page start 53 │ │ │ ├── 26-27: b 00000001 # col 3: bool - │ │ │ ├── 27-31: x 3e000000 # col 3: page start 62 + │ │ │ ├── 27-31: x 38000000 # col 3: page start 56 │ │ │ ├── 31-32: b 00000011 # col 4: bytes │ │ │ ├── 32-36: x 50000000 # col 4: page start 80 │ │ │ ├── 36-37: b 00000001 # col 5: bool @@ -854,11 +867,11 @@ sstable │ │ │ └── data │ │ │ └── 53-53: x # data[0]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 53-54: x 80 # encoding: const - │ │ │ └── 54-62: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 53-54: x 02 # encoding: 2b + │ │ │ └── 54-56: x 0101 # data[0] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 62-63: x 00 # default bitmap encoding - │ │ │ ├── 63-64: x 00 # padding to align to 64-bit boundary + │ │ │ ├── 56-57: x 00 # default bitmap encoding + │ │ │ ├── 57-64: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 64-72: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 72-80: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -873,40 +886,40 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 87-88: x 01 # zero bitmap encoding │ │ └── 88-89: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x228c6ee8] - ├── index offset: 1048 length: 110 + │ └── trailer [compression=none checksum=0x6047542f] + ├── index offset: 1016 length: 110 │ ├── 00000 block:0/116 │ │ - │ ├── 00001 block:121/116 + │ ├── 00001 block:121/108 │ │ - │ ├── 00002 block:242/117 + │ ├── 00002 block:234/117 │ │ - │ ├── 00003 block:364/113 + │ ├── 00003 block:356/113 │ │ - │ └── trailer [compression=none checksum=0x3df89c5f] - ├── index offset: 1163 length: 110 - │ ├── 00000 block:482/115 + │ └── trailer [compression=none checksum=0x5fe81472] + ├── index offset: 1131 length: 110 + │ ├── 00000 block:474/115 │ │ - │ ├── 00001 block:602/113 + │ ├── 00001 block:594/105 │ │ - │ ├── 00002 block:720/110 + │ ├── 00002 block:704/102 │ │ - │ ├── 00003 block:835/114 + │ ├── 00003 block:811/106 │ │ - │ └── trailer [compression=none checksum=0x2b2e2864] - ├── index offset: 1278 length: 59 - │ ├── 00000 block:954/89 + │ └── trailer [compression=none checksum=0xa3f84dc2] + ├── index offset: 1246 length: 53 + │ ├── 00000 block:922/89 │ │ - │ └── trailer [compression=none checksum=0x2d50fda3] - ├── top-index offset: 1342 length: 96 - │ ├── 00000 block:1048/110 + │ └── trailer [compression=none checksum=0x52a073b5] + ├── top-index offset: 1304 length: 91 + │ ├── 00000 block:1016/110 │ │ - │ ├── 00001 block:1163/110 + │ ├── 00001 block:1131/110 │ │ - │ ├── 00002 block:1278/59 + │ ├── 00002 block:1246/53 │ │ - │ └── trailer [compression=none checksum=0x462d3144] - ├── properties offset: 1443 length: 571 + │ └── trailer [compression=none checksum=0x70310e3a] + ├── properties offset: 1400 length: 571 │ ├── 00000 obsolete-key (16) [restart] │ ├── 00016 pebble.internal.testkeys.suffixes (48) │ ├── 00064 rocksdb.block.based.table.index.type (43) @@ -929,16 +942,16 @@ sstable │ ├── 00539 rocksdb.top-level.index.size (24) │ ├── restart points │ │ └── 00563 [restart 0] - │ └── trailer [compression=none checksum=0x3542de03] - ├── meta-index offset: 2019 length: 33 - │ ├── 0000 rocksdb.properties block:1443/571 [restart] + │ └── trailer [compression=none checksum=0x8bcc1b94] + ├── meta-index offset: 1976 length: 33 + │ ├── 0000 rocksdb.properties block:1400/571 [restart] │ ├── restart points │ │ └── 00025 [restart 0] - │ └── trailer [compression=none checksum=0x5e4da9f6] - └── footer offset: 2057 length: 53 + │ └── trailer [compression=none checksum=0xdc5c5254] + └── footer offset: 2014 length: 53 ├── 000 checksum type: crc32c - ├── 001 meta: offset=2019, length=33 - ├── 004 index: offset=1342, length=96 + ├── 001 meta: offset=1976, length=33 + ├── 004 index: offset=1304, length=91 ├── 041 version: 5 └── 045 magic number: 0xf09faab3f09faab3 @@ -957,10 +970,10 @@ rocksdb.num.data.blocks: 12 rocksdb.compression: NoCompression rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; rocksdb.comparator: pebble.internal.testkeys -rocksdb.data.size: 1048 +rocksdb.data.size: 1016 rocksdb.filter.size: 0 rocksdb.index.partitions: 3 -rocksdb.index.size: 395 +rocksdb.index.size: 384 rocksdb.block.based.table.index.type: 2 rocksdb.merge.operator: pebble.concatenate rocksdb.merge.operands: 0 @@ -986,7 +999,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -1016,11 +1029,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -1039,8 +1054,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 114-115: x 01 # zero bitmap encoding │ │ └── 115-116: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xe7b15329] - ├── data offset: 121 length: 116 + │ └── trailer [compression=none checksum=0x3aec6bb5] + ├── data offset: 121 length: 108 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1054,13 +1069,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 71000000 # col 5: page start 113 + │ │ │ ├── 037-041: x 69000000 # col 5: page start 105 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 72000000 # col 6: page start 114 + │ │ │ └── 042-046: x 6a000000 # col 6: page start 106 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -1081,29 +1096,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 0b # data[1] = 11 [103 overall] - │ │ │ │ └── 091-092: x 15 # data[2] = 21 [113 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 0b # data[1] = 11 [95 overall] + │ │ │ │ └── 083-084: x 15 # data[2] = 21 [105 overall] │ │ │ └── data - │ │ │ ├── 092-103: x 647261676f6e6672756974 # data[0]: dragonfruit - │ │ │ └── 103-113: x 656c6465726265727279 # data[1]: elderberry + │ │ │ ├── 084-095: x 647261676f6e6672756974 # data[0]: dragonfruit + │ │ │ └── 095-105: x 656c6465726265727279 # data[1]: elderberry │ │ ├── data for column 5 (bool) - │ │ │ └── 113-114: x 01 # zero bitmap encoding + │ │ │ └── 105-106: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 114-115: x 01 # zero bitmap encoding - │ │ └── 115-116: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xd56f1e7d] - ├── data offset: 242 length: 117 + │ │ │ └── 106-107: x 01 # zero bitmap encoding + │ │ └── 107-108: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x9b921b37] + ├── data offset: 234 length: 117 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1117,7 +1133,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -1147,11 +1163,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -1170,8 +1188,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 115-116: x 01 # zero bitmap encoding │ │ └── 116-117: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xf74eefc6] - ├── data offset: 364 length: 113 + │ └── trailer [compression=none checksum=0xf7385208] + ├── data offset: 356 length: 113 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1185,7 +1203,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -1215,11 +1233,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -1238,8 +1258,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 111-112: x 01 # zero bitmap encoding │ │ └── 112-113: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x6cd1f806] - ├── data offset: 482 length: 115 + │ └── trailer [compression=none checksum=0x5d2be678] + ├── data offset: 474 length: 115 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1253,7 +1273,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 39000000 # col 2: page start 57 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 42000000 # col 3: page start 66 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -1283,11 +1303,13 @@ sstable │ │ │ ├── 057-057: x # data[1]: │ │ │ └── 057-057: x # data[2]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 057-058: x 80 # encoding: const - │ │ │ └── 058-066: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 057-058: x 02 # encoding: 2b + │ │ │ ├── 058-060: x 0101 # data[0] = 257 + │ │ │ ├── 060-062: x 0101 # data[1] = 257 + │ │ │ └── 062-064: x 0101 # data[2] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 066-067: x 00 # default bitmap encoding - │ │ │ ├── 067-072: x 0000000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000011100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -1306,8 +1328,8 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 113-114: x 01 # zero bitmap encoding │ │ └── 114-115: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x431d47b8] - ├── data offset: 602 length: 113 + │ └── trailer [compression=none checksum=0x2f572ac1] + ├── data offset: 594 length: 105 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1321,13 +1343,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6e000000 # col 5: page start 110 + │ │ │ ├── 037-041: x 66000000 # col 5: page start 102 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 6f000000 # col 6: page start 111 + │ │ │ └── 042-046: x 67000000 # col 6: page start 103 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -1348,29 +1370,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 06 # data[1] = 6 [98 overall] - │ │ │ │ └── 091-092: x 12 # data[2] = 18 [110 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 06 # data[1] = 6 [90 overall] + │ │ │ │ └── 083-084: x 12 # data[2] = 18 [102 overall] │ │ │ └── data - │ │ │ ├── 092-098: x 6f72616e6765 # data[0]: orange - │ │ │ └── 098-110: x 70616d706c656d6f75737365 # data[1]: pamplemousse + │ │ │ ├── 084-090: x 6f72616e6765 # data[0]: orange + │ │ │ └── 090-102: x 70616d706c656d6f75737365 # data[1]: pamplemousse │ │ ├── data for column 5 (bool) - │ │ │ └── 110-111: x 01 # zero bitmap encoding + │ │ │ └── 102-103: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 111-112: x 01 # zero bitmap encoding - │ │ └── 112-113: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xc9a1bc98] - ├── data offset: 720 length: 110 + │ │ │ └── 103-104: x 01 # zero bitmap encoding + │ │ └── 104-105: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x712b9e3f] + ├── data offset: 704 length: 102 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1384,13 +1407,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6b000000 # col 5: page start 107 + │ │ │ ├── 037-041: x 63000000 # col 5: page start 99 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 6c000000 # col 6: page start 108 + │ │ │ └── 042-046: x 64000000 # col 6: page start 100 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -1411,29 +1434,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 06 # data[1] = 6 [98 overall] - │ │ │ │ └── 091-092: x 0f # data[2] = 15 [107 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 06 # data[1] = 6 [90 overall] + │ │ │ │ └── 083-084: x 0f # data[2] = 15 [99 overall] │ │ │ └── data - │ │ │ ├── 092-098: x 7175696e6365 # data[0]: quince - │ │ │ └── 098-107: x 726173706265727279 # data[1]: raspberry + │ │ │ ├── 084-090: x 7175696e6365 # data[0]: quince + │ │ │ └── 090-099: x 726173706265727279 # data[1]: raspberry │ │ ├── data for column 5 (bool) - │ │ │ └── 107-108: x 01 # zero bitmap encoding + │ │ │ └── 099-100: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 108-109: x 01 # zero bitmap encoding - │ │ └── 109-110: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x9ed7918a] - ├── data offset: 835 length: 114 + │ │ │ └── 100-101: x 01 # zero bitmap encoding + │ │ └── 101-102: x 00 # block padding byte + │ └── trailer [compression=none checksum=0x60b8893d] + ├── data offset: 811 length: 106 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 01000000 # maximum key length: 1 @@ -1447,13 +1471,13 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 37000000 # col 2: page start 55 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 + │ │ │ ├── 027-031: x 3c000000 # col 3: page start 60 │ │ │ ├── 031-032: b 00000011 # col 4: bytes - │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 + │ │ │ ├── 032-036: x 50000000 # col 4: page start 80 │ │ │ ├── 036-037: b 00000001 # col 5: bool - │ │ │ ├── 037-041: x 6f000000 # col 5: page start 111 + │ │ │ ├── 037-041: x 67000000 # col 5: page start 103 │ │ │ ├── 041-042: b 00000001 # col 6: bool - │ │ │ └── 042-046: x 70000000 # col 6: page start 112 + │ │ │ └── 042-046: x 68000000 # col 6: page start 104 │ │ ├── data for column 0 (prefixbytes) │ │ │ ├── 046-047: x 04 # bundle size: 16 │ │ │ ├── offsets table @@ -1474,29 +1498,30 @@ sstable │ │ │ ├── 055-055: x # data[0]: │ │ │ └── 055-055: x # data[1]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 055-056: x 80 # encoding: const - │ │ │ └── 056-064: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 055-056: x 02 # encoding: 2b + │ │ │ ├── 056-058: x 0101 # data[0] = 257 + │ │ │ └── 058-060: x 0101 # data[1] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 064-065: x 00 # default bitmap encoding - │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary - │ │ │ ├── 072-080: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 - │ │ │ └── 080-088: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 + │ │ │ ├── 060-061: x 00 # default bitmap encoding + │ │ │ ├── 061-064: x 000000 # padding to align to 64-bit boundary + │ │ │ ├── 064-072: b 0000001100000000000000000000000000000000000000000000000000000000 # bitmap word 0 + │ │ │ └── 072-080: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ ├── 088-089: x 01 # encoding: 1b - │ │ │ │ ├── 089-090: x 00 # data[0] = 0 [92 overall] - │ │ │ │ ├── 090-091: x 0a # data[1] = 10 [102 overall] - │ │ │ │ └── 091-092: x 13 # data[2] = 19 [111 overall] + │ │ │ │ ├── 080-081: x 01 # encoding: 1b + │ │ │ │ ├── 081-082: x 00 # data[0] = 0 [84 overall] + │ │ │ │ ├── 082-083: x 0a # data[1] = 10 [94 overall] + │ │ │ │ └── 083-084: x 13 # data[2] = 19 [103 overall] │ │ │ └── data - │ │ │ ├── 092-102: x 73747261776265727279 # data[0]: strawberry - │ │ │ └── 102-111: x 74616e676572696e65 # data[1]: tangerine + │ │ │ ├── 084-094: x 73747261776265727279 # data[0]: strawberry + │ │ │ └── 094-103: x 74616e676572696e65 # data[1]: tangerine │ │ ├── data for column 5 (bool) - │ │ │ └── 111-112: x 01 # zero bitmap encoding + │ │ │ └── 103-104: x 01 # zero bitmap encoding │ │ ├── data for column 6 (bool) - │ │ │ └── 112-113: x 01 # zero bitmap encoding - │ │ └── 113-114: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x6027b22b] - ├── data offset: 954 length: 89 + │ │ │ └── 104-105: x 01 # zero bitmap encoding + │ │ └── 105-106: x 00 # block padding byte + │ └── trailer [compression=none checksum=0xe7abb862] + ├── data offset: 922 length: 89 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 00-04: x 01000000 # maximum key length: 1 @@ -1510,7 +1535,7 @@ sstable │ │ │ ├── 21-22: b 00000010 # col 2: uint │ │ │ ├── 22-26: x 35000000 # col 2: page start 53 │ │ │ ├── 26-27: b 00000001 # col 3: bool - │ │ │ ├── 27-31: x 3e000000 # col 3: page start 62 + │ │ │ ├── 27-31: x 38000000 # col 3: page start 56 │ │ │ ├── 31-32: b 00000011 # col 4: bytes │ │ │ ├── 32-36: x 50000000 # col 4: page start 80 │ │ │ ├── 36-37: b 00000001 # col 5: bool @@ -1534,11 +1559,11 @@ sstable │ │ │ └── data │ │ │ └── 53-53: x # data[0]: │ │ ├── data for column 2 (uint) - │ │ │ ├── 53-54: x 80 # encoding: const - │ │ │ └── 54-62: x 0101000000000000 # 64-bit constant: 257 + │ │ │ ├── 53-54: x 02 # encoding: 2b + │ │ │ └── 54-56: x 0101 # data[0] = 257 │ │ ├── data for column 3 (bool) - │ │ │ ├── 62-63: x 00 # default bitmap encoding - │ │ │ ├── 63-64: x 00 # padding to align to 64-bit boundary + │ │ │ ├── 56-57: x 00 # default bitmap encoding + │ │ │ ├── 57-64: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 64-72: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 72-80: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -1553,40 +1578,40 @@ sstable │ │ ├── data for column 6 (bool) │ │ │ └── 87-88: x 01 # zero bitmap encoding │ │ └── 88-89: x 00 # block padding byte - │ └── trailer [compression=none checksum=0x228c6ee8] - ├── index offset: 1048 length: 110 + │ └── trailer [compression=none checksum=0x6047542f] + ├── index offset: 1016 length: 110 │ ├── 00000 block:0/116 │ │ - │ ├── 00001 block:121/116 + │ ├── 00001 block:121/108 │ │ - │ ├── 00002 block:242/117 + │ ├── 00002 block:234/117 │ │ - │ ├── 00003 block:364/113 + │ ├── 00003 block:356/113 │ │ - │ └── trailer [compression=none checksum=0x3df89c5f] - ├── index offset: 1163 length: 110 - │ ├── 00000 block:482/115 + │ └── trailer [compression=none checksum=0x5fe81472] + ├── index offset: 1131 length: 110 + │ ├── 00000 block:474/115 │ │ - │ ├── 00001 block:602/113 + │ ├── 00001 block:594/105 │ │ - │ ├── 00002 block:720/110 + │ ├── 00002 block:704/102 │ │ - │ ├── 00003 block:835/114 + │ ├── 00003 block:811/106 │ │ - │ └── trailer [compression=none checksum=0x2b2e2864] - ├── index offset: 1278 length: 59 - │ ├── 00000 block:954/89 + │ └── trailer [compression=none checksum=0xa3f84dc2] + ├── index offset: 1246 length: 53 + │ ├── 00000 block:922/89 │ │ - │ └── trailer [compression=none checksum=0x2d50fda3] - ├── top-index offset: 1342 length: 96 - │ ├── 00000 block:1048/110 + │ └── trailer [compression=none checksum=0x52a073b5] + ├── top-index offset: 1304 length: 91 + │ ├── 00000 block:1016/110 │ │ - │ ├── 00001 block:1163/110 + │ ├── 00001 block:1131/110 │ │ - │ ├── 00002 block:1278/59 + │ ├── 00002 block:1246/53 │ │ - │ └── trailer [compression=none checksum=0x462d3144] - ├── properties offset: 1443 length: 571 + │ └── trailer [compression=none checksum=0x70310e3a] + ├── properties offset: 1400 length: 571 │ ├── 00000 obsolete-key (16) [restart] │ ├── 00016 pebble.internal.testkeys.suffixes (48) │ ├── 00064 rocksdb.block.based.table.index.type (43) @@ -1609,16 +1634,16 @@ sstable │ ├── 00539 rocksdb.top-level.index.size (24) │ ├── restart points │ │ └── 00563 [restart 0] - │ └── trailer [compression=none checksum=0x3542de03] - ├── meta-index offset: 2019 length: 33 - │ ├── 0000 rocksdb.properties block:1443/571 [restart] + │ └── trailer [compression=none checksum=0x8bcc1b94] + ├── meta-index offset: 1976 length: 33 + │ ├── 0000 rocksdb.properties block:1400/571 [restart] │ ├── restart points │ │ └── 00025 [restart 0] - │ └── trailer [compression=none checksum=0x5e4da9f6] - └── footer offset: 2057 length: 53 + │ └── trailer [compression=none checksum=0xdc5c5254] + └── footer offset: 2014 length: 53 ├── 000 checksum type: crc32c - ├── 001 meta: offset=2019, length=33 - ├── 004 index: offset=1342, length=96 + ├── 001 meta: offset=1976, length=33 + ├── 004 index: offset=1304, length=91 ├── 041 version: 5 └── 045 magic number: 0xf09faab3f09faab3 @@ -1639,7 +1664,7 @@ layout sstable ├── index offset: 0 length: 28 │ └── trailer [compression=none checksum=0xb97d72f2] - ├── range-del offset: 33 length: 57 + ├── range-del offset: 33 length: 51 │ ├── keyspan block header │ │ ├── 00-04: x 02000000 # user key count: 2 │ │ ├── columnar block header @@ -1653,9 +1678,9 @@ sstable │ │ │ ├── 21-22: b 00000010 # col 2: uint │ │ │ ├── 22-26: x 2d000000 # col 2: page start 45 │ │ │ ├── 26-27: b 00000011 # col 3: bytes - │ │ │ ├── 27-31: x 36000000 # col 3: page start 54 + │ │ │ ├── 27-31: x 30000000 # col 3: page start 48 │ │ │ ├── 31-32: b 00000011 # col 4: bytes - │ │ │ └── 32-36: x 37000000 # col 4: page start 55 + │ │ │ └── 32-36: x 31000000 # col 4: page start 49 │ │ ├── data for column 0 (bytes) │ │ │ ├── offsets table │ │ │ │ ├── 36-37: x 01 # encoding: 1b @@ -1670,21 +1695,21 @@ sstable │ │ │ ├── 43-44: x 00 # data[0] = 0 │ │ │ └── 44-45: x 01 # data[1] = 1 │ │ ├── data for column 2 (uint) - │ │ │ ├── 45-46: x 80 # encoding: const - │ │ │ └── 46-54: x 0f0a000000000000 # 64-bit constant: 2575 + │ │ │ ├── 45-46: x 02 # encoding: 2b + │ │ │ └── 46-48: x 0f0a # data[0] = 2575 │ │ ├── data for column 3 (bytes) │ │ │ ├── offsets table - │ │ │ │ └── 54-55: x 00 # encoding: zero + │ │ │ │ └── 48-49: x 00 # encoding: zero │ │ │ └── data - │ │ │ └── 55-55: x # data[0]: + │ │ │ └── 49-49: x # data[0]: │ │ ├── data for column 4 (bytes) │ │ │ ├── offsets table - │ │ │ │ └── 55-56: x 00 # encoding: zero + │ │ │ │ └── 49-50: x 00 # encoding: zero │ │ │ └── data - │ │ │ └── 56-56: x # data[0]: - │ │ └── 56-57: x 00 # block padding byte - │ └── trailer [compression=none checksum=0xdf6fef49] - ├── properties offset: 95 length: 519 + │ │ │ └── 50-50: x # data[0]: + │ │ └── 50-51: x 00 # block padding byte + │ └── trailer [compression=none checksum=0xb1e3982b] + ├── properties offset: 89 length: 519 │ ├── 00000 obsolete-key (17) [restart] │ ├── 00017 pebble.internal.testkeys.suffixes (37) │ ├── 00054 rocksdb.block.based.table.index.type (43) @@ -1706,16 +1731,16 @@ sstable │ ├── restart points │ │ └── 00511 [restart 0] │ └── trailer [compression=none checksum=0x3c8fb979] - ├── meta-index offset: 619 length: 59 - │ ├── 0000 rocksdb.properties block:95/519 [restart] - │ ├── 0024 rocksdb.range_del2 block:33/57 [restart] + ├── meta-index offset: 613 length: 59 + │ ├── 0000 rocksdb.properties block:89/519 [restart] + │ ├── 0024 rocksdb.range_del2 block:33/51 [restart] │ ├── restart points │ │ ├── 00047 [restart 0] │ │ └── 00051 [restart 24] - │ └── trailer [compression=none checksum=0x6f10fc54] - └── footer offset: 683 length: 53 + │ └── trailer [compression=none checksum=0xbabe7d85] + └── footer offset: 677 length: 53 ├── 000 checksum type: crc32c - ├── 001 meta: offset=619, length=59 + ├── 001 meta: offset=613, length=59 ├── 004 index: offset=0, length=28 ├── 041 version: 5 └── 045 magic number: 0xf09faab3f09faab3 diff --git a/sstable/testdata/copy_span b/sstable/testdata/copy_span index 655bd90ecc..e939a50c60 100644 --- a/sstable/testdata/copy_span +++ b/sstable/testdata/copy_span @@ -53,7 +53,7 @@ d#0,SET: foobar copy-span test3 test4 b.SET.10 cc.SET.0 ---- -copied 790 bytes +copied 821 bytes iter test4 ---- @@ -63,7 +63,7 @@ d#0,SET: foobar copy-span test3 test5 a.SET.10 bb.SET.0 ---- -copied 787 bytes +copied 829 bytes iter test5 ---- diff --git a/sstable/testdata/rewriter_v5 b/sstable/testdata/rewriter_v5 index 794430f350..44ac7b8a90 100644 --- a/sstable/testdata/rewriter_v5 +++ b/sstable/testdata/rewriter_v5 @@ -37,17 +37,17 @@ seqnums: [1-1] layout ---- sstable - ├── data offset: 0 length: 78 - ├── data offset: 83 length: 78 - ├── data offset: 166 length: 78 - ├── index offset: 249 length: 38 - ├── index offset: 292 length: 46 - ├── index offset: 343 length: 44 - ├── top-index offset: 392 length: 57 - ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 454 length: 69 - ├── properties offset: 528 length: 515 - ├── meta-index offset: 1048 length: 80 - └── footer offset: 1133 length: 53 + ├── data offset: 0 length: 87 + ├── data offset: 92 length: 87 + ├── data offset: 184 length: 87 + ├── index offset: 276 length: 38 + ├── index offset: 319 length: 39 + ├── index offset: 363 length: 37 + ├── top-index offset: 405 length: 52 + ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 462 length: 69 + ├── properties offset: 536 length: 515 + ├── meta-index offset: 1056 length: 80 + └── footer offset: 1141 length: 53 scan ---- @@ -72,17 +72,17 @@ seqnums: [1-1] layout ---- sstable - ├── data offset: 0 length: 80 - ├── data offset: 85 length: 80 - ├── data offset: 170 length: 80 - ├── index offset: 255 length: 40 - ├── index offset: 300 length: 48 - ├── index offset: 353 length: 44 - ├── top-index offset: 402 length: 61 - ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 468 length: 69 - ├── properties offset: 542 length: 515 - ├── meta-index offset: 1062 length: 80 - └── footer offset: 1147 length: 53 + ├── data offset: 0 length: 87 + ├── data offset: 92 length: 87 + ├── data offset: 184 length: 87 + ├── index offset: 276 length: 40 + ├── index offset: 321 length: 41 + ├── index offset: 367 length: 37 + ├── top-index offset: 409 length: 56 + ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 470 length: 69 + ├── properties offset: 544 length: 515 + ├── meta-index offset: 1064 length: 80 + └── footer offset: 1149 length: 53 scan ---- @@ -107,17 +107,17 @@ seqnums: [1-1] layout ---- sstable - ├── data offset: 0 length: 80 - ├── data offset: 85 length: 80 - ├── data offset: 170 length: 80 - ├── index offset: 255 length: 40 - ├── index offset: 300 length: 48 - ├── index offset: 353 length: 44 - ├── top-index offset: 402 length: 61 - ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 468 length: 69 - ├── properties offset: 542 length: 515 - ├── meta-index offset: 1062 length: 80 - └── footer offset: 1147 length: 53 + ├── data offset: 0 length: 87 + ├── data offset: 92 length: 87 + ├── data offset: 184 length: 87 + ├── index offset: 276 length: 40 + ├── index offset: 321 length: 41 + ├── index offset: 367 length: 37 + ├── top-index offset: 409 length: 56 + ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 470 length: 69 + ├── properties offset: 544 length: 515 + ├── meta-index offset: 1064 length: 80 + └── footer offset: 1149 length: 53 scan ---- @@ -142,17 +142,17 @@ seqnums: [1-1] layout ---- sstable - ├── data offset: 0 length: 80 - ├── data offset: 85 length: 80 - ├── data offset: 170 length: 80 - ├── index offset: 255 length: 40 - ├── index offset: 300 length: 48 - ├── index offset: 353 length: 44 - ├── top-index offset: 402 length: 61 - ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 468 length: 69 - ├── properties offset: 542 length: 515 - ├── meta-index offset: 1062 length: 80 - └── footer offset: 1147 length: 53 + ├── data offset: 0 length: 87 + ├── data offset: 92 length: 87 + ├── data offset: 184 length: 87 + ├── index offset: 276 length: 40 + ├── index offset: 321 length: 41 + ├── index offset: 367 length: 37 + ├── top-index offset: 409 length: 56 + ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 470 length: 69 + ├── properties offset: 544 length: 515 + ├── meta-index offset: 1064 length: 80 + └── footer offset: 1149 length: 53 scan ---- @@ -178,17 +178,17 @@ seqnums: [1-1] layout ---- sstable - ├── data offset: 0 length: 78 - ├── data offset: 83 length: 78 - ├── data offset: 166 length: 78 - ├── index offset: 249 length: 38 - ├── index offset: 292 length: 46 - ├── index offset: 343 length: 44 - ├── top-index offset: 392 length: 57 - ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 454 length: 69 - ├── properties offset: 528 length: 515 - ├── meta-index offset: 1048 length: 80 - └── footer offset: 1133 length: 53 + ├── data offset: 0 length: 87 + ├── data offset: 92 length: 87 + ├── data offset: 184 length: 87 + ├── index offset: 276 length: 38 + ├── index offset: 319 length: 39 + ├── index offset: 363 length: 37 + ├── top-index offset: 405 length: 52 + ├── fullfilter.rocksdb.BuiltinBloomFilter offset: 462 length: 69 + ├── properties offset: 536 length: 515 + ├── meta-index offset: 1056 length: 80 + └── footer offset: 1141 length: 53 scan ---- diff --git a/sstable/testdata/writer_v5 b/sstable/testdata/writer_v5 index 4fd946f36b..0801d12849 100644 --- a/sstable/testdata/writer_v5 +++ b/sstable/testdata/writer_v5 @@ -231,12 +231,12 @@ sstable ├── data offset: 79 length: 74 ├── data offset: 158 length: 74 ├── index offset: 237 length: 36 - ├── index offset: 278 length: 44 - ├── index offset: 327 length: 44 - ├── top-index offset: 376 length: 53 - ├── properties offset: 434 length: 480 - ├── meta-index offset: 919 length: 33 - └── footer offset: 957 length: 53 + ├── index offset: 278 length: 37 + ├── index offset: 320 length: 37 + ├── top-index offset: 362 length: 48 + ├── properties offset: 415 length: 480 + ├── meta-index offset: 900 length: 33 + └── footer offset: 938 length: 53 # Exercise the non-Reader layout-decoding codepath. @@ -247,12 +247,12 @@ sstable ├── data offset: 79 length: 74 ├── data offset: 158 length: 74 ├── index offset: 237 length: 36 - ├── index offset: 278 length: 44 - ├── index offset: 327 length: 44 - ├── top-index offset: 376 length: 53 - ├── properties offset: 434 length: 480 - ├── meta-index offset: 919 length: 33 - └── footer offset: 957 length: 53 + ├── index offset: 278 length: 37 + ├── index offset: 320 length: 37 + ├── top-index offset: 362 length: 48 + ├── properties offset: 415 length: 480 + ├── meta-index offset: 900 length: 33 + └── footer offset: 938 length: 53 scan ---- diff --git a/sstable/testdata/writer_value_blocks b/sstable/testdata/writer_value_blocks index 0948be5d2d..04029b641b 100644 --- a/sstable/testdata/writer_value_blocks +++ b/sstable/testdata/writer_value_blocks @@ -369,7 +369,7 @@ sstable │ │ │ ├── 21-22: b 00000010 # col 2: uint │ │ │ ├── 22-26: x 3d000000 # col 2: page start 61 │ │ │ ├── 26-27: b 00000001 # col 3: bool - │ │ │ ├── 27-31: x 46000000 # col 3: page start 70 + │ │ │ ├── 27-31: x 40000000 # col 3: page start 64 │ │ │ ├── 31-32: b 00000011 # col 4: bytes │ │ │ ├── 32-36: x 58000000 # col 4: page start 88 │ │ │ ├── 36-37: b 00000001 # col 5: bool @@ -395,11 +395,11 @@ sstable │ │ │ └── data │ │ │ └── 58-61: x 403130 # data[0]: @10 │ │ ├── data for column 2 (uint) - │ │ │ ├── 61-62: x 80 # encoding: const - │ │ │ └── 62-70: x 0114000000000000 # 64-bit constant: 5121 + │ │ │ ├── 61-62: x 02 # encoding: 2b + │ │ │ └── 62-64: x 0114 # data[0] = 5121 │ │ ├── data for column 3 (bool) - │ │ │ ├── 70-71: x 00 # default bitmap encoding - │ │ │ ├── 71-72: x 00 # padding to align to 64-bit boundary + │ │ │ ├── 64-65: x 00 # default bitmap encoding + │ │ │ ├── 65-72: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 72-80: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 80-88: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -415,8 +415,8 @@ sstable │ │ │ └── 98-99: x 01 # zero bitmap encoding │ │ └── 99-100: x 00 # block padding byte │ ├── blue@10#20,SET:blue10 - │ └── trailer [compression=snappy checksum=0x3a342f9] - ├── data offset: 86 length: 85 + │ └── trailer [compression=snappy checksum=0xbbb19ea6] + ├── data offset: 86 length: 86 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 06000000 # maximum key length: 6 @@ -430,7 +430,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 3c000000 # col 2: page start 60 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 45000000 # col 3: page start 69 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -456,11 +456,12 @@ sstable │ │ │ └── data │ │ │ └── 058-060: x 4038 # data[0]: @8 │ │ ├── data for column 2 (uint) - │ │ │ ├── 060-061: x 80 # encoding: const - │ │ │ └── 061-069: x 0112000000000000 # 64-bit constant: 4609 + │ │ │ ├── 060-061: x 02 # encoding: 2b + │ │ │ ├── 061-062: x 00 # padding (aligning to 16-bit boundary) + │ │ │ └── 062-064: x 0112 # data[0] = 4609 │ │ ├── data for column 3 (bool) - │ │ │ ├── 069-070: x 00 # default bitmap encoding - │ │ │ ├── 070-072: x 0000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -478,8 +479,8 @@ sstable │ │ │ └── 112-113: x 01 # zero bitmap encoding │ │ └── 113-114: x 00 # block padding byte │ ├── blue@8#18,SET:value handle {valueLen:5 blockNum:0 offsetInBlock:0} - │ └── trailer [compression=snappy checksum=0x17efbf53] - ├── data offset: 176 length: 94 + │ └── trailer [compression=snappy checksum=0xceb8415d] + ├── data offset: 177 length: 95 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 06000000 # maximum key length: 6 @@ -493,7 +494,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 3c000000 # col 2: page start 60 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 45000000 # col 3: page start 69 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -519,11 +520,12 @@ sstable │ │ │ └── data │ │ │ └── 058-060: x 4038 # data[0]: @8 │ │ ├── data for column 2 (uint) - │ │ │ ├── 060-061: x 80 # encoding: const - │ │ │ └── 061-069: x 0110000000000000 # 64-bit constant: 4097 + │ │ │ ├── 060-061: x 02 # encoding: 2b + │ │ │ ├── 061-062: x 00 # padding (aligning to 16-bit boundary) + │ │ │ └── 062-064: x 0110 # data[0] = 4097 │ │ ├── data for column 3 (bool) - │ │ │ ├── 069-070: x 00 # default bitmap encoding - │ │ │ ├── 070-072: x 0000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -544,8 +546,8 @@ sstable │ │ │ └── 128-136: b 0000000100000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ └── 136-137: x 00 # block padding byte │ ├── blue@8#16,SET:value handle {valueLen:6 blockNum:0 offsetInBlock:5} - │ └── trailer [compression=snappy checksum=0x9371e6fd] - ├── data offset: 275 length: 90 + │ └── trailer [compression=snappy checksum=0xfb8462e1] + ├── data offset: 277 length: 91 │ ├── data block header │ │ ├── columnar block header │ │ │ ├── 000-004: x 06000000 # maximum key length: 6 @@ -559,7 +561,7 @@ sstable │ │ │ ├── 021-022: b 00000010 # col 2: uint │ │ │ ├── 022-026: x 3c000000 # col 2: page start 60 │ │ │ ├── 026-027: b 00000001 # col 3: bool - │ │ │ ├── 027-031: x 45000000 # col 3: page start 69 + │ │ │ ├── 027-031: x 40000000 # col 3: page start 64 │ │ │ ├── 031-032: b 00000011 # col 4: bytes │ │ │ ├── 032-036: x 58000000 # col 4: page start 88 │ │ │ ├── 036-037: b 00000001 # col 5: bool @@ -585,11 +587,12 @@ sstable │ │ │ └── data │ │ │ └── 058-060: x 4036 # data[0]: @6 │ │ ├── data for column 2 (uint) - │ │ │ ├── 060-061: x 80 # encoding: const - │ │ │ └── 061-069: x 0110000000000000 # 64-bit constant: 4097 + │ │ │ ├── 060-061: x 02 # encoding: 2b + │ │ │ ├── 061-062: x 00 # padding (aligning to 16-bit boundary) + │ │ │ └── 062-064: x 0110 # data[0] = 4097 │ │ ├── data for column 3 (bool) - │ │ │ ├── 069-070: x 00 # default bitmap encoding - │ │ │ ├── 070-072: x 0000 # padding to align to 64-bit boundary + │ │ │ ├── 064-065: x 00 # default bitmap encoding + │ │ │ ├── 065-072: x 00000000000000 # padding to align to 64-bit boundary │ │ │ ├── 072-080: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap word 0 │ │ │ └── 080-088: b 0000000000000000000000000000000000000000000000000000000000000000 # bitmap summary word 0-63 │ │ ├── data for column 4 (bytes) @@ -607,40 +610,40 @@ sstable │ │ │ └── 112-113: x 01 # zero bitmap encoding │ │ └── 113-114: x 00 # block padding byte │ ├── blue@6#16,SET:value handle {valueLen:15 blockNum:1 offsetInBlock:0} - │ └── trailer [compression=snappy checksum=0xcfdbcc3c] - ├── index offset: 370 length: 42 + │ └── trailer [compression=snappy checksum=0xa053f3eb] + ├── index offset: 373 length: 42 │ ├── 00000 block:0/81 │ │ │ └── trailer [compression=none checksum=0x80ae3e61] - ├── index offset: 417 length: 49 - │ ├── 00000 block:86/85 + ├── index offset: 420 length: 42 + │ ├── 00000 block:86/86 │ │ - │ └── trailer [compression=none checksum=0xf2bc08f4] - ├── index offset: 471 length: 54 - │ ├── 00000 block:176/94 + │ └── trailer [compression=none checksum=0xca4212f3] + ├── index offset: 467 length: 47 + │ ├── 00000 block:177/95 │ │ - │ └── trailer [compression=none checksum=0x4eed6c67] - ├── index offset: 530 length: 44 - │ ├── 00000 block:275/90 + │ └── trailer [compression=none checksum=0xb10589b8] + ├── index offset: 519 length: 38 + │ ├── 00000 block:277/91 │ │ - │ └── trailer [compression=none checksum=0xbacbe8f5] - ├── top-index offset: 579 length: 81 - │ ├── 00000 block:370/42 + │ └── trailer [compression=none checksum=0xb4e5aa79] + ├── top-index offset: 562 length: 77 + │ ├── 00000 block:373/42 │ │ - │ ├── 00001 block:417/49 + │ ├── 00001 block:420/42 │ │ - │ ├── 00002 block:471/54 + │ ├── 00002 block:467/47 │ │ - │ ├── 00003 block:530/44 + │ ├── 00003 block:519/38 │ │ - │ └── trailer [compression=none checksum=0xdacecc3b] - ├── value-block offset: 665 length: 11 + │ └── trailer [compression=none checksum=0x27e2999a] + ├── value-block offset: 644 length: 11 │ └── trailer [compression=none checksum=0x86dee352] - ├── value-block offset: 681 length: 15 + ├── value-block offset: 660 length: 15 │ └── trailer [compression=none checksum=0x60e7fb82] - ├── value-index offset: 701 length: 8 - │ └── trailer [compression=none checksum=0xf15e602c] - ├── properties offset: 714 length: 549 + ├── value-index offset: 680 length: 8 + │ └── trailer [compression=none checksum=0xb327e021] + ├── properties offset: 693 length: 549 │ ├── 00000 obsolete-key (16) [restart] │ ├── 00016 pebble.num.value-blocks (27) │ ├── 00043 pebble.num.values.in.value-blocks (21) @@ -665,18 +668,18 @@ sstable │ ├── 00517 rocksdb.top-level.index.size (24) │ ├── restart points │ │ └── 00541 [restart 0] - │ └── trailer [compression=none checksum=0x2e004e9b] - ├── meta-index offset: 1268 length: 64 - │ ├── 0000 pebble.value_index block:701/8 value-blocks-index-lengths: 1(num), 2(offset), 1(length) [restart] - │ ├── 0027 rocksdb.properties block:714/549 [restart] + │ └── trailer [compression=none checksum=0x74ea3d7a] + ├── meta-index offset: 1247 length: 64 + │ ├── 0000 pebble.value_index block:680/8 value-blocks-index-lengths: 1(num), 2(offset), 1(length) [restart] + │ ├── 0027 rocksdb.properties block:693/549 [restart] │ ├── restart points │ │ ├── 00052 [restart 0] │ │ └── 00056 [restart 27] - │ └── trailer [compression=none checksum=0x926e2244] - └── footer offset: 1337 length: 53 + │ └── trailer [compression=none checksum=0x5a3ff93a] + └── footer offset: 1316 length: 53 ├── 000 checksum type: crc32c - ├── 001 meta: offset=1268, length=64 - ├── 004 index: offset=579, length=81 + ├── 001 meta: offset=1247, length=64 + ├── 004 index: offset=562, length=77 ├── 041 version: 5 └── 045 magic number: 0xf09faab3f09faab3