This is an automated email from the ASF dual-hosted git repository.
hxd pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a58b084 [IOTDB-56] faster memtable.getSortedTimeValuePairList (#105)
a58b084 is described below
commit a58b084dd787ddbaa5e0ace58ad6bb6cf3276629
Author: Xiangdong Huang <[email protected]>
AuthorDate: Fri Mar 22 13:25:42 2019 +0800
[IOTDB-56] faster memtable.getSortedTimeValuePairList (#105)
* faster memtable.getSortedTimeValuePairList
---
.../iotdb/db/engine/memtable/TimeValuePairInMemTable.java | 8 +-------
.../apache/iotdb/db/engine/memtable/WritableMemChunk.java | 14 +++++++++-----
.../java/org/apache/iotdb/db/utils/PrimitiveArrayList.java | 1 +
.../main/java/org/apache/iotdb/db/utils/TimeValuePair.java | 7 ++++++-
4 files changed, 17 insertions(+), 13 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..c351163 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<>();
+
+ Map<Long, TsPrimitiveType> map = new HashMap<>(length, 1.0f);
for (int i = 0; i < length; i++) {
- treeMap.put(list.getTimestamp(i), TsPrimitiveType.getByType(dataType,
list.getValue(i)));
+ map.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)));
+ List<TimeValuePair> ret = new ArrayList<>(map.size());
+ map.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..a473152 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
@@ -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..472109b 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());
+ }
}