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