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()); + } }
