This is an automated email from the ASF dual-hosted git repository.
vinoth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hudi.git
The following commit(s) were added to refs/heads/master by this push:
new a33a55f Caching Avro Binary encoder/decoder to avoid creating new one
for every record
a33a55f is described below
commit a33a55fcb59c9de341bc3169defda94df2910e65
Author: Nishith Agarwal <[email protected]>
AuthorDate: Sun May 5 21:26:16 2019 -0700
Caching Avro Binary encoder/decoder to avoid creating new one for every
record
---
.../hoodie/common/table/log/block/HoodieAvroDataBlock.java | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git
a/hoodie-common/src/main/java/com/uber/hoodie/common/table/log/block/HoodieAvroDataBlock.java
b/hoodie-common/src/main/java/com/uber/hoodie/common/table/log/block/HoodieAvroDataBlock.java
index b882252..f926d32 100644
---
a/hoodie-common/src/main/java/com/uber/hoodie/common/table/log/block/HoodieAvroDataBlock.java
+++
b/hoodie-common/src/main/java/com/uber/hoodie/common/table/log/block/HoodieAvroDataBlock.java
@@ -37,6 +37,8 @@ import org.apache.avro.Schema;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.IndexedRecord;
+import org.apache.avro.io.BinaryDecoder;
+import org.apache.avro.io.BinaryEncoder;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
@@ -52,6 +54,8 @@ public class HoodieAvroDataBlock extends HoodieLogBlock {
private List<IndexedRecord> records;
private Schema schema;
+ private ThreadLocal<BinaryEncoder> encoderCache = new ThreadLocal<>();
+ private ThreadLocal<BinaryDecoder> decoderCache = new ThreadLocal<>();
public HoodieAvroDataBlock(@Nonnull List<IndexedRecord> records,
@Nonnull Map<HeaderMetadataType, String> header,
@@ -118,7 +122,8 @@ public class HoodieAvroDataBlock extends HoodieLogBlock {
while (itr.hasNext()) {
IndexedRecord s = itr.next();
ByteArrayOutputStream temp = new ByteArrayOutputStream();
- Encoder encoder = EncoderFactory.get().binaryEncoder(temp, null);
+ BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(temp,
encoderCache.get());
+ encoderCache.set(encoder);
try {
// Encode the record into bytes
writer.write(s, encoder);
@@ -201,8 +206,9 @@ public class HoodieAvroDataBlock extends HoodieLogBlock {
// 3. Read the content
for (int i = 0; i < totalRecords; i++) {
int recordLength = dis.readInt();
- Decoder decoder = DecoderFactory.get()
- .binaryDecoder(getContent().get(), dis.getNumberOfBytesRead(),
recordLength, null);
+ BinaryDecoder decoder = DecoderFactory.get()
+ .binaryDecoder(getContent().get(), dis.getNumberOfBytesRead(),
recordLength, decoderCache.get());
+ decoderCache.set(decoder);
IndexedRecord record = reader.read(null, decoder);
records.add(record);
dis.skipBytes(recordLength);