This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch aligned_mem_cal in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2acdf54b4f348d389a500b017c68612dcce61b21 Author: HTHou <[email protected]> AuthorDate: Thu May 11 15:53:54 2023 +0800 init --- .../engine/memtable/AlignedWritableMemChunk.java | 5 ++-- .../db/engine/storagegroup/TsFileProcessor.java | 10 ++++---- .../db/metadata/cache/TimeSeriesSchemaCache.java | 2 +- .../metadata/cache/dualkeycache/IDualKeyCache.java | 2 ++ .../cache/dualkeycache/impl/DualKeyCacheImpl.java | 28 ++++++++++++++++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java index dabd3b472d..d947b6a034 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java @@ -41,7 +41,6 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -60,7 +59,7 @@ public class AlignedWritableMemChunk implements IWritableMemChunk { private static final Logger LOGGER = LoggerFactory.getLogger(AlignedWritableMemChunk.class); public AlignedWritableMemChunk(List<IMeasurementSchema> schemaList) { - this.measurementIndexMap = new LinkedHashMap<>(); + this.measurementIndexMap = new HashMap<>(); List<TSDataType> dataTypeList = new ArrayList<>(); this.schemaList = schemaList; for (int i = 0; i < schemaList.size(); i++) { @@ -71,7 +70,7 @@ public class AlignedWritableMemChunk implements IWritableMemChunk { } private AlignedWritableMemChunk(List<IMeasurementSchema> schemaList, AlignedTVList list) { - this.measurementIndexMap = new LinkedHashMap<>(); + this.measurementIndexMap = new HashMap<>(); this.schemaList = schemaList; for (int i = 0; i < schemaList.size(); i++) { measurementIndexMap.put(schemaList.get(i).getMeasurementId(), i); diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java index 107107fca9..21634f782d 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java @@ -487,11 +487,11 @@ public class TsFileProcessor { continue; } // extending the column of aligned mem chunk - // if (!alignedMemChunk.containsMeasurement(measurements[i])) { - // memTableIncrement += - // (alignedMemChunk.alignedListSize() / PrimitiveArrayManager.ARRAY_SIZE + 1) - // * dataTypes[i].getDataTypeSize(); - // } + if (!alignedMemChunk.containsMeasurement(measurements[i])) { + memTableIncrement += + (alignedMemChunk.alignedListSize() / PrimitiveArrayManager.ARRAY_SIZE + 1) + * dataTypes[i].getDataTypeSize(); + } // TEXT data mem size if (dataTypes[i] == TSDataType.TEXT && values[i] != null) { textDataIncrement += MemUtils.getBinarySize((Binary) values[i]); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/TimeSeriesSchemaCache.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/TimeSeriesSchemaCache.java index 755c30bd9a..5f1579f398 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/TimeSeriesSchemaCache.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/TimeSeriesSchemaCache.java @@ -215,7 +215,7 @@ public class TimeSeriesSchemaCache { Long latestFlushedTime) { SchemaCacheEntry entry; List<Integer> missingMeasurements = new ArrayList<>(); - dualKeyCache.compute( + dualKeyCache.computeLast( new IDualKeyCacheComputation<PartialPath, String, SchemaCacheEntry>() { @Override public PartialPath getFirstKey() { diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/IDualKeyCache.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/IDualKeyCache.java index cb11dd6cb2..236aacd8e9 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/IDualKeyCache.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/IDualKeyCache.java @@ -40,6 +40,8 @@ public interface IDualKeyCache<FK, SK, V> { */ void compute(IDualKeyCacheComputation<FK, SK, V> computation); + void computeLast(IDualKeyCacheComputation<FK, SK, V> computation); + /** put the cache value into cache */ void put(FK firstKey, SK secondKey, V value); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/impl/DualKeyCacheImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/impl/DualKeyCacheImpl.java index 270f3ec131..de4423af3a 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/impl/DualKeyCacheImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/cache/dualkeycache/impl/DualKeyCacheImpl.java @@ -96,6 +96,34 @@ class DualKeyCacheImpl<FK, SK, V, T extends ICacheEntry<SK, V>> } } + @Override + public void computeLast(IDualKeyCacheComputation<FK, SK, V> computation) { + FK firstKey = computation.getFirstKey(); + ICacheEntryGroup<FK, SK, V, T> cacheEntryGroup = firstKeyMap.get(firstKey); + SK[] secondKeyList = computation.getSecondKeyList(); + if (cacheEntryGroup == null) { + for (int i = 0; i < secondKeyList.length; i++) { + computation.computeValue(i, null); + } + cacheStats.recordMiss(secondKeyList.length); + } else { + T cacheEntry; + int hitCount = 0; + for (int i = 0; i < secondKeyList.length; i++) { + cacheEntry = cacheEntryGroup.getCacheEntry(secondKeyList[i]); + if (cacheEntry == null) { + computation.computeValue(i, null); + } else { + computation.computeValue(i, cacheEntry.getValue()); + cacheEntryManager.access(cacheEntry); + hitCount++; + } + } + cacheStats.recordHit(hitCount); + cacheStats.recordMiss(secondKeyList.length - hitCount); + } + } + @Override public void put(FK firstKey, SK secondKey, V value) { int usedMemorySize = putToCache(firstKey, secondKey, value);
