Skip to content

Commit f2e20b5

Browse files
shuwenweijt2594838
andauthored
Modify tablet usage & don't cache TableSchema map in default option (#14635)
* modify tablet usage * update tsfile version * fix it * fix compile * update tsfile version --------- Co-authored-by: Jiang Tian <jt2594838@163.com>
1 parent 97a08c8 commit f2e20b5

File tree

50 files changed

+371
-668
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+371
-668
lines changed

example/session/src/main/java/org/apache/iotdb/AlignedTimeseriesSessionExample.java

Lines changed: 5 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.apache.tsfile.enums.TSDataType;
3131
import org.apache.tsfile.file.metadata.enums.CompressionType;
3232
import org.apache.tsfile.file.metadata.enums.TSEncoding;
33-
import org.apache.tsfile.utils.BitMap;
3433
import org.apache.tsfile.write.record.Tablet;
3534
import org.apache.tsfile.write.schema.IMeasurementSchema;
3635
import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -341,18 +340,14 @@ private static void insertTabletWithAlignedTimeseriesMethod2()
341340
schemaList.add(new MeasurementSchema("s2", TSDataType.INT32));
342341

343342
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR2, schemaList);
344-
long[] timestamps = tablet.timestamps;
345-
Object[] values = tablet.values;
346343

347344
for (long time = 100; time < 200; time++) {
348345
int row = tablet.getRowSize();
349346
tablet.addTimestamp(row, time);
350347

351-
long[] sensor1 = (long[]) values[0];
352-
sensor1[row] = new SecureRandom().nextLong();
348+
tablet.addValue(row, 0, new SecureRandom().nextLong());
353349

354-
int[] sensor2 = (int[]) values[1];
355-
sensor2[row] = new SecureRandom().nextInt();
350+
tablet.addValue(row, 1, new SecureRandom().nextInt());
356351

357352
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
358353
session.insertAlignedTablet(tablet, true);
@@ -378,32 +373,19 @@ private static void insertNullableTabletWithAlignedTimeseries()
378373

379374
Tablet tablet = new Tablet(ROOT_SG1_D1_VECTOR3, schemaList);
380375

381-
long[] timestamps = tablet.timestamps;
382-
Object[] values = tablet.values;
383-
// Use the bitMap to mark the null value point
384-
BitMap[] bitMaps = new BitMap[values.length];
385-
tablet.bitMaps = bitMaps;
386-
387-
bitMaps[1] = new BitMap(tablet.getMaxRowNumber());
388376
for (long time = 200; time < 300; time++) {
389377
int row = tablet.getRowSize();
390378
tablet.addTimestamp(row, time);
391379

392-
long[] sensor1 = (long[]) values[0];
393-
sensor1[row] = new SecureRandom().nextLong();
394-
395-
int[] sensor2 = (int[]) values[1];
396-
sensor2[row] = new SecureRandom().nextInt();
380+
tablet.addValue(row, 0, new SecureRandom().nextLong());
397381

398-
// mark this point as null value
399-
if (time % 5 == 0) {
400-
bitMaps[1].mark(row);
382+
if (time % 5 != 0) {
383+
tablet.addValue(row, 1, new SecureRandom().nextInt());
401384
}
402385

403386
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
404387
session.insertAlignedTablet(tablet, true);
405388
tablet.reset();
406-
bitMaps[1].reset();
407389
}
408390
}
409391

@@ -595,44 +577,5 @@ private static void insertTabletsWithAlignedTimeseries()
595577
tablet2.reset();
596578
tablet3.reset();
597579
}
598-
599-
// Method 2 to add tablet data
600-
long[] timestamps1 = tablet1.timestamps;
601-
Object[] values1 = tablet1.values;
602-
long[] timestamps2 = tablet2.timestamps;
603-
Object[] values2 = tablet2.values;
604-
long[] timestamps3 = tablet3.timestamps;
605-
Object[] values3 = tablet3.values;
606-
607-
for (long time = 0; time < 100; time++) {
608-
int row1 = tablet1.getRowSize();
609-
int row2 = tablet2.getRowSize();
610-
int row3 = tablet3.getRowSize();
611-
tablet1.addTimestamp(row1, time);
612-
tablet2.addTimestamp(row2, time);
613-
tablet3.addTimestamp(row3, time);
614-
for (int i = 0; i < 2; i++) {
615-
long[] sensor1 = (long[]) values1[i];
616-
sensor1[row1] = i;
617-
long[] sensor2 = (long[]) values2[i];
618-
sensor2[row2] = i;
619-
long[] sensor3 = (long[]) values3[i];
620-
sensor3[row3] = i;
621-
}
622-
if (tablet1.getRowSize() == tablet1.getMaxRowNumber()) {
623-
session.insertAlignedTablets(tabletMap, true);
624-
625-
tablet1.reset();
626-
tablet2.reset();
627-
tablet3.reset();
628-
}
629-
}
630-
631-
if (tablet1.getRowSize() != 0) {
632-
session.insertAlignedTablets(tabletMap, true);
633-
tablet1.reset();
634-
tablet2.reset();
635-
tablet3.reset();
636-
}
637580
}
638581
}

