This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch write_preformance_wal in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ae2a4402f103455c13b5d2fd2acb2b9c0b898a48 Author: HTHou <[email protected]> AuthorDate: Thu Aug 18 22:13:02 2022 +0800 Avoid serializing schema in wal for better write performance of standalone --- .../db/mpp/plan/planner/plan/node/write/InsertNode.java | 17 ++++++++++++++--- .../iotdb/db/wal/recover/file/TsFilePlanRedoer.java | 6 +++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertNode.java index 884e693a12..927a759ad7 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertNode.java @@ -31,6 +31,7 @@ import org.apache.iotdb.db.wal.buffer.IWALByteBufferView; import org.apache.iotdb.db.wal.utils.WALWriteUtils; import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import java.io.DataInputStream; @@ -193,7 +194,13 @@ public abstract class InsertNode extends WritePlanNode { if (measurements[i] == null) { continue; } - WALWriteUtils.write(measurementSchemas[i], buffer); + + // serialize measurementId only for standalone version for better write performance + if (IoTDBDescriptor.getInstance().getConfig().isClusterMode()) { + WALWriteUtils.write(measurementSchemas[i], buffer); + } else { + WALWriteUtils.write(measurements[i], buffer); + } } } @@ -203,8 +210,12 @@ public abstract class InsertNode extends WritePlanNode { */ protected void deserializeMeasurementSchemas(DataInputStream stream) throws IOException { for (int i = 0; i < measurementSchemas.length; i++) { - measurementSchemas[i] = MeasurementSchema.deserializeFrom(stream); - measurements[i] = measurementSchemas[i].getMeasurementId(); + if (IoTDBDescriptor.getInstance().getConfig().isClusterMode()) { + measurementSchemas[i] = MeasurementSchema.deserializeFrom(stream); + measurements[i] = measurementSchemas[i].getMeasurementId(); + } else { + measurements[i] = ReadWriteIOUtils.readString(stream); + } } } diff --git a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java index a5840c61ba..d69798fdca 100644 --- a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java +++ b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java @@ -33,6 +33,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.metadata.idtable.IDTable; import org.apache.iotdb.db.metadata.idtable.entry.DeviceIDFactory; import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode; +import org.apache.iotdb.db.mpp.plan.analyze.SchemaValidator; import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode; @@ -138,7 +139,7 @@ public class TsFilePlanRedoer { } @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning - void redoInsert(InsertNode node) throws WriteProcessException, QueryProcessException { + void redoInsert(InsertNode node) throws WriteProcessException { if (!node.hasValidMeasurements()) { return; } @@ -165,6 +166,9 @@ public class TsFilePlanRedoer { // TODO get device id by idTable // idTable.getSeriesSchemas(node); } else { + if (!IoTDBDescriptor.getInstance().getConfig().isClusterMode()) { + SchemaValidator.validate(node); + } node.setDeviceID(DeviceIDFactory.getInstance().getDeviceID(node.getDevicePath())); }
