You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/06/27 09:24:05 UTC
[incubator-iotdb] branch feature_async_close_tsfile updated: fix
TVList sort
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch feature_async_close_tsfile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/feature_async_close_tsfile by this push:
new 8470046 fix TVList sort
8470046 is described below
commit 847004626fa7000bdf457e542eb10100ed2e1402
Author: qiaojialin <64...@qq.com>
AuthorDate: Thu Jun 27 17:23:49 2019 +0800
fix TVList sort
---
.../iotdb/db/utils/datastructure/LongTVList.java | 13 +--
.../db/utils/datastructure/LongTVListTest.java | 97 +++++++++++++++-------
2 files changed, 74 insertions(+), 36 deletions(-)
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java b/iotdb/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
index 64b10bf..14eb813 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
@@ -143,15 +143,15 @@ public class LongTVList extends TVList {
if (rightIdx == hi) {
endSide = 2;
} else {
- rightFirstT = getTime(leftIdx);
- rightFirstV = getLong(leftIdx);
+ rightFirstT = getTime(rightIdx);
+ rightFirstV = getLong(rightIdx);
}
}
}
if (endSide == 1) {
for (; rightIdx < hi; rightIdx++) {
- rightFirstT = getTime(leftIdx);
- rightFirstV = getLong(leftIdx);
+ rightFirstT = getTime(rightIdx);
+ rightFirstV = getLong(rightIdx);
sortedTimestamps[lo + tmpIdx] = rightFirstT;
sortedValues[lo + tmpIdx] = rightFirstV;
tmpIdx ++;
@@ -218,6 +218,10 @@ public class LongTVList extends TVList {
}
set(left, pivotT, pivotV);
}
+ for (int i = lo; i < hi; i++) {
+ sortedTimestamps[i] = getTime(i);
+ sortedValues[i] = getLong(i);
+ }
}
protected void reverseRange(int lo, int hi) {
@@ -229,7 +233,6 @@ public class LongTVList extends TVList {
long hiV = getLong(hi);
set(lo++, hiT, hiV);
set(hi--, loT, loV);
- lo++;
}
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/utils/datastructure/LongTVListTest.java b/iotdb/src/test/java/org/apache/iotdb/db/utils/datastructure/LongTVListTest.java
index 973054b..2a9f85d 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/utils/datastructure/LongTVListTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/utils/datastructure/LongTVListTest.java
@@ -1,76 +1,111 @@
package org.apache.iotdb.db.utils.datastructure;
-import java.sql.Time;
import java.util.List;
import org.apache.iotdb.db.engine.memtable.DeduplicatedSortedData;
import org.apache.iotdb.db.engine.memtable.WritableMemChunk;
import org.apache.iotdb.db.utils.TimeValuePair;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.junit.Assert;
import org.junit.Test;
public class LongTVListTest {
+
@Test
- public void compareLongTVListInsertTime() {
+ public void testLongTVList1() {
- long start = System.currentTimeMillis();
LongTVList tvList = new LongTVList();
- for (long i = 0; i < 1000000; i ++) {
+ for (long i = 0; i < 1000; i++) {
tvList.putLong(i, i);
}
- start = System.currentTimeMillis() - start;
- System.out.println("tvList insert time: " + start);
-
- long time = System.currentTimeMillis();
- WritableMemChunk writableMemChunk = new WritableMemChunk(TSDataType.INT64);
- for (long i = 0; i < 1000000; i ++) {
- writableMemChunk.putLong(i, i);
+ tvList.sort();
+ for (long i = 0; i < tvList.size; i++) {
+ Assert.assertEquals(i, tvList.getLong((int)i));
+ Assert.assertEquals(i, tvList.getTime((int)i));
}
-
- time = System.currentTimeMillis() - time;
- System.out.println("writable memchunk insert time: " + time);
}
@Test
- public void compareLongTVListSortTime() {
+ public void testLongTVList2() {
LongTVList tvList = new LongTVList();
- for (long i = 0; i < 1000000; i ++) {
+ for (long i = 10000; i >= 0; i--) {
tvList.putLong(i, i);
}
-
- WritableMemChunk writableMemChunk = new WritableMemChunk(TSDataType.INT64);
- for (long i = 0; i < 1000000; i ++) {
- writableMemChunk.putLong(i, i);
+ tvList.sort();
+ for (long i = 0; i < tvList.size; i++) {
+ Assert.assertEquals(i, tvList.getLong((int)i));
+ Assert.assertEquals(i, tvList.getTime((int)i));
}
+
+// WritableMemChunk writableMemChunk = new WritableMemChunk(TSDataType.INT64);
+// for (long i = 0; i < 1000; i++) {
+// writableMemChunk.putLong(i, i);
+// }
+// List<TimeValuePair> timeValuePairs = writableMemChunk.getSortedTimeValuePairList();
+// for (int i = 0; i < timeValuePairs.size(); i++) {
+// timeValuePairs.get(i);
+// }
+
+ }
+
+
+ @Test
+ public void compareLongTVListSortTime() {
+
long start = System.currentTimeMillis();
- tvList.sort();
- for (int i = 0; i < tvList.size; i ++) {
- tvList.getLong(i);
- tvList.getTime(i);
+
+ for (int j = 0; j < 100; j++) {
+ LongTVList tvList = new LongTVList();
+ for (long i = 0; i < 1000; i++) {
+ tvList.putLong(i, i);
+ }
+ tvList.sort();
+ for (int i = 0; i < tvList.size; i++) {
+ tvList.getLong(i);
+ tvList.getTime(i);
+ }
}
start = System.currentTimeMillis() - start;
System.out.println("tvList sort time: " + start);
+ }
+
+ @Test
+ public void compareGetSortedTimeValuePairTime() {
long time1 = System.currentTimeMillis();
- List<TimeValuePair> timeValuePairs = writableMemChunk.getSortedTimeValuePairList();
- for (int i = 0; i < timeValuePairs.size(); i++) {
- timeValuePairs.get(i);
+ for (int j = 0; j < 100; j++) {
+ WritableMemChunk writableMemChunk = new WritableMemChunk(TSDataType.INT64);
+ for (long i = 0; i < 1000; i++) {
+ writableMemChunk.putLong(i, i);
+ }
+ List<TimeValuePair> timeValuePairs = writableMemChunk.getSortedTimeValuePairList();
+ for (int i = 0; i < timeValuePairs.size(); i++) {
+ timeValuePairs.get(i);
+ }
}
time1 = System.currentTimeMillis() - time1;
System.out.println("writable memchunk getSortedTimeValuePairList time: " + time1);
+ }
+ @Test
+ public void compareGetDeduplicatedDataTime() {
long time2 = System.currentTimeMillis();
- DeduplicatedSortedData deduplicatedSortedData = writableMemChunk.getDeduplicatedSortedData();
- while(deduplicatedSortedData.hasNext()) {
- deduplicatedSortedData.next();
+ for (int j = 0; j < 100; j++) {
+ WritableMemChunk writableMemChunk = new WritableMemChunk(TSDataType.INT64);
+ for (long i = 0; i < 1000; i++) {
+ writableMemChunk.putLong(i, i);
+ }
+ DeduplicatedSortedData deduplicatedSortedData = writableMemChunk.getDeduplicatedSortedData();
+ while (deduplicatedSortedData.hasNext()) {
+ deduplicatedSortedData.next();
+ }
}
time2 = System.currentTimeMillis() - time2;
System.out.println("writable memchunk getDeduplicatedSortedData time: " + time2);
}
-
}
\ No newline at end of file