You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/11/04 09:38:06 UTC
[iotdb] branch new_vector updated: [IOTDB-1672] Separate
AlignedInsertPlan from current InsertPlan (#4318)
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch new_vector
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/new_vector by this push:
new 34c4241 [IOTDB-1672] Separate AlignedInsertPlan from current InsertPlan (#4318)
34c4241 is described below
commit 34c424105db8871a3ca0d6b9e05f5434a0558dde
Author: SilverNarcissus <15...@smail.nju.edu.cn>
AuthorDate: Thu Nov 4 17:37:38 2021 +0800
[IOTDB-1672] Separate AlignedInsertPlan from current InsertPlan (#4318)
---
.../iotdb/AlignedTimeseriesSessionExample.java | 55 +++++++---------------
.../iotdb/HybridTimeseriesSessionExample.java | 9 ++--
.../java/org/apache/iotdb/session/Session.java | 34 ++++++-------
.../org/apache/iotdb/session/pool/SessionPool.java | 20 ++++++++
.../session/IoTDBSessionVectorAggregationIT.java | 9 ++--
.../iotdb/session/IoTDBSessionVectorInsertIT.java | 9 ++--
.../apache/iotdb/tsfile/write/record/Tablet.java | 4 ++
7 files changed, 64 insertions(+), 76 deletions(-)
diff --git a/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java b/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
index c7a7fa7..e012edd 100644
--- a/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java
@@ -29,7 +29,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.write.record.Tablet;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
-import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
import java.security.SecureRandom;
import java.util.ArrayList;
@@ -266,11 +266,8 @@ public class AlignedTimeseriesSessionExample {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR1, schemaList);
tablet.setAligned(true);
@@ -280,13 +277,8 @@ public class AlignedTimeseriesSessionExample {
int rowIndex = tablet.rowSize++;
tablet.addTimestamp(rowIndex, timestamp);
tablet.addValue(
- schemaList.get(0).getSubMeasurementsList().get(0),
- rowIndex,
- new SecureRandom().nextLong());
- tablet.addValue(
- schemaList.get(0).getSubMeasurementsList().get(1),
- rowIndex,
- new SecureRandom().nextInt());
+ schemaList.get(0).getMeasurementId(), rowIndex, new SecureRandom().nextLong());
+ tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, new SecureRandom().nextInt());
if (tablet.rowSize == tablet.getMaxRowNumber()) {
session.insertTablet(tablet, true);
@@ -309,11 +301,8 @@ public class AlignedTimeseriesSessionExample {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector2",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR2, schemaList);
tablet.setAligned(true);
@@ -349,11 +338,8 @@ public class AlignedTimeseriesSessionExample {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector3",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR3, schemaList);
tablet.setAligned(true);
@@ -515,23 +501,16 @@ public class AlignedTimeseriesSessionExample {
throws IoTDBConnectionException, StatementExecutionException {
List<IMeasurementSchema> schemaList1 = new ArrayList<>();
- schemaList1.add(
- new VectorMeasurementSchema(
- "vector6",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT64}));
+ schemaList1.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList1.add(new UnaryMeasurementSchema("s2", TSDataType.INT64));
+
List<IMeasurementSchema> schemaList2 = new ArrayList<>();
- schemaList2.add(
- new VectorMeasurementSchema(
- "vector7",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT64}));
+ schemaList1.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList1.add(new UnaryMeasurementSchema("s2", TSDataType.INT64));
+
List<IMeasurementSchema> schemaList3 = new ArrayList<>();
- schemaList3.add(
- new VectorMeasurementSchema(
- "vector8",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT64}));
+ schemaList1.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList1.add(new UnaryMeasurementSchema("s2", TSDataType.INT64));
Tablet tablet1 = new Tablet(ROOT_SG2_D1_VECTOR6, schemaList1, 100);
Tablet tablet2 = new Tablet(ROOT_SG2_D1_VECTOR7, schemaList2, 100);
diff --git a/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java b/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
index 241e40e..7c13681 100644
--- a/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/HybridTimeseriesSessionExample.java
@@ -25,7 +25,7 @@ import org.apache.iotdb.session.SessionDataSet;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.write.record.Tablet;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
-import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
import java.util.ArrayList;
import java.util.List;
@@ -73,11 +73,8 @@ public class HybridTimeseriesSessionExample {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR1, schemaList);
tablet.setAligned(true);
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index e7ac62c..12244ed 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -1437,6 +1437,7 @@ public class Session {
*/
public void insertAlignedTablet(Tablet tablet)
throws StatementExecutionException, IoTDBConnectionException {
+ tablet.setAligned(true);
insertTablet(tablet);
}
@@ -1448,6 +1449,7 @@ public class Session {
*/
public void insertAlignedTablet(Tablet tablet, boolean sorted)
throws IoTDBConnectionException, StatementExecutionException {
+ tablet.setAligned(true);
insertTablet(tablet, sorted);
}
@@ -1461,27 +1463,13 @@ public class Session {
TSInsertTabletReq request = new TSInsertTabletReq();
- if (tablet.isAligned()) {
- if (tablet.getSchemas().size() > 1) {
- throw new BatchExecutionException("One tablet should only contain one aligned timeseries!");
- }
- request.setIsAligned(true);
- IMeasurementSchema measurementSchema = tablet.getSchemas().get(0);
- request.setPrefixPath(tablet.prefixPath);
- int measurementsSize = measurementSchema.getSubMeasurementsList().size();
- for (int i = 0; i < measurementsSize; i++) {
- request.addToMeasurements(measurementSchema.getSubMeasurementsList().get(i));
- request.addToTypes(measurementSchema.getSubMeasurementsTSDataTypeList().get(i).ordinal());
- }
- request.setIsAligned(true);
- } else {
- for (IMeasurementSchema measurementSchema : tablet.getSchemas()) {
- request.setPrefixPath(tablet.prefixPath);
- request.addToMeasurements(measurementSchema.getMeasurementId());
- request.addToTypes(measurementSchema.getType().ordinal());
- request.setIsAligned(tablet.isAligned());
- }
+ for (IMeasurementSchema measurementSchema : tablet.getSchemas()) {
+ request.addToMeasurements(measurementSchema.getMeasurementId());
+ request.addToTypes(measurementSchema.getType().ordinal());
}
+
+ request.setPrefixPath(tablet.prefixPath);
+ request.setIsAligned(tablet.isAligned());
request.setTimestamps(SessionUtils.getTimeBuffer(tablet));
request.setValues(SessionUtils.getValueBuffer(tablet));
request.setSize(tablet.rowSize);
@@ -1532,6 +1520,9 @@ public class Session {
*/
public void insertAlignedTablets(Map<String, Tablet> tablets)
throws IoTDBConnectionException, StatementExecutionException {
+ for (Tablet tablet : tablets.values()) {
+ tablet.setAligned(true);
+ }
insertTablets(tablets, false);
}
@@ -1544,6 +1535,9 @@ public class Session {
*/
public void insertAlignedTablets(Map<String, Tablet> tablets, boolean sorted)
throws IoTDBConnectionException, StatementExecutionException {
+ for (Tablet tablet : tablets.values()) {
+ tablet.setAligned(true);
+ }
insertTablets(tablets, sorted);
}
diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
index c327ed8..0f4bc4f 100644
--- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
+++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
@@ -461,10 +461,24 @@ public class SessionPool {
* <p>Users need to control the count of Tablet and write a batch when it reaches the maxBatchSize
*
* @param tablet a tablet data of one device
+ */
+ public void insertAlignedTablet(Tablet tablet)
+ throws IoTDBConnectionException, StatementExecutionException {
+ tablet.setAligned(true);
+ insertTablet(tablet, false);
+ }
+
+ /**
+ * insert the data of a device. For each timestamp, the number of measurements is the same.
+ *
+ * <p>Users need to control the count of Tablet and write a batch when it reaches the maxBatchSize
+ *
+ * @param tablet a tablet data of one device
* @param sorted whether times in Tablet are in ascending order
*/
public void insertAlignedTablet(Tablet tablet, boolean sorted)
throws IoTDBConnectionException, StatementExecutionException {
+ tablet.setAligned(true);
insertTablet(tablet, sorted);
}
@@ -485,6 +499,9 @@ public class SessionPool {
*/
public void insertAlignedTablets(Map<String, Tablet> tablets)
throws IoTDBConnectionException, StatementExecutionException {
+ for (Tablet tablet : tablets.values()) {
+ tablet.setAligned(true);
+ }
insertTablets(tablets, false);
}
@@ -519,6 +536,9 @@ public class SessionPool {
*/
public void insertAlignedTablets(Map<String, Tablet> tablets, boolean sorted)
throws IoTDBConnectionException, StatementExecutionException {
+ for (Tablet tablet : tablets.values()) {
+ tablet.setAligned(true);
+ }
insertTablets(tablets, sorted);
}
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java
index 8c3624d..c2e62f4 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorAggregationIT.java
@@ -28,7 +28,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.write.record.Tablet;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
-import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -217,11 +217,8 @@ public class IoTDBSessionVectorAggregationIT {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector1",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR1, schemaList);
tablet.setAligned(true);
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
index de35457..b4d1f46 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
@@ -28,7 +28,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.write.record.Tablet;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
-import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
import org.junit.After;
import org.junit.Before;
@@ -265,11 +265,8 @@ public class IoTDBSessionVectorInsertIT {
// The schema of measurements of one device
// only measurementId and data type in MeasurementSchema take effects in Tablet
List<IMeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(
- new VectorMeasurementSchema(
- "vector",
- new String[] {"s1", "s2"},
- new TSDataType[] {TSDataType.INT64, TSDataType.INT32}));
+ schemaList.add(new UnaryMeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new UnaryMeasurementSchema("s2", TSDataType.INT32));
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR1, schemaList);
tablet.setAligned(true);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
index 0442101..0a621ee 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java
@@ -116,6 +116,10 @@ public class Tablet {
this.prefixPath = prefixPath;
}
+ public void setSchemas(List<IMeasurementSchema> schemas) {
+ this.schemas = schemas;
+ }
+
public void addTimestamp(int rowIndex, long timestamp) {
timestamps[rowIndex] = timestamp;
}