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

jackietien pushed a commit to branch tsbs/iot
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/tsbs/iot by this push:
     new 6eb29f4365e add query time cost statistics
6eb29f4365e is described below

commit 6eb29f4365e3df4ac60b3cd5d408b68910e9c55c
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 7 17:20:06 2024 +0800

    add query time cost statistics
---
 .../main/java/org/apache/iotdb/TSBSExample.java    | 255 +++++++++++++--------
 1 file changed, 160 insertions(+), 95 deletions(-)

diff --git a/example/session/src/main/java/org/apache/iotdb/TSBSExample.java 
b/example/session/src/main/java/org/apache/iotdb/TSBSExample.java
index bfed9779e50..e6d3b0bea9f 100644
--- a/example/session/src/main/java/org/apache/iotdb/TSBSExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/TSBSExample.java
@@ -25,6 +25,9 @@ import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.session.Session;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class TSBSExample {
 
   public static void main(String[] args)
@@ -44,153 +47,215 @@ public class TSBSExample {
 
     String queryType = args[1];
 
+    int queryCount = Integer.parseInt(args[2]);
+    if (queryCount <= 0) {
+      System.out.println("Query Count should be larger than 0.");
+      return;
+    }
+    List<Long> timeCostList = new ArrayList<>();
+
     switch (queryType) {
       case "last-loc":
-        try (SessionDataSet dataSet =
-            session.executeQueryStatement(
-                String.format(
-                    "SELECT max_time(latitude), last_value(latitude), 
last_value(longitude) FROM root.readings.%s.**  align by device",
-                    args[2]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.executeQueryStatement(
+                  String.format(
+                      "SELECT max_time(latitude), last_value(latitude), 
last_value(longitude) FROM root.readings.%s.**  align by device",
+                      args[3]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "low-fuel":
-        try (SessionDataSet dataSet =
-            session.executeQueryStatement(
-                String.format(
-                    "SELECT last_value(fuel_state) FROM root.diagnostics.%s.** 
WHERE fuel_state <= 0.1 align by device;",
-                    args[2]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.executeQueryStatement(
+                  String.format(
+                      "SELECT last_value(fuel_state) FROM 
root.diagnostics.%s.** WHERE fuel_state <= 0.1 align by device;",
+                      args[3]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "high-load":
-        try (SessionDataSet dataSet = session.tsbsIoTHighLoad(args[2])) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet = session.tsbsIoTHighLoad(args[3])) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "stationary-trucks":
-        try (SessionDataSet dataSet =
-            session.executeQueryStatement(
-                String.format(
-                    "select avg(velocity) from root.readings.%s.** where time 
>= %d and time < %d having avg(velocity) < 1 align by device",
-                    args[2], Long.parseLong(args[3]), 
Long.parseLong(args[4])))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.executeQueryStatement(
+                  String.format(
+                      "select avg(velocity) from root.readings.%s.** where 
time >= %d and time < %d having avg(velocity) < 1 align by device",
+                      args[3], Long.parseLong(args[4]), 
Long.parseLong(args[5])))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "long-driving-sessions":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTLongDrivingSessions(
-                args[2], Long.parseLong(args[3]), Long.parseLong(args[4]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTLongDrivingSessions(
+                  args[3], Long.parseLong(args[4]), Long.parseLong(args[5]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "long-daily-sessions":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTLongDailySessions(
-                args[2], Long.parseLong(args[3]), Long.parseLong(args[4]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTLongDailySessions(
+                  args[3], Long.parseLong(args[4]), Long.parseLong(args[5]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "avg-vs-projected-fuel-consumption":
-        try (SessionDataSet dataSet = 
session.tsbsIoTAvgVsProjectedFuelConsumption()) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet = 
session.tsbsIoTAvgVsProjectedFuelConsumption()) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "avg-daily-driving-duration":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTAvgDailyDrivingDuration(
-                Long.parseLong(args[2]), Long.parseLong(args[3]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTAvgDailyDrivingDuration(
+                  Long.parseLong(args[3]), Long.parseLong(args[4]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "avg-daily-driving-session":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTAvgDailyDrivingSession(
-                Long.parseLong(args[2]), Long.parseLong(args[3]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTAvgDailyDrivingSession(
+                  Long.parseLong(args[3]), Long.parseLong(args[4]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "avg-load":
-        try (SessionDataSet dataSet = session.tsbsIoTAvgLoad()) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet = session.tsbsIoTAvgLoad()) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "daily-activity":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTDailyActivity(Long.parseLong(args[2]), 
Long.parseLong(args[3]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTDailyActivity(Long.parseLong(args[3]), 
Long.parseLong(args[4]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       case "breakdown-frequency":
-        try (SessionDataSet dataSet =
-            session.tsbsIoTBreakdownFrequency(Long.parseLong(args[2]), 
Long.parseLong(args[3]))) {
-          SessionDataSet.DataIterator iterator = dataSet.iterator();
-          long count = 0;
-          while (iterator.next()) {
-            count++;
+        for (int i = 0; i < queryCount; i++) {
+          long startTimeNano = System.nanoTime();
+          try (SessionDataSet dataSet =
+              session.tsbsIoTBreakdownFrequency(Long.parseLong(args[3]), 
Long.parseLong(args[4]))) {
+            SessionDataSet.DataIterator iterator = dataSet.iterator();
+            long count = 0;
+            while (iterator.next()) {
+              count++;
+            }
+            timeCostList.add(System.nanoTime() - startTimeNano);
           }
-          System.out.println("total lines: " + count);
         }
         break;
       default:
         throw new UnsupportedOperationException(queryType);
     }
-
     session.close();
+
+    printQueryTimeCost(queryCount, timeCostList);
+  }
+
+  private static void printQueryTimeCost(int queryCount, List<Long> 
timeCostList) {
+    System.out.printf("Running query %d times.%n", queryCount);
+    System.out.printf("Time cost of first query is %d ms.%n", 
timeCostList.get(0) / 1_000_000L);
+    long sum = 0;
+    for (Long cost : timeCostList) {
+      sum += cost;
+    }
+    System.out.printf("Avg time cost is %d ms.%n", sum / timeCostList.size() / 
1_000_000L);
+    long median;
+    int index = timeCostList.size() / 2;
+    if (timeCostList.size() % 2 == 0) {
+      median = (timeCostList.get(index - 1) + timeCostList.get(index)) / 2 / 
1_000_000L;
+    } else {
+      median = timeCostList.get(index) / 1_000_000L;
+    }
+    System.out.printf("Median time cost is %d ms.%n", median);
   }
 }

Reply via email to