This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch optimize_single_device_tablet_v3 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a3d6b3525ed7e9a6da6650c8826eb7966a853a19 Author: HTHou <[email protected]> AuthorDate: Mon Mar 17 21:36:37 2025 +0800 Optimize single device tablet insert --- .../planner/plan/node/write/InsertTabletNode.java | 16 ++++++++-- .../node/write/RelationalInsertTabletNode.java | 35 ++++++++++++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java index 08557346c39..a963564516d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java @@ -455,7 +455,7 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { writeTimes(buffer); writeBitMaps(buffer); writeValues(buffer); - ReadWriteIOUtils.write((byte) (isAligned ? 1 : 0), buffer); + writeTabletAttribute(buffer); } void subSerialize(DataOutputStream stream) throws IOException { @@ -465,7 +465,7 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { writeTimes(stream); writeBitMaps(stream); writeValues(stream); - ReadWriteIOUtils.write((byte) (isAligned ? 1 : 0), stream); + writeTabletAttribute(stream); } /** Serialize measurements or measurement schemas, ignoring failed time series */ @@ -707,6 +707,14 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { } } + void writeTabletAttribute(ByteBuffer buffer) { + ReadWriteIOUtils.write((byte) (isAligned ? 1 : 0), buffer); + } + + void writeTabletAttribute(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write((byte) (isAligned ? 1 : 0), stream); + } + public static InsertTabletNode deserialize(ByteBuffer byteBuffer) { InsertTabletNode insertNode = new InsertTabletNode(new PlanNodeId("")); insertNode.subDeserialize(byteBuffer); @@ -753,6 +761,10 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { } columns = QueryDataSetUtils.readTabletValuesFromBuffer(buffer, dataTypes, measurementSize, rowCount); + readTabletAttribute(buffer); + } + + void readTabletAttribute(ByteBuffer buffer) { isAligned = buffer.get() == 1; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java index 70321743453..8a89a3a1d01 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java @@ -221,16 +221,10 @@ public class RelationalInsertTabletNode extends InsertTabletNode { return splitMap; } - public static RelationalInsertTabletNode deserialize(ByteBuffer byteBuffer) { - RelationalInsertTabletNode insertNode = new RelationalInsertTabletNode(new PlanNodeId("")); - insertNode.subDeserialize(byteBuffer); - insertNode.setPlanNodeId(PlanNodeId.deserialize(byteBuffer)); - return insertNode; - } - @Override protected void serializeAttributes(ByteBuffer byteBuffer) { - super.serializeAttributes(byteBuffer); + getType().serialize(byteBuffer); + subSerialize(byteBuffer); for (int i = 0; i < measurements.length; i++) { if (measurements[i] != null) { columnCategories[i].serialize(byteBuffer); @@ -240,7 +234,8 @@ public class RelationalInsertTabletNode extends InsertTabletNode { @Override protected void serializeAttributes(DataOutputStream stream) throws IOException { - super.serializeAttributes(stream); + getType().serialize(stream); + subSerialize(stream); for (int i = 0; i < measurements.length; i++) { if (measurements[i] != null) { columnCategories[i].serialize(stream); @@ -248,6 +243,23 @@ public class RelationalInsertTabletNode extends InsertTabletNode { } } + @Override + void writeTabletAttribute(ByteBuffer byteBuffer) { + ReadWriteIOUtils.write((byte) (singleDevice ? -1 : 0), byteBuffer); + } + + @Override + void writeTabletAttribute(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write((byte) (singleDevice ? -1 : 0), stream); + } + + public static RelationalInsertTabletNode deserialize(ByteBuffer byteBuffer) { + RelationalInsertTabletNode insertNode = new RelationalInsertTabletNode(new PlanNodeId("")); + insertNode.subDeserialize(byteBuffer); + insertNode.setPlanNodeId(PlanNodeId.deserialize(byteBuffer)); + return insertNode; + } + @Override public void subDeserialize(ByteBuffer buffer) { super.subDeserialize(buffer); @@ -258,6 +270,11 @@ public class RelationalInsertTabletNode extends InsertTabletNode { setColumnCategories(columnCategories); } + @Override + void readTabletAttribute(ByteBuffer buffer) { + singleDevice = buffer.get() == -1; + } + @Override void subSerialize(IWALByteBufferView buffer, List<int[]> rangeList) { super.subSerialize(buffer, rangeList);