example/session/src/main/java/org/apache/iotdb/SessionConcurrentExample.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ private static void insertTablet(Session session, String deviceId)
151151

152152
Tablet tablet = new Tablet(deviceId, schemaList, 100);
153153

154-
// Method 1 to add tablet data
155154
long timestamp = System.currentTimeMillis();
156155
for (long row = 0; row < 100; row++) {
157156
int rowIndex = tablet.getRowSize();
@@ -171,27 +170,5 @@ private static void insertTablet(Session session, String deviceId)
171170
session.insertTablet(tablet);
172171
tablet.reset();
173172
}
174-
175-
// Method 2 to add tablet data
176-
long[] timestamps = tablet.timestamps;
177-
Object[] values = tablet.values;
178-
179-
for (long time = 0; time < 100; time++) {
180-
int row = tablet.getRowSize();
181-
tablet.addTimestamp(row, time);
182-
for (int i = 0; i < 3; i++) {
183-
long[] sensor = (long[]) values[i];
184-
sensor[row] = i;
185-
}
186-
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
187-
session.insertTablet(tablet, true);
188-
tablet.reset();
189-
}
190-
}
191-
192-
if (tablet.getRowSize() != 0) {
193-
session.insertTablet(tablet);
194-
tablet.reset();
195-
}
196173
}
197174
}

example/session/src/main/java/org/apache/iotdb/SessionExample.java

Lines changed: 2 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.apache.tsfile.file.metadata.enums.CompressionType;
3636
import org.apache.tsfile.file.metadata.enums.TSEncoding;
3737
import org.apache.tsfile.utils.Binary;
38-
import org.apache.tsfile.utils.BitMap;
3938
import org.apache.tsfile.write.record.Tablet;
4039
import org.apache.tsfile.write.schema.IMeasurementSchema;
4140
import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -401,7 +400,6 @@ private static void insertTablet() throws IoTDBConnectionException, StatementExe
401400

402401
Tablet tablet = new Tablet(ROOT_SG1_D1, schemaList, 100);
403402

404-
// Method 1 to add tablet data
405403
long timestamp = System.currentTimeMillis();
406404

407405
for (long row = 0; row < 100; row++) {
@@ -422,28 +420,6 @@ private static void insertTablet() throws IoTDBConnectionException, StatementExe
422420
session.insertTablet(tablet);
423421
tablet.reset();
424422
}
425-
426-
// Method 2 to add tablet data
427-
long[] timestamps = tablet.timestamps;
428-
Object[] values = tablet.values;
429-
430-
for (long time = 0; time < 100; time++) {
431-
int row = tablet.getRowSize();
432-
tablet.addTimestamp(row, time);
433-
for (int i = 0; i < 3; i++) {
434-
long[] sensor = (long[]) values[i];
435-
sensor[row] = i;
436-
}
437-
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
438-
session.insertTablet(tablet, true);
439-
tablet.reset();
440-
}
441-
}
442-
443-
if (tablet.getRowSize() != 0) {
444-
session.insertTablet(tablet);
445-
tablet.reset();
446-
}
447423
}
448424

