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);

Reply via email to