This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch improve_memtable_sort
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 3a1a19eca44ddafd85b6e4eb16973b6863449933
Author: xiangdong huang <[email protected]>
AuthorDate: Wed Mar 20 14:58:33 2019 +0800

    faster memtable.getSortedTimeValuePairList
---
 .../iotdb/db/engine/memtable/TimeValuePairInMemTable.java      |  8 +-------
 .../org/apache/iotdb/db/engine/memtable/WritableMemChunk.java  | 10 +++++++---
 .../java/org/apache/iotdb/db/utils/PrimitiveArrayList.java     |  3 ++-
 .../src/main/java/org/apache/iotdb/db/utils/TimeValuePair.java |  7 ++++++-
 4 files changed, 16 insertions(+), 12 deletions(-)

diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/TimeValuePairInMemTable.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/TimeValuePairInMemTable.java
index 58b2531..762b5de 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/TimeValuePairInMemTable.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/TimeValuePairInMemTable.java
@@ -23,19 +23,13 @@ import java.util.Objects;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.db.utils.TsPrimitiveType;
 
-public class TimeValuePairInMemTable extends TimeValuePair implements
-        Comparable<TimeValuePairInMemTable> {
+public class TimeValuePairInMemTable extends TimeValuePair {
 
   public TimeValuePairInMemTable(long timestamp, TsPrimitiveType value) {
     super(timestamp, value);
   }
 
   @Override
-  public int compareTo(TimeValuePairInMemTable o) {
-    return Long.compare(this.getTimestamp(), o.getTimestamp());
-  }
-
-  @Override
   public boolean equals(Object object) {
     if (!(object instanceof TimeValuePairInMemTable)) {
       return false;
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
index e60f3bb..543c025 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
@@ -19,9 +19,10 @@
 package org.apache.iotdb.db.engine.memtable;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.TreeMap;
-
 import org.apache.iotdb.db.utils.PrimitiveArrayList;
 import org.apache.iotdb.db.utils.PrimitiveArrayListFactory;
 import org.apache.iotdb.db.utils.TimeValuePair;
@@ -100,13 +101,16 @@ public class WritableMemChunk implements 
IWritableMemChunk {
   // TODO: Consider using arrays to sort and remove duplicates
   public List<TimeValuePair> getSortedTimeValuePairList() {
     int length = list.size();
-    TreeMap<Long, TsPrimitiveType> treeMap = new TreeMap<>();
+    List<TimeValuePair> ret = new ArrayList<>(length);
+    Map<Long, TsPrimitiveType> treeMap = new HashMap<>(length, 1.0f);
+    //Map<Long, TsPrimitiveType> treeMap = new TreeMap<>();
     for (int i = 0; i < length; i++) {
       treeMap.put(list.getTimestamp(i), TsPrimitiveType.getByType(dataType, 
list.getValue(i)));
     }
-    List<TimeValuePair> ret = new ArrayList<>();
     treeMap.forEach((k, v) -> ret.add(new TimeValuePairInMemTable(k, v)));
+    ret.sort(TimeValuePair::compareTo);
     return ret;
+
   }
 
   @Override
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/utils/PrimitiveArrayList.java 
b/iotdb/src/main/java/org/apache/iotdb/db/utils/PrimitiveArrayList.java
index 521468b..d5a1c3e 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/PrimitiveArrayList.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/PrimitiveArrayList.java
@@ -22,7 +22,7 @@ import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.List;
 
-public class PrimitiveArrayList {
+public class  PrimitiveArrayList {
 
   private static final int MAX_SIZE_OF_ONE_ARRAY = 512;
   private static final int INITIAL_SIZE = 1;
@@ -131,4 +131,5 @@ public class PrimitiveArrayList {
     System.arraycopy(array, 0, cloneArray, 0, Array.getLength(array));
     return cloneArray;
   }
+
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/utils/TimeValuePair.java 
b/iotdb/src/main/java/org/apache/iotdb/db/utils/TimeValuePair.java
index 900d592..dd068ec 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/TimeValuePair.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/TimeValuePair.java
@@ -20,7 +20,7 @@ package org.apache.iotdb.db.utils;
 
 import java.io.Serializable;
 
-public class TimeValuePair implements Serializable {
+public class TimeValuePair implements Serializable, Comparable<TimeValuePair>{
 
   private long timestamp;
   private TsPrimitiveType value;
@@ -71,4 +71,9 @@ public class TimeValuePair implements Serializable {
   public int getSize() {
     return 8 + 8 + value.getSize();
   }
+
+  @Override
+  public int compareTo(TimeValuePair o) {
+    return Long.compare(this.getTimestamp(), o.getTimestamp());
+  }
 }

Reply via email to