You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by im...@apache.org on 2016/03/16 01:35:13 UTC
[08/15] incubator-asterixdb git commit: Merge asterix-experiments to
master
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/a70fba5c/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilder.java
----------------------------------------------------------------------
diff --git a/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilder.java b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilder.java
new file mode 100644
index 0000000..52034a4
--- /dev/null
+++ b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilder.java
@@ -0,0 +1,264 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.experiment.report;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class SIE2ReportBuilder extends AbstractDynamicDataEvalReportBuilder {
+ private static final int SELECT_QUERY_RADIUS_COUNT = 5;
+ private static final int INITIAL_SELECT_QUERY_COUNT_TO_IGNORE = 0;
+ private static final int MAX_SELECT_QUERY_COUNT_TO_CONSIDER = Integer.MAX_VALUE; //5000 + INITIAL_SELECT_QUERY_COUNT_TO_CONSIDER;
+ private static final int QUERY_GEN_COUNT = 8;
+ private static final String[] QUERY_GEN_IPS = { "130.149.249.61", "130.149.249.62", "130.149.249.63",
+ "130.149.249.64", "130.149.249.65", "130.149.249.66", "130.149.249.67", "130.149.249.68" };
+ private BufferedReader[] queryLogFileBrs;
+
+ public SIE2ReportBuilder(String expHomePath, String expName, String runLogFileName) {
+ super(expHomePath, expName, runLogFileName, false);
+ queryLogFileBrs = new BufferedReader[QUERY_GEN_COUNT];
+ }
+
+ @Override
+ public String getOverallInsertPS(int minutes) throws Exception {
+ return null;
+ }
+
+ public String get20minInsertPS(int minutes) throws Exception {
+ renewStringBuilder();
+ openRunLog();
+ try {
+ if (!moveToExperimentBegin()) {
+ //The experiment run log doesn't exist in this run log file
+ return null;
+ }
+
+ String line;
+ long insertCount = 0;
+ while ((line = br.readLine()) != null) {
+ if (line.contains("[During ingestion + queries][InsertCount]")) {
+ insertCount += ReportBuilderHelper.getLong(line, "=", "in");
+ }
+ if (line.contains("Running")) {
+ break;
+ }
+ }
+ rsb.append(insertCount / (minutes * 60));
+ return rsb.toString();
+ } finally {
+ closeRunLog();
+ }
+ }
+
+ public double getFirstXminInsertPS(int minutes, int genId, int unitMinutes) throws Exception {
+ renewStringBuilder();
+ openRunLog();
+ try {
+ if (!moveToExperimentBegin()) {
+ //The experiment run log doesn't exist in this run log file
+ return 0;
+ }
+
+ String line;
+ int dGenId;
+ int count = 0;
+ long timeToInsert = 0;
+ long totalTimeToInsert = 0;
+ boolean haveResult = false;
+ while ((line = br.readLine()) != null) {
+ if (line.contains("[During ingestion only][TimeToInsert100000]")) {
+ dGenId = ReportBuilderHelper.getInt(line, "DataGen[", "]");
+ if (dGenId == genId) {
+ count++;
+ timeToInsert = ReportBuilderHelper.getLong(line, INSTANTANEOUS_INSERT_STRING, "in");
+ totalTimeToInsert += timeToInsert;
+ if (totalTimeToInsert > minutes * 60000) {
+ haveResult = true;
+ break;
+ }
+ }
+ }
+ if (line.contains("Running")) {
+ break;
+ }
+ }
+ if (haveResult || totalTimeToInsert > (minutes * 60000 - unitMinutes * 60000)) {
+ return (count * INSTANTAEOUS_INSERT_COUNT) / ((double) totalTimeToInsert / 1000);
+ } else {
+ return 0;
+ //return ((count * INSTANTAEOUS_INSERT_COUNT) / ((double)totalTimeToInsert/1000)) * -1;
+ }
+ } finally {
+ closeRunLog();
+ }
+ }
+
+ @Override
+ public String getInstantaneousQueryPS() throws Exception {
+ return null;
+ }
+
+ @Override
+ public String getQueryPS(int minutes) throws Exception {
+ renewStringBuilder();
+ openRunLog();
+ try {
+ if (!moveToExperimentBegin()) {
+ //The experiment run log doesn't exist in this run log file
+ return null;
+ }
+
+ String line;
+ long queryCount = 0;
+ while ((line = br.readLine()) != null) {
+ if (line.contains("[QueryCount]")) {
+ queryCount += ReportBuilderHelper.getLong(line, "[QueryCount]", "in");
+ }
+ if (line.contains("Running")) {
+ break;
+ }
+ }
+ rsb.append(queryCount / (float) (minutes * 60));
+ return rsb.toString();
+ } finally {
+ closeRunLog();
+ }
+ }
+
+ public String getAverageQueryResultCount() throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+ String line;
+ long resultCount = 0;
+ long queryCount = 0;
+ for (BufferedReader queryLogFileBr : queryLogFileBrs) {
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains("int64")) {
+ line = queryLogFileBr.readLine();
+ resultCount += Long.parseLong(line);
+ ++queryCount;
+ }
+ }
+ }
+ rsb.append(resultCount / queryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getAverageQueryResponseTime() throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+ String line;
+ long responseTime = 0;
+ long queryCount = 0;
+ for (BufferedReader queryLogFileBr : queryLogFileBrs) {
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains("Elapsed time = ")) {
+ responseTime += ReportBuilderHelper.getLong(line, "=", "for");
+ ++queryCount;
+ }
+ }
+ }
+ rsb.append(responseTime / queryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getSelectQueryResponseTime(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+ String line;
+ long queryResponseTime = 0;
+ int targetRadiusSelectQueryCount = 0;
+ for (BufferedReader queryLogFileBr : queryLogFileBrs) {
+ int selectQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains("Elapsed time =") && selectQueryCount < MAX_SELECT_QUERY_COUNT_TO_CONSIDER) {
+ if (selectQueryCount % SELECT_QUERY_RADIUS_COUNT == radiusIdx
+ && selectQueryCount >= INITIAL_SELECT_QUERY_COUNT_TO_IGNORE) {
+ queryResponseTime += ReportBuilderHelper.getLong(line, "=", "for");
+ ++targetRadiusSelectQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ }
+ }
+ rsb.append((double) queryResponseTime / targetRadiusSelectQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getSelectQueryResultCount(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+ String line;
+ long queryResultCount = 0;
+ int targetRadiusSelectQueryCount = 0;
+ for (BufferedReader queryLogFileBr : queryLogFileBrs) {
+ int selectQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains("int64") && selectQueryCount < MAX_SELECT_QUERY_COUNT_TO_CONSIDER) {
+ if (selectQueryCount % SELECT_QUERY_RADIUS_COUNT == radiusIdx
+ && selectQueryCount >= INITIAL_SELECT_QUERY_COUNT_TO_IGNORE) {
+ line = queryLogFileBr.readLine(); //read the result count line
+ queryResultCount += Long.parseLong(line);
+ ++targetRadiusSelectQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ }
+ }
+ rsb.append((double) queryResultCount / targetRadiusSelectQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ private void openQueryLog() throws IOException {
+ String queryLogFilePathPrefix = expHomePath + File.separator + expName + File.separator + "QueryGenResult-";
+ String queryLogFilePathSuffix = ".txt";
+ for (int i = 0; i < QUERY_GEN_COUNT; i++) {
+ queryLogFileBrs[i] = new BufferedReader(new FileReader(queryLogFilePathPrefix + QUERY_GEN_IPS[i]
+ + queryLogFilePathSuffix));
+ }
+ }
+
+ private void closeQueryLog() throws IOException {
+ for (BufferedReader queryLogFileBr : queryLogFileBrs) {
+ if (queryLogFileBr != null) {
+ queryLogFileBr.close();
+ queryLogFileBr = null;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/a70fba5c/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilderRunner.java
----------------------------------------------------------------------
diff --git a/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilderRunner.java b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilderRunner.java
new file mode 100644
index 0000000..91f30f5
--- /dev/null
+++ b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE2ReportBuilderRunner.java
@@ -0,0 +1,459 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.experiment.report;
+
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+
+public class SIE2ReportBuilderRunner {
+ String expHomePath = "/Users/kisskys/workspace/asterix_master/resultLog/MemBuf3g-DiskBuf3g-Lsev-Jvm7g-Lock0g/exp2-4/";
+ String runLogFileName = "run-exp2-4.log";
+ String outputFilePath = "/Users/kisskys/workspace/asterix_master/resultLog/MemBuf3g-DiskBuf3g-Lsev-Jvm7g-Lock0g/result-report/";
+
+ SIE2ReportBuilder sie2Dhbtree = new SIE2ReportBuilder(expHomePath, "SpatialIndexExperiment2Dhbtree", runLogFileName);
+ SIE2ReportBuilder sie2Dhvbtree = new SIE2ReportBuilder(expHomePath, "SpatialIndexExperiment2Dhvbtree",
+ runLogFileName);
+ SIE2ReportBuilder sie2Rtree = new SIE2ReportBuilder(expHomePath, "SpatialIndexExperiment2Rtree", runLogFileName);
+ SIE2ReportBuilder sie2Shbtree = new SIE2ReportBuilder(expHomePath, "SpatialIndexExperiment2Shbtree", runLogFileName);
+ SIE2ReportBuilder sie2Sif = new SIE2ReportBuilder(expHomePath, "SpatialIndexExperiment2Sif", runLogFileName);
+
+ StringBuilder sb = new StringBuilder();
+
+ /**
+ * generate sie2_overall_insert_ps.txt
+ */
+ public void generateOverallInsertPS() throws Exception {
+ int targetRound = 721; //(3600 seconds / 5seconds) + 1
+
+ ArrayList<Long> ipsListDhbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListDhvbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListRtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListShbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListSif = new ArrayList<Long>();
+ sie2Dhbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListDhbtree);
+ sie2Dhvbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListDhvbtree);
+ sie2Rtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListRtree);
+ sie2Shbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListShbtree);
+ sie2Sif.getAllNodesAccumulatedInsertPS(targetRound, ipsListSif);
+
+ sb.setLength(0);
+ sb.append("# sie2 60min inserts per second report\n");
+ sb.append("index type, InsertPS\n");
+ sb.append("dhbtree,").append(ipsListDhbtree.get(targetRound - 1)).append("\n");
+ sb.append("dhvbtree,").append(ipsListDhvbtree.get(targetRound - 1)).append("\n");
+ sb.append("rtree,").append(ipsListRtree.get(targetRound - 1)).append("\n");
+ sb.append("shbtree,").append(ipsListShbtree.get(targetRound - 1)).append("\n");
+ sb.append("sif,").append(ipsListSif.get(targetRound - 1)).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_overall_insert_ps.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ ipsListDhbtree.clear();
+ ipsListDhvbtree.clear();
+ ipsListRtree.clear();
+ ipsListShbtree.clear();
+ ipsListSif.clear();
+ }
+
+ /**
+ * generate sie2_accumulated_insert_ps.txt
+ */
+ public void generateAccumulatedInsertPS() throws Exception {
+ int targetRound = 721; //(3600 seconds / 5seconds) + 1
+ int roundInterval = 5;
+
+ ArrayList<Long> ipsListDhbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListDhvbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListRtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListShbtree = new ArrayList<Long>();
+ ArrayList<Long> ipsListSif = new ArrayList<Long>();
+ sie2Dhbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListDhbtree);
+ sie2Dhvbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListDhvbtree);
+ sie2Rtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListRtree);
+ sie2Shbtree.getAllNodesAccumulatedInsertPS(targetRound, ipsListShbtree);
+ sie2Sif.getAllNodesAccumulatedInsertPS(targetRound, ipsListSif);
+
+ sb.setLength(0);
+ sb.append("# sie2 accumulated inserts per second report\n");
+ sb.append("# time, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+
+ for (int i = 0; i < targetRound; i++) {
+ sb.append("" + (i * roundInterval) + "," + ipsListDhbtree.get(i) + "," + ipsListDhvbtree.get(i) + ","
+ + ipsListRtree.get(i) + "," + ipsListShbtree.get(i) + "," + ipsListSif.get(i) + "\n");
+ }
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_accumulated_insert_ps.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ ipsListDhbtree.clear();
+ ipsListDhvbtree.clear();
+ ipsListRtree.clear();
+ ipsListShbtree.clear();
+ ipsListSif.clear();
+ }
+
+ public void generateQueryPS() throws Exception {
+ int minutes = 60;
+ sb.setLength(0);
+ sb.append("# sie2 queries per second report\n");
+ sb.append("index type, QueryPS\n");
+ sb.append("dhbtree,").append(sie2Dhbtree.getQueryPS(minutes)).append("\n");
+ sb.append("dhvbtree,").append(sie2Dhvbtree.getQueryPS(minutes)).append("\n");
+ sb.append("rtree,").append(sie2Rtree.getQueryPS(minutes)).append("\n");
+ sb.append("shbtree,").append(sie2Shbtree.getQueryPS(minutes)).append("\n");
+ sb.append("sif,").append(sie2Sif.getQueryPS(minutes)).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_query_ps.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ public void generateAverageQueryResultCount() throws Exception {
+ sb.setLength(0);
+ sb.append("# sie2 average query result count report\n");
+ sb.append("index type, query result count\n");
+ sb.append("dhbtree,").append(sie2Dhbtree.getAverageQueryResultCount()).append("\n");
+ sb.append("dhvbtree,").append(sie2Dhvbtree.getAverageQueryResultCount()).append("\n");
+ sb.append("rtree,").append(sie2Rtree.getAverageQueryResultCount()).append("\n");
+ sb.append("shbtree,").append(sie2Shbtree.getAverageQueryResultCount()).append("\n");
+ sb.append("sif,").append(sie2Sif.getAverageQueryResultCount()).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_average_query_result_count.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ public void generateAverageQueryResponseTime() throws Exception {
+ sb.setLength(0);
+ sb.append("# sie2 average query response time report\n");
+ sb.append("index type, query response time\n");
+ sb.append("dhbtree,").append(sie2Dhbtree.getAverageQueryResponseTime()).append("\n");
+ sb.append("dhvbtree,").append(sie2Dhvbtree.getAverageQueryResponseTime()).append("\n");
+ sb.append("rtree,").append(sie2Rtree.getAverageQueryResponseTime()).append("\n");
+ sb.append("shbtree,").append(sie2Shbtree.getAverageQueryResponseTime()).append("\n");
+ sb.append("sif,").append(sie2Sif.getAverageQueryResponseTime()).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_average_query_response_time.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ public void generateInstantaneousInsertPS() throws Exception {
+ for (int i = 0; i < 8; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 instantaneous inserts per second report\n");
+ sb.append(sie2Dhbtree.getInstantaneousInsertPS(i, false));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_instantaneous_insert_ps_dhbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 8; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 instantaneous inserts per second report\n");
+ sb.append(sie2Dhvbtree.getInstantaneousInsertPS(i, false));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_instantaneous_insert_ps_dhvbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 8; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 instantaneous inserts per second report\n");
+ sb.append(sie2Rtree.getInstantaneousInsertPS(i, false));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_instantaneous_insert_ps_rtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 8; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 instantaneous inserts per second report\n");
+ sb.append(sie2Shbtree.getInstantaneousInsertPS(i, false));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_instantaneous_insert_ps_shbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 8; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 instantaneous inserts per second report\n");
+ sb.append(sie2Sif.getInstantaneousInsertPS(i, false));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_instantaneous_insert_ps_sif_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ }
+
+ public void generateGanttInstantaneousInsertPS() throws Exception {
+ for (int i = 0; i < 1; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 8nodes(8 dataGen) instantaneous inserts per second report\n");
+ sb.append(sie2Dhbtree.getInstantaneousInsertPS(i, true));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_instantaneous_insert_ps_dhbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 1; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 8nodes(8 dataGen) instantaneous inserts per second report\n");
+ sb.append(sie2Dhvbtree.getInstantaneousInsertPS(i, true));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_instantaneous_insert_ps_dhvbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 1; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 8nodes(8 dataGen) instantaneous inserts per second report\n");
+ sb.append(sie2Rtree.getInstantaneousInsertPS(i, true));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_instantaneous_insert_ps_rtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 1; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 8nodes(8 dataGen) instantaneous inserts per second report\n");
+ sb.append(sie2Shbtree.getInstantaneousInsertPS(i, true));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_instantaneous_insert_ps_shbtree_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+ for (int i = 0; i < 1; i++) {
+ sb.setLength(0);
+ sb.append("# sie2 8nodes(8 dataGen) instantaneous inserts per second report\n");
+ sb.append(sie2Sif.getInstantaneousInsertPS(i, true));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_instantaneous_insert_ps_sif_gen" + i + ".txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ long dataGenStartTime = sie2Dhbtree.getDataGenStartTimeStamp();
+ NCLogReportBuilder ncLogReportBuilder = new NCLogReportBuilder(expHomePath
+ + "SpatialIndexExperiment2Dhbtree/logs/a1_node1.log");
+ sb.setLength(0);
+ sb.append(ncLogReportBuilder.getFlushMergeEventAsGanttChartFormat(dataGenStartTime));
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_gantt_1node_flush_merge_dhbtree.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ dataGenStartTime = sie2Dhvbtree.getDataGenStartTimeStamp();
+ ncLogReportBuilder = new NCLogReportBuilder(expHomePath + "SpatialIndexExperiment2Dhvbtree/logs/a1_node1.log");
+ sb.setLength(0);
+ sb.append(ncLogReportBuilder.getFlushMergeEventAsGanttChartFormat(dataGenStartTime));
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_gantt_1node_flush_merge_dhvbtree.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ dataGenStartTime = sie2Rtree.getDataGenStartTimeStamp();
+ ncLogReportBuilder = new NCLogReportBuilder(expHomePath + "SpatialIndexExperiment2Rtree/logs/a1_node1.log");
+ sb.setLength(0);
+ sb.append(ncLogReportBuilder.getFlushMergeEventAsGanttChartFormat(dataGenStartTime));
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_gantt_1node_flush_merge_rtree.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ dataGenStartTime = sie2Shbtree.getDataGenStartTimeStamp();
+ ncLogReportBuilder = new NCLogReportBuilder(expHomePath + "SpatialIndexExperiment2Shbtree/logs/a1_node1.log");
+ sb.setLength(0);
+ sb.append(ncLogReportBuilder.getFlushMergeEventAsGanttChartFormat(dataGenStartTime));
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_gantt_1node_flush_merge_shbtree.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ dataGenStartTime = sie2Sif.getDataGenStartTimeStamp();
+ ncLogReportBuilder = new NCLogReportBuilder(expHomePath + "SpatialIndexExperiment2Sif/logs/a1_node1.log");
+ sb.setLength(0);
+ sb.append(ncLogReportBuilder.getFlushMergeEventAsGanttChartFormat(dataGenStartTime));
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_gantt_1node_flush_merge_sif.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ public void generateSelectQueryResponseTime() throws Exception {
+ sb.setLength(0);
+ sb.append("# sie2 select query response time report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.00001,").append(sie2Dhbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(0)).append("\n");
+ sb.append("0.0001,").append(sie2Dhbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(1)).append("\n");
+ sb.append("0.001,").append(sie2Dhbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(2)).append("\n");
+ sb.append("0.01,").append(sie2Dhbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(3)).append("\n");
+ sb.append("0.1,").append(sie2Dhbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(4)).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper.openOutputFile(outputFilePath
+ + "sie2_select_query_response_time.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ sb.setLength(0);
+ sb.append("# sie2 select query response time report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.00001,").append(sie2Dhbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(0)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(0)).append("\n");
+ sb.append("0.0001,").append(sie2Dhbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(1)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(1)).append("\n");
+ sb.append("0.001,").append(sie2Dhbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(2)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(2)).append("\n");
+
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_select_query_response_time1.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ sb.setLength(0);
+ sb.append("# sie2 select query response time 2 report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.01,").append(sie2Dhbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(3)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(3)).append("\n");
+ sb.append("0.1,").append(sie2Dhbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Rtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Shbtree.getSelectQueryResponseTime(4)).append(",")
+ .append(sie2Sif.getSelectQueryResponseTime(4)).append("\n");
+
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_select_query_response_time2.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+
+ public void generateSelectQueryResultCount() throws Exception {
+
+ sb.setLength(0);
+ sb.append("# sie2 select query result count report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.00001,").append(sie2Dhbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(0)).append("\n");
+ sb.append("0.0001,").append(sie2Dhbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(1)).append("\n");
+ sb.append("0.001,").append(sie2Dhbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(2)).append("\n");
+ sb.append("0.01,").append(sie2Dhbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(3)).append("\n");
+ sb.append("0.1,").append(sie2Dhbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(4)).append("\n");
+
+ FileOutputStream fos = ReportBuilderHelper
+ .openOutputFile(outputFilePath + "sie2_select_query_result_count.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ sb.setLength(0);
+ sb.append("# sie2 select query result count 1 report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.00001,").append(sie2Dhbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(0)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(0)).append("\n");
+ sb.append("0.0001,").append(sie2Dhbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(1)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(1)).append("\n");
+ sb.append("0.001,").append(sie2Dhbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(2)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(2)).append("\n");
+
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_select_query_result_count1.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+
+ sb.setLength(0);
+ sb.append("# sie2 select query result count 2 report\n");
+
+ sb.append("radius, dhbtree, dhvbtree, rtree, shbtree, sif\n");
+ sb.append("0.01,").append(sie2Dhbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(3)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(3)).append("\n");
+ sb.append("0.1,").append(sie2Dhbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Dhvbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Rtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Shbtree.getSelectQueryResultCount(4)).append(",")
+ .append(sie2Sif.getSelectQueryResultCount(4)).append("\n");
+
+ fos = ReportBuilderHelper.openOutputFile(outputFilePath + "sie2_select_query_result_count2.txt");
+ fos.write(sb.toString().getBytes());
+ ReportBuilderHelper.closeOutputFile(fos);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/a70fba5c/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ProfileReportBuilder.java
----------------------------------------------------------------------
diff --git a/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ProfileReportBuilder.java b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ProfileReportBuilder.java
new file mode 100644
index 0000000..138afb4
--- /dev/null
+++ b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ProfileReportBuilder.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.experiment.report;
+
+public class SIE3ProfileReportBuilder extends AbstractDynamicDataEvalReportBuilder {
+ public SIE3ProfileReportBuilder(String expHomePath, String expName, String runLogFileName) {
+ super(expHomePath, expName, runLogFileName, false);
+ }
+
+ @Override
+ public String getOverallInsertPS(int minutes) throws Exception {
+ renewStringBuilder();
+ openRunLog();
+ try {
+ if (!moveToExperimentBegin()) {
+ //The experiment run log doesn't exist in this run log file
+ return null;
+ }
+
+ String line;
+ while ((line = br.readLine()) != null) {
+ if (line.contains("int64")) {
+ line = br.readLine();
+ rsb.append(Long.parseLong(line) / (minutes * 60));
+ break;
+ }
+ }
+
+ return rsb.toString();
+ } finally {
+ closeRunLog();
+ }
+ }
+
+ @Override
+ public String getInstantaneousQueryPS() throws Exception {
+ return null;
+ }
+
+ @Override
+ public String getQueryPS(int minutes) throws Exception {
+ return null;
+ // renewStringBuilder();
+ // openRunLog();
+ // try {
+ //
+ // return getResult();
+ // } finally {
+ // closeRunLog();
+ // }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/a70fba5c/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ReportBuilder.java
----------------------------------------------------------------------
diff --git a/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ReportBuilder.java b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ReportBuilder.java
new file mode 100644
index 0000000..0f36b2a
--- /dev/null
+++ b/asterix-experiments/src/main/java/org/apache/asterix/experiment/report/SIE3ReportBuilder.java
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.experiment.report;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class SIE3ReportBuilder extends AbstractDynamicDataEvalReportBuilder {
+ private static final int WARM_UP_QUERY_COUNT = 500;
+ private static final int SELECT_QUERY_COUNT = 5000; //5000
+ private static final int JOIN_QUERY_COUNT = 1000;
+ private static final int SELECT_QUERY_RADIUS_COUNT = 5; //0.00001, 0.0001, 0.001, 0.01, 0.1
+ private static final int JOIN_QUERY_RADIUS_COUNT = 4; ////0.00001, 0.0001, 0.001, 0.01
+ private static final String LOADED_RECORD_COUNT = "1600000000"; //1600000000
+ private final String queryLogFilePath;
+ private BufferedReader queryLogFileBr;
+
+ public SIE3ReportBuilder(String expHomePath, String expName, String runLogFileName, String queryLogFileName) {
+ super(expHomePath, expName, runLogFileName, false);
+ queryLogFilePath = new String(expHomePath + File.separator + expName + File.separator + queryLogFileName);
+ }
+
+ private void openQueryLog() throws IOException {
+ queryLogFileBr = new BufferedReader(new FileReader(queryLogFilePath));
+ }
+
+ private void closeQueryLog() throws IOException {
+ if (queryLogFileBr != null) {
+ queryLogFileBr.close();
+ queryLogFileBr = null;
+ }
+ }
+
+ @Override
+ public String getOverallInsertPS(int minutes) throws Exception {
+ return null;
+ }
+
+ public String get20minInsertPS(int minutes) throws Exception {
+ return null;
+ }
+
+ @Override
+ public String getInstantaneousQueryPS() throws Exception {
+ return null;
+ }
+
+ @Override
+ public String getQueryPS(int minutes) throws Exception {
+ return null;
+ }
+
+ public String getIndexCreationTime() throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+
+ try {
+ String line;
+ long indexCreationTime = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains("There is no index with this name")) {
+ indexCreationTime += ReportBuilderHelper.getLong(line, "=", "for");
+ break;
+ }
+ }
+ rsb.append((double) indexCreationTime / (1000 * 60));
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getSelectQueryResponseTime(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+ String line;
+ long queryResponseTime = 0;
+ int selectQueryCount = 0;
+ int targetRadiusSelectQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains(LOADED_RECORD_COUNT)) {
+ //select queries start after total count query
+ // read and discard WARM_UP_QUERY_COUNT queries' results
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("Elapsed time =")) {
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT) {
+ break;
+ }
+ }
+
+ // read and calculate the average query response time for the requested(target) radius
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("Elapsed time =")) {
+ if (selectQueryCount % SELECT_QUERY_RADIUS_COUNT == radiusIdx) {
+ queryResponseTime += ReportBuilderHelper.getLong(line, "=", "for");
+ ++targetRadiusSelectQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT) {
+ break;
+ }
+ }
+ break;
+ }
+ }
+ rsb.append((double) queryResponseTime / targetRadiusSelectQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getSelectQueryResultCount(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+
+ String line;
+ long queryResultCount = 0;
+ int selectQueryCount = 0;
+ int targetRadiusSelectQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains(LOADED_RECORD_COUNT)) {
+ //select queries start after total count query
+ // read and discard WARM_UP_QUERY_COUNT queries' results
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("int64")) {
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT) {
+ break;
+ }
+ }
+
+ // read and calculate the average query response time for the requested(target) radius
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("int64")) {
+ if (selectQueryCount % SELECT_QUERY_RADIUS_COUNT == radiusIdx) {
+ line = queryLogFileBr.readLine();
+ queryResultCount += Long.parseLong(line);
+ ++targetRadiusSelectQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT) {
+ break;
+ }
+ }
+ break;
+ }
+ }
+ rsb.append((double) queryResultCount / targetRadiusSelectQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getJoinQueryResponseTime(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+
+ String line;
+ long queryResponseTime = 0;
+ int selectQueryCount = 0;
+ int targetRadiusJoinQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains(LOADED_RECORD_COUNT)) {
+ //select queries start after total count query
+ // read and discard WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT queries' results
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("Elapsed time =")) {
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT) {
+ break;
+ }
+ }
+
+ selectQueryCount = 0;
+ // read and calculate the average query response time for the requested(target) radius
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("Elapsed time =")) {
+ if (selectQueryCount % JOIN_QUERY_RADIUS_COUNT == radiusIdx) {
+ if (ReportBuilderHelper.getLong(line, "=", "for") > 5000) {
+ System.out.println("Time: " + expName + "[" + radiusIdx + ", "
+ + targetRadiusJoinQueryCount + ", " + selectQueryCount + "]:"
+ + ReportBuilderHelper.getLong(line, "=", "for"));
+ }
+ queryResponseTime += ReportBuilderHelper.getLong(line, "=", "for");
+ ++targetRadiusJoinQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == JOIN_QUERY_COUNT) {
+ break;
+ }
+ }
+ break;
+ }
+ }
+ rsb.append((double) queryResponseTime / targetRadiusJoinQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+
+ public String getJoinQueryResultCount(int radiusIdx) throws Exception {
+ renewStringBuilder();
+ openQueryLog();
+ try {
+
+ String line;
+ long queryResultCount = 0;
+ int selectQueryCount = 0;
+ int targetRadiusJoinQueryCount = 0;
+ while ((line = queryLogFileBr.readLine()) != null) {
+ if (line.contains(LOADED_RECORD_COUNT)) {
+ //select queries start after total count query
+ // read and discard WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT queries' results
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("int64")) {
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == WARM_UP_QUERY_COUNT + SELECT_QUERY_COUNT) {
+ break;
+ }
+ }
+
+ selectQueryCount = 0;
+ // read and calculate the average query response time for the requested(target) radius
+ while (true) {
+ line = queryLogFileBr.readLine();
+ if (line.contains("int64")) {
+ if (selectQueryCount % JOIN_QUERY_RADIUS_COUNT == radiusIdx) {
+ line = queryLogFileBr.readLine();
+
+ if (selectQueryCount == 600 || selectQueryCount == 824 || Long.parseLong(line) > 100000) {
+ System.out.println("Count: " + expName + "[" + radiusIdx + ", "
+ + targetRadiusJoinQueryCount + ", " + selectQueryCount + "]:"
+ + Long.parseLong(line));
+ }
+
+ queryResultCount += Long.parseLong(line);
+ ++targetRadiusJoinQueryCount;
+ }
+ ++selectQueryCount;
+ }
+ if (selectQueryCount == JOIN_QUERY_COUNT) {
+ break;
+ }
+ }
+ break;
+ }
+ }
+ rsb.append((double) queryResultCount / targetRadiusJoinQueryCount);
+ return rsb.toString();
+ } finally {
+ closeQueryLog();
+ }
+ }
+}