Skip to content

Commit da21e65

Browse files
committed
Optimize Zstd decompression to reduce memory allocations and improve performance
1 parent 8a6a022 commit da21e65

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

trino/trino.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1896,12 +1896,13 @@ func decompressSegment(data []byte, encoding string, metadata segmentMetadata) (
18961896
var decompressedData []byte
18971897
switch encoding {
18981898
case "json+zstd":
1899-
zstdReader, err := zstd.NewReader(bytes.NewReader(data))
1899+
zstdDecoder, err := zstd.NewReader(nil)
19001900
if err != nil {
19011901
return nil, fmt.Errorf("error creating zstd reader: %w", err)
19021902
}
1903-
defer zstdReader.Close()
1904-
decompressedData, err = io.ReadAll(zstdReader)
1903+
defer zstdDecoder.Close()
1904+
dst := make([]byte, 0, metadata.uncompressedSize)
1905+
decompressedData, err = zstdDecoder.DecodeAll(data, dst)
19051906
if err != nil {
19061907
return nil, fmt.Errorf("failed to decompress zstd segment at rowOffset %d: %v", metadata.rowOffset, err)
19071908
}

0 commit comments

Comments
 (0)