This is an automated email from the ASF dual-hosted git repository.
sunzesong pushed a commit to branch vector_refactor
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/vector_refactor by this push:
new 2bf5fc8 [IOTDB-1406] Refactor VectorMeasurementSchema
2bf5fc8 is described below
commit 2bf5fc87b3802a25011168f1d8cd562eb85fa268
Author: samperson1997 <[email protected]>
AuthorDate: Mon May 31 10:45:22 2021 +0800
[IOTDB-1406] Refactor VectorMeasurementSchema
---
.../iotdb/db/metadata/MManagerBasicTest.java | 1 +
.../write/schema/VectorMeasurementSchema.java | 90 +++++++++++-----------
2 files changed, 46 insertions(+), 45 deletions(-)
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index cb8960a..8570947 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -938,6 +938,7 @@ public class MManagerBasicTest {
@Test
public void testTemplateCompatibility() throws MetadataException {
+ // FIXME Add name for vector in template
List<List<String>> measurementList = new ArrayList<>();
measurementList.add(Collections.singletonList("s11"));
List<String> measurements = new ArrayList<>();
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
index e6abdc6..345c909 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
@@ -35,6 +35,7 @@ import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -42,11 +43,8 @@ import java.util.Objects;
public class VectorMeasurementSchema
implements IMeasurementSchema, Comparable<VectorMeasurementSchema>,
Serializable {
- public static final String VECTOR_NAME_PREFIX = "$#$";
-
- // this is equal to the time id in this vector
private String vectorMeausurementId;
- private String[] measurements;
+ private Map<String, Integer> measurementsToIndexMap;
private byte[] types;
private byte[] encodings;
private TSEncodingBuilder[] encodingConverters;
@@ -61,7 +59,10 @@ public class VectorMeasurementSchema
TSEncoding[] encodings,
CompressionType compressionType) {
this.vectorMeausurementId = measurementId;
- this.measurements = measurements;
+ this.measurementsToIndexMap = new HashMap<>();
+ for (int i = 0; i < measurements.length; i++) {
+ measurementsToIndexMap.put(measurements[i], i);
+ }
byte[] typesInByte = new byte[types.length];
for (int i = 0; i < types.length; i++) {
typesInByte[i] = types[i].serialize();
@@ -77,17 +78,11 @@ public class VectorMeasurementSchema
this.compressor = compressionType.serialize();
}
- public VectorMeasurementSchema(
- String[] measurements, byte[] types, byte[] encodings, byte compressor) {
- this.measurements = measurements;
- this.types = types;
- this.encodings = encodings;
- this.encodingConverters = new TSEncodingBuilder[measurements.length];
- this.compressor = compressor;
- }
-
public VectorMeasurementSchema(String[] measurements, TSDataType[] types) {
- this.measurements = measurements;
+ this.measurementsToIndexMap = new HashMap<>();
+ for (int i = 0; i < measurements.length; i++) {
+ measurementsToIndexMap.put(measurements[i], i);
+ }
this.types = new byte[types.length];
for (int i = 0; i < types.length; i++) {
this.types[i] = types[i].serialize();
@@ -164,6 +159,10 @@ public class VectorMeasurementSchema
@Override
public List<String> getValueMeasurementIdList() {
+ String[] measurements = new String[measurementsToIndexMap.size()];
+ for (Map.Entry<String, Integer> entry : measurementsToIndexMap.entrySet())
{
+ measurements[entry.getValue()] = entry.getKey();
+ }
return Arrays.asList(measurements);
}
@@ -203,18 +202,18 @@ public class VectorMeasurementSchema
@Override
public int getMeasurementIdColumnIndex(String measurementId) {
- return getValueMeasurementIdList().indexOf(measurementId);
+ return measurementsToIndexMap.get(measurementId);
}
@Override
public int serializeTo(ByteBuffer buffer) {
int byteLen = 0;
- byteLen +=
-
ReadWriteIOUtils.write(vectorMeausurementId.substring(VECTOR_NAME_PREFIX.length()),
buffer);
- byteLen += ReadWriteIOUtils.write(measurements.length, buffer);
+ byteLen += ReadWriteIOUtils.write(vectorMeausurementId, buffer);
+ byteLen += ReadWriteIOUtils.write(measurementsToIndexMap.size(), buffer);
- for (String measurementId : measurements) {
- byteLen += ReadWriteIOUtils.write(measurementId, buffer);
+ for (Map.Entry<String, Integer> entry : measurementsToIndexMap.entrySet())
{
+ byteLen += ReadWriteIOUtils.write(entry.getKey(), buffer);
+ byteLen += ReadWriteIOUtils.write(entry.getValue(), buffer);
}
for (byte type : types) {
byteLen += ReadWriteIOUtils.write(type, buffer);
@@ -230,13 +229,12 @@ public class VectorMeasurementSchema
@Override
public int serializeTo(OutputStream outputStream) throws IOException {
int byteLen = 0;
- byteLen +=
- ReadWriteIOUtils.write(
- vectorMeausurementId.substring(VECTOR_NAME_PREFIX.length()),
outputStream);
- byteLen += ReadWriteIOUtils.write(measurements.length, outputStream);
+ byteLen += ReadWriteIOUtils.write(vectorMeausurementId, outputStream);
+ byteLen += ReadWriteIOUtils.write(measurementsToIndexMap.size(),
outputStream);
- for (String measurementId : measurements) {
- byteLen += ReadWriteIOUtils.write(measurementId, outputStream);
+ for (Map.Entry<String, Integer> entry : measurementsToIndexMap.entrySet())
{
+ byteLen += ReadWriteIOUtils.write(entry.getKey(), outputStream);
+ byteLen += ReadWriteIOUtils.write(entry.getValue(), outputStream);
}
for (byte type : types) {
byteLen += ReadWriteIOUtils.write(type, outputStream);
@@ -268,15 +266,15 @@ public class VectorMeasurementSchema
public static VectorMeasurementSchema deserializeFrom(InputStream
inputStream)
throws IOException {
VectorMeasurementSchema vectorMeasurementSchema = new
VectorMeasurementSchema();
- vectorMeasurementSchema.vectorMeausurementId =
- VECTOR_NAME_PREFIX + ReadWriteIOUtils.readString(inputStream);
+ vectorMeasurementSchema.vectorMeausurementId =
ReadWriteIOUtils.readString(inputStream);
int measurementSize = ReadWriteIOUtils.readInt(inputStream);
- String[] measurements = new String[measurementSize];
+ Map<String, Integer> measurementsToIndexMap = new HashMap<>();
for (int i = 0; i < measurementSize; i++) {
- measurements[i] = ReadWriteIOUtils.readString(inputStream);
+ measurementsToIndexMap.put(
+ ReadWriteIOUtils.readString(inputStream),
ReadWriteIOUtils.readInt(inputStream));
}
- vectorMeasurementSchema.measurements = measurements;
+ vectorMeasurementSchema.measurementsToIndexMap = measurementsToIndexMap;
byte[] types = new byte[measurementSize];
for (int i = 0; i < measurementSize; i++) {
@@ -296,14 +294,14 @@ public class VectorMeasurementSchema
public static VectorMeasurementSchema deserializeFrom(ByteBuffer buffer) {
VectorMeasurementSchema vectorMeasurementSchema = new
VectorMeasurementSchema();
- vectorMeasurementSchema.vectorMeausurementId =
- VECTOR_NAME_PREFIX + ReadWriteIOUtils.readString(buffer);
+ vectorMeasurementSchema.vectorMeausurementId =
ReadWriteIOUtils.readString(buffer);
int measurementSize = ReadWriteIOUtils.readInt(buffer);
- String[] measurements = new String[measurementSize];
+ Map<String, Integer> measurementsToIndexMap = new HashMap<>();
for (int i = 0; i < measurementSize; i++) {
- measurements[i] = ReadWriteIOUtils.readString(buffer);
+ measurementsToIndexMap.put(
+ ReadWriteIOUtils.readString(buffer),
ReadWriteIOUtils.readInt(buffer));
}
- vectorMeasurementSchema.measurements = measurements;
+ vectorMeasurementSchema.measurementsToIndexMap = measurementsToIndexMap;
byte[] types = new byte[measurementSize];
for (int i = 0; i < measurementSize; i++) {
@@ -332,36 +330,38 @@ public class VectorMeasurementSchema
VectorMeasurementSchema that = (VectorMeasurementSchema) o;
return Arrays.equals(types, that.types)
&& Arrays.equals(encodings, that.encodings)
- && Arrays.equals(measurements, that.measurements)
+ && Objects.equals(vectorMeausurementId, that.vectorMeausurementId)
&& Objects.equals(compressor, that.compressor);
}
@Override
public int hashCode() {
- return Objects.hash(types, encodings, measurements, compressor);
+ return Objects.hash(vectorMeausurementId, types, encodings, compressor);
}
- /** compare by first measurementID. */
+ /** compare by vector name */
@Override
public int compareTo(VectorMeasurementSchema o) {
if (equals(o)) {
return 0;
} else {
- return this.measurements[0].compareTo(o.measurements[0]);
+ return this.vectorMeausurementId.compareTo(o.vectorMeausurementId);
}
}
@Override
public String toString() {
StringContainer sc = new StringContainer("");
- for (int i = 0; i < measurements.length; i++) {
+ sc.addTail(vectorMeausurementId);
+ // string is not in real order
+ for (Map.Entry<String, Integer> entry : measurementsToIndexMap.entrySet())
{
sc.addTail(
"[",
- measurements[i],
+ entry.getKey(),
",",
- TSDataType.deserialize(types[i]).toString(),
+ TSDataType.deserialize(types[entry.getValue()]).toString(),
",",
- TSEncoding.deserialize(encodings[i]).toString());
+ TSEncoding.deserialize(encodings[entry.getValue()]).toString());
sc.addTail("],");
}
sc.addTail(CompressionType.deserialize(compressor).toString());