package com.nexr.platform.search.david;
import com.panelion.utils.FileUtils;
import org.elasticsearch.common.io.FastByteArrayOutputStream;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
* User: david
* Date: 11. 10. 11.
* Time: 오후 5:30
*/
public class PerformanceJsonVsSmile {
public interface Builder {
public XContentBuilder generator();
public Map<String, Object> parse(XContentBuilder builder);
public void print();
}
private enum CONTENT_TYPE {
JSON,
SMILE
}
public static Builder getInstance(CONTENT_TYPE TYPE) {
switch (TYPE) {
case JSON :
return new JsonBuilder();
case SMILE:
return new SmileBuilder();
default:
return null;
}
}
private static class JsonBuilder implements Builder {
@Override
public XContentBuilder generator() {
XContentBuilder builder = null;
try {
FastByteArrayOutputStream jsonOs = new FastByteArrayOutputStream();
builder = XContentFactory.jsonBuilder(jsonOs);
} catch (IOException e) {
e.printStackTrace();
}
return builder;
}
@Override
public Map<String, Object> parse(XContentBuilder builder) {
try {
return XContentFactory.xContent(XContentType.JSON).createParser(builder.copiedBytes()).mapAndClose();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void print() {
//To change body of implemented methods use File | Settings | File Templates.
}
}
private static class SmileBuilder implements Builder {
@Override
public XContentBuilder generator() {
XContentBuilder builder = null;
try {
FastByteArrayOutputStream smileOs = new FastByteArrayOutputStream();
builder = XContentFactory.smileBuilder(smileOs);
} catch (IOException e) {
e.printStackTrace();
}
return builder;
}
@Override
public Map<String, Object> parse(XContentBuilder builder) {
try {
return XContentFactory.xContent(XContentType.SMILE).createParser(builder.copiedBytes()).mapAndClose();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void print() {
}
}
private static String print(int dataCount, long jsonGenerateTime, long smileGenerateTime, long jsonParseTime, long smileParseTime) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(dataCount).append("\t");
stringBuilder.append(jsonGenerateTime).append("\t");
stringBuilder.append(smileGenerateTime).append("\t");
stringBuilder.append(jsonParseTime).append("\t");
stringBuilder.append(smileParseTime).append("\t");
return stringBuilder.toString();
}
private static Map<String, Object> generateMapData(String filePath) {
Map<String, Object> mapData = new HashMap<String, Object>();
try {
FileUtils fileUtils = new FileUtils(filePath);
fileUtils.setReadable("UTF-8");
String line;
while((line = fileUtils.getReadLine()) != null) {
String[] cols = new String[2];
cols = line.split("\t", cols.length);
mapData.put(cols[0], cols[1]);
line = null;
}
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return mapData;
}
public static void main(String[] args) throws IOException {
Builder jsonBuilder = PerformanceJsonVsSmile.getInstance(CONTENT_TYPE.JSON);
Builder smileBuilder = PerformanceJsonVsSmile.getInstance(CONTENT_TYPE.SMILE);
// String filePath = "/Users/david/Execute/Data/test/sd_com_cell_sample_data.csv";
String dataFilePath = "/Users/david/Execute/nexrsearch_client/config/sd_com_cell.csv";
// Map<String, Object> mapData = PerformanceJsonVsSmile.generateMapData(filePath);
FileUtils fileUtils = new FileUtils(dataFilePath);
fileUtils.setReadable("UTF-8");
// FileUtils writeFileUtils = new FileUtils("/Users/david/Execute/nexrsearch_client/config/jsonVsSmile.txt");
// writeFileUtils.setWritable(true);
List<Map<String, Object>> dataList = fileUtils.getHorizonTableFile("UTF-8", ",");
int dataCount = 1;
for (Map<String, Object> mapData : dataList) {
if (mapData != null) {
XContentBuilder jsonGenerator = jsonBuilder.generator();
XContentBuilder smileGenerator = smileBuilder.generator();
System.out.println("------------------------------------------------------------");
//TimeChecker.startTime("generate json data");
long jsonGenerateStartTime = System.nanoTime();
XContentBuilder jsonGenerateBuilder = jsonGenerator.map(mapData);
long jsonGenerateEndTime = System.nanoTime();
//TimeChecker.endTime("generate json data");
// System.out.println(new String(jsonGenerateBuilder.copiedBytes()));
//TimeChecker.startTime("generate smile data");
long smileGenerateStartTime = System.nanoTime();
XContentBuilder smileGenerateBuilder = smileGenerator.map(mapData);
long smileGenerateEndTime = System.nanoTime();
//TimeChecker.endTime("generate smile data");
//TimeChecker.startTime("parse json data");
long jsonParseStartTime = System.nanoTime();
jsonBuilder.parse(jsonGenerateBuilder);
long jsonParseEndTime = System.nanoTime();
//TimeChecker.endTime("parse json data");
// System.out.println(new String(smileGenerateBuilder.copiedBytes()));
// TimeChecker.startTime("parse smile data");
long smileParseStartTime = System.nanoTime();
smileBuilder.parse(smileGenerateBuilder);
long smileParseEndTime = System.nanoTime();
// TimeChecker.endTime("parse smile data");
jsonGenerateBuilder.close();
smileGenerateBuilder.close();
jsonGenerator.close();
smileGenerator.close();
BufferedWriter out = new BufferedWriter(new FileWriter("/Users/david/Execute/nexrsearch_client/config/out.txt", true));
String result = print(dataCount, (jsonGenerateEndTime - jsonGenerateStartTime), (smileGenerateEndTime - smileGenerateStartTime),
(jsonParseEndTime - jsonParseStartTime), (smileParseEndTime - smileParseStartTime));
out.write(result);
out.newLine();
out.close();
dataCount++;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
fileUtils.close();
// writeFileUtils.close();
}
}