You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2023/02/05 11:44:16 UTC
[iotdb] branch master updated: Accelerate Count TimeSeries (#8981)
This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c5f60c480e Accelerate Count TimeSeries (#8981)
c5f60c480e is described below
commit c5f60c480e641ca46a3b64b522a2554396ef5a4f
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Sun Feb 5 19:44:09 2023 +0800
Accelerate Count TimeSeries (#8981)
---
.../db/metadata/mtree/MTreeBelowSGCachedImpl.java | 65 +++++++++++++++++----
.../db/metadata/mtree/MTreeBelowSGMemoryImpl.java | 67 +++++++++++++++++-----
.../db/metadata/schemaregion/ISchemaRegion.java | 4 ++
.../schemaRegion/SchemaRegionTestUtil.java | 12 +++-
4 files changed, 123 insertions(+), 25 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
index 84581e2fcf..9dd277fc76 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
@@ -43,6 +43,7 @@ import org.apache.iotdb.db.metadata.mnode.InternalMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator;
import org.apache.iotdb.db.metadata.mtree.store.CachedMTreeStore;
+import org.apache.iotdb.db.metadata.mtree.traverser.Traverser;
import org.apache.iotdb.db.metadata.mtree.traverser.TraverserWithLimitOffsetWrapper;
import org.apache.iotdb.db.metadata.mtree.traverser.collector.EntityCollector;
import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector;
@@ -56,7 +57,6 @@ import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowNodesResult;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
@@ -1020,20 +1020,63 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) {
Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
tagAndAttributeProvider.apply(node.getOffset());
- return new ShowTimeSeriesResult(
- getPartialPathFromRootToNode(node).getFullPath(),
- node.getAlias(),
- (MeasurementSchema) node.getSchema(),
- tagAndAttribute.left,
- tagAndAttribute.right,
- getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
+ return new ITimeSeriesSchemaInfo() {
+
+ private Pair<Map<String, String>, Map<String, String>> tagAndAttribute = null;
+
+ @Override
+ public String getAlias() {
+ return node.getAlias();
+ }
+
+ @Override
+ public MeasurementSchema getSchema() {
+ return (MeasurementSchema) node.getSchema();
+ }
+
+ @Override
+ public Map<String, String> getTags() {
+ if (tagAndAttribute == null) {
+ tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset());
+ }
+ return tagAndAttribute.left;
+ }
+
+ @Override
+ public Map<String, String> getAttributes() {
+ if (tagAndAttribute == null) {
+ tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset());
+ }
+ return tagAndAttribute.right;
+ }
+
+ @Override
+ public boolean isUnderAlignedDevice() {
+ return getParentOfNextMatchedNode().getAsEntityMNode().isAligned();
+ }
+
+ @Override
+ public String getFullPath() {
+ return getPartialPathFromRootToNode(node).getFullPath();
+ }
+
+ @Override
+ public PartialPath getPartialPath() {
+ return getPartialPathFromRootToNode(node);
+ }
+ };
}
};
collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate());
- TraverserWithLimitOffsetWrapper<ITimeSeriesSchemaInfo> traverser =
- new TraverserWithLimitOffsetWrapper<>(
- collector, showTimeSeriesPlan.getLimit(), showTimeSeriesPlan.getOffset());
+ Traverser<ITimeSeriesSchemaInfo> traverser;
+ if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) {
+ traverser =
+ new TraverserWithLimitOffsetWrapper<>(
+ collector, showTimeSeriesPlan.getLimit(), showTimeSeriesPlan.getOffset());
+ } else {
+ traverser = collector;
+ }
return new ISchemaReader<ITimeSeriesSchemaInfo>() {
@Override
public boolean isSuccess() {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
index 81c3e446db..e17f76d52b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
@@ -43,6 +43,7 @@ import org.apache.iotdb.db.metadata.mnode.InternalMNode;
import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
import org.apache.iotdb.db.metadata.mnode.iterator.IMNodeIterator;
import org.apache.iotdb.db.metadata.mtree.store.MemMTreeStore;
+import org.apache.iotdb.db.metadata.mtree.traverser.Traverser;
import org.apache.iotdb.db.metadata.mtree.traverser.TraverserWithLimitOffsetWrapper;
import org.apache.iotdb.db.metadata.mtree.traverser.collector.EntityCollector;
import org.apache.iotdb.db.metadata.mtree.traverser.collector.MNodeCollector;
@@ -56,7 +57,6 @@ import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowNodesResult;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
@@ -908,21 +908,62 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
rootNode, showTimeSeriesPlan.getPath(), store, showTimeSeriesPlan.isPrefixMatch()) {
@Override
protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode node) {
- Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
- tagAndAttributeProvider.apply(node.getOffset());
- return new ShowTimeSeriesResult(
- getPartialPathFromRootToNode(node).getFullPath(),
- node.getAlias(),
- (MeasurementSchema) node.getSchema(),
- tagAndAttribute.left,
- tagAndAttribute.right,
- getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
+ return new ITimeSeriesSchemaInfo() {
+
+ private Pair<Map<String, String>, Map<String, String>> tagAndAttribute = null;
+
+ @Override
+ public String getAlias() {
+ return node.getAlias();
+ }
+
+ @Override
+ public MeasurementSchema getSchema() {
+ return (MeasurementSchema) node.getSchema();
+ }
+
+ @Override
+ public Map<String, String> getTags() {
+ if (tagAndAttribute == null) {
+ tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset());
+ }
+ return tagAndAttribute.left;
+ }
+
+ @Override
+ public Map<String, String> getAttributes() {
+ if (tagAndAttribute == null) {
+ tagAndAttribute = tagAndAttributeProvider.apply(node.getOffset());
+ }
+ return tagAndAttribute.right;
+ }
+
+ @Override
+ public boolean isUnderAlignedDevice() {
+ return getParentOfNextMatchedNode().getAsEntityMNode().isAligned();
+ }
+
+ @Override
+ public String getFullPath() {
+ return getPartialPathFromRootToNode(node).getFullPath();
+ }
+
+ @Override
+ public PartialPath getPartialPath() {
+ return getPartialPathFromRootToNode(node);
+ }
+ };
}
};
collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate());
- TraverserWithLimitOffsetWrapper<ITimeSeriesSchemaInfo> traverser =
- new TraverserWithLimitOffsetWrapper<>(
- collector, showTimeSeriesPlan.getLimit(), showTimeSeriesPlan.getOffset());
+ Traverser<ITimeSeriesSchemaInfo> traverser;
+ if (showTimeSeriesPlan.getLimit() > 0 || showTimeSeriesPlan.getOffset() > 0) {
+ traverser =
+ new TraverserWithLimitOffsetWrapper<>(
+ collector, showTimeSeriesPlan.getLimit(), showTimeSeriesPlan.getOffset());
+ } else {
+ traverser = collector;
+ }
return new ISchemaReader<ITimeSeriesSchemaInfo>() {
@Override
public boolean isSuccess() {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
index 446caf8ca5..91b6fff7be 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
@@ -258,6 +258,10 @@ public interface ISchemaRegion {
ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan showDevicesPlan)
throws MetadataException;
+ /**
+ * The iterated result shall be consumed before calling reader.hasNext() or reader.next(). Its
+ * implementation is based on the reader's process context.
+ */
ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(IShowTimeSeriesPlan showTimeSeriesPlan)
throws MetadataException;
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
index 75cc827e06..049bf90a8a 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionRead
import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
@@ -266,9 +267,18 @@ public class SchemaRegionTestUtil {
public static List<ITimeSeriesSchemaInfo> showTimeseries(
ISchemaRegion schemaRegion, IShowTimeSeriesPlan plan) {
List<ITimeSeriesSchemaInfo> result = new ArrayList<>();
+ ITimeSeriesSchemaInfo timeSeriesSchemaInfo;
try (ISchemaReader<ITimeSeriesSchemaInfo> reader = schemaRegion.getTimeSeriesReader(plan)) {
while (reader.hasNext()) {
- result.add(reader.next());
+ timeSeriesSchemaInfo = reader.next();
+ result.add(
+ new ShowTimeSeriesResult(
+ timeSeriesSchemaInfo.getFullPath(),
+ timeSeriesSchemaInfo.getAlias(),
+ timeSeriesSchemaInfo.getSchema(),
+ timeSeriesSchemaInfo.getTags(),
+ timeSeriesSchemaInfo.getAttributes(),
+ timeSeriesSchemaInfo.isUnderAlignedDevice()));
}
} catch (Exception e) {
throw new RuntimeException(e);