449425
private static void insertTabletWithNullValues()
@@ -465,11 +441,7 @@ private static void insertTabletWithNullValues()
465441

466442
Tablet tablet = new Tablet(ROOT_SG1_D1, schemaList, 100);
467443

468-
// Method 1 to add tablet data
469444
insertTablet1(schemaList, tablet);
470-
471-
// Method 2 to add tablet data
472-
insertTablet2(schemaList, tablet);
473445
}
474446

475447
private static void insertTablet1(List<IMeasurementSchema> schemaList, Tablet tablet)
@@ -482,11 +454,9 @@ private static void insertTablet1(List<IMeasurementSchema> schemaList, Tablet ta
482454
tablet.addTimestamp(rowIndex, timestamp);
483455
for (int s = 0; s < 3; s++) {
484456
long value = random.nextLong();
485-
// mark null value
486-
if (row % 3 == s) {
487-
tablet.bitMaps[s].mark((int) row);
457+
if (row % 3 != s) {
458+
tablet.addValue(schemaList.get(s).getMeasurementName(), rowIndex, value);
488459
}
489-
tablet.addValue(schemaList.get(s).getMeasurementName(), rowIndex, value);
490460
}
491461
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
492462
session.insertTablet(tablet, true);
@@ -501,39 +471,6 @@ private static void insertTablet1(List<IMeasurementSchema> schemaList, Tablet ta
501471
}
502472
}
503473

504-
private static void insertTablet2(List<IMeasurementSchema> schemaList, Tablet tablet)
505-
throws IoTDBConnectionException, StatementExecutionException {
506-
long[] timestamps = tablet.timestamps;
507-
Object[] values = tablet.values;
508-
BitMap[] bitMaps = new BitMap[schemaList.size()];
509-
for (int s = 0; s < 3; s++) {
510-
bitMaps[s] = new BitMap(tablet.getMaxRowNumber());
511-
}
512-
tablet.bitMaps = bitMaps;
513-
514-
for (long time = 0; time < 100; time++) {
515-
int row = tablet.getRowSize();
516-
tablet.addTimestamp(row, time);
517-
for (int i = 0; i < 3; i++) {
518-
long[] sensor = (long[]) values[i];
519-
// mark null value
520-
if (row % 3 == i) {
521-
bitMaps[i].mark(row);
522-
}
523-
sensor[row] = i;
524-
}
525-
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
526-
session.insertTablet(tablet, true);
527-
tablet.reset();
528-
}
529-
}
530-
531-
if (tablet.getRowSize() != 0) {
532-
session.insertTablet(tablet);
533-
tablet.reset();
534-
}
535-
}
536-
537474
private static void insertTablets() throws IoTDBConnectionException, StatementExecutionException {
538475
// The schema of measurements of one device
539476
// only measurementId and data type in MeasurementSchema take effects in Tablet
@@ -551,7 +488,6 @@ private static void insertTablets() throws IoTDBConnectionException, StatementEx
551488
tabletMap.put("root.sg1.d2", tablet2);
552489
tabletMap.put("root.sg1.d3", tablet3);
553490

554-
// Method 1 to add tablet data
555491
long timestamp = System.currentTimeMillis();
556492
for (long row = 0; row < 100; row++) {
557493
int row1 = tablet1.getRowSize();
@@ -581,45 +517,6 @@ private static void insertTablets() throws IoTDBConnectionException, StatementEx
581517
tablet2.reset();
582518
tablet3.reset();
583519
}
584-
585-
// Method 2 to add tablet data
586-
long[] timestamps1 = tablet1.timestamps;
587-
Object[] values1 = tablet1.values;
588-
long[] timestamps2 = tablet2.timestamps;
589-
Object[] values2 = tablet2.values;
590-
long[] timestamps3 = tablet3.timestamps;
591-
Object[] values3 = tablet3.values;
592-
593-
for (long time = 0; time < 100; time++) {
594-
int row1 = tablet1.getRowSize();
595-
int row2 = tablet2.getRowSize();
596-
int row3 = tablet3.getRowSize();
597-
timestamps1[row1] = time;
598-
timestamps2[row2] = time;
599-
timestamps3[row3] = time;
600-
for (int i = 0; i < 3; i++) {
601-
long[] sensor1 = (long[]) values1[i];
602-
sensor1[row1] = i;
603-
long[] sensor2 = (long[]) values2[i];
604-
sensor2[row2] = i;
605-
long[] sensor3 = (long[]) values3[i];
606-
sensor3[row3] = i;
607-
}
608-
if (tablet1.getRowSize() == tablet1.getMaxRowNumber()) {
609-
session.insertTablets(tabletMap, true);
610-
611-
tablet1.reset();
612-
tablet2.reset();
613-
tablet3.reset();
614-
}
615-
}
616-
617-
if (tablet1.getRowSize() != 0) {
618-
session.insertTablets(tabletMap, true);
619-
tablet1.reset();
620-
tablet2.reset();
621-
tablet3.reset();
622-
}
623520
}
624521

625522
/**

example/trigger/src/main/java/org/apache/iotdb/trigger/LoggerTrigger.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ public boolean fire(Tablet tablet) throws Exception {
3939
List<IMeasurementSchema> measurementSchemaList = tablet.getSchemas();
4040
for (int i = 0, n = measurementSchemaList.size(); i < n; i++) {
4141
if (measurementSchemaList.get(i).getType().equals(TSDataType.DOUBLE)) {
42-
logDouble((double[]) tablet.values[i]);
42+
logDouble((double[]) tablet.getValues()[i]);
4343
} else if (measurementSchemaList.get(i).getType().equals(TSDataType.FLOAT)) {
44-
logFloat((float[]) tablet.values[i]);
44+
logFloat((float[]) tablet.getValues()[i]);
4545
} else if (measurementSchemaList.get(i).getType().equals(TSDataType.INT64)) {
46-
logLong((long[]) tablet.values[i]);
46+
logLong((long[]) tablet.getValues()[i]);
4747
} else if (measurementSchemaList.get(i).getType().equals(TSDataType.INT32)) {
48-
logInt((int[]) tablet.values[i]);
48+
logInt((int[]) tablet.getValues()[i]);
4949
} else if (measurementSchemaList.get(i).getType().equals(TSDataType.TEXT)) {
50-
logText((Binary[]) tablet.values[i]);
50+
logText((Binary[]) tablet.getValues()[i]);
5151
} else if (measurementSchemaList.get(i).getType().equals(TSDataType.BOOLEAN)) {
52-
logBoolean((boolean[]) tablet.values[i]);
52+
logBoolean((boolean[]) tablet.getValues()[i]);
5353
}
5454
}
5555
return true;

example/trigger/src/main/java/org/apache/iotdb/trigger/StatisticsUpdaterTrigger.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ public void onCreate(TriggerAttributes attributes) throws Exception {
8181
@Override
8282
public boolean fire(Tablet tablet) throws Exception {
8383
ensureSession();
84-
if (tablet.bitMaps == null) {
84+
if (tablet.getBitMaps() == null) {
8585
cnt.addAndGet((long) tablet.getRowSize() * tablet.getSchemas().size());
8686
return true;
8787
}
8888
for (int column = 0; column < tablet.getSchemas().size(); column++) {
89-
BitMap bitMap = tablet.bitMaps[column];
89+
BitMap bitMap = tablet.getBitMaps()[column];
9090
if (bitMap == null) {
9191
cnt.addAndGet(tablet.getRowSize());
9292
} else {

0 commit comments

Comments
 (0)