Mercurial > hg > Members > kazuma > jungle-ormapper
view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/test/DataBaseBenchMark.java @ 0:44465893e8b8
first Commit
author | Kazuma |
---|---|
date | Wed, 30 Nov 2016 01:47:55 +0900 |
parents | |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.test; import com.mongodb.MongoClient; import com.mongodb.WriteConcern; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree; import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; import org.bson.Document; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import java.io.*; import java.nio.ByteBuffer; public class DataBaseBenchMark { public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException, SAXException { if (args.length < 2) { System.out.println("args[0] = jungle or mongo, args[1] = read or write" ); System.exit(0); } Runtime rt = Runtime.getRuntime(); int cpuNum = rt.availableProcessors(); if (args[0].equals("jungle")) jungleBench(args, cpuNum); else if (args[0].equals("mongo")) mongoBench(args, cpuNum); } private static void mongoBench(String[] args, int cpuNum) throws IOException, InterruptedException { MongoClient client = new MongoClient("localhost", 27017); client.setWriteConcern(WriteConcern.JOURNALED); client.dropDatabase("mydb"); MongoDatabase database = client.getDatabase("mydb"); MongoCollection<Document> coll = database.getCollection("mycoll"); for (int i = 0; i < 10000; i++) { if (i % 100 == 0) System.out.println(i / 100); coll.insertOne(new Document("key",String.valueOf(i))); } coll.createIndex(new Document("key", 1)); for (final Document index : coll.listIndexes()) { System.out.println(index.toJson()); } File file = new File("./time/" + args[0] + args[1] + "Time"); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); DataBaseBenchMarkThread readThread[]; for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) { readThread = new DataBaseBenchMarkThread[THREAD_COUNT]; for (int count = 0; THREAD_COUNT > count; count++) { readThread[count] = new findMongoAttributeThread(coll); } for (int count = 0; THREAD_COUNT > count; count++) { readThread[count].start(); } System.out.println("StartThread"); Thread.sleep(1000); long readCount = 0; for (int count = 0; THREAD_COUNT > count; count++) { readCount = readCount + readThread[count].getFindCount(); readThread[count].set(false); readThread[count] = null; } pw.println(THREAD_COUNT + " " + readCount); System.out.println(THREAD_COUNT + "readCount = " + readCount); System.gc(); System.out.println("-------------GC--------------"); Thread.sleep(1000); } client.close(); pw.close(); } private static void jungleBench(String[] args, int cpuNum) throws IOException, InterruptedException { JungleTree tree = createJungleTree(); File file = new File("./time/" + args[0] + args[0] + "Time"); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); DataBaseBenchMarkThread readThread[]; for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) { readThread = new DataBaseBenchMarkThread[THREAD_COUNT]; for (int count = 0; THREAD_COUNT > count; count++) { readThread[count] = new findTreeAttributeThread(tree); } JungleWriteThread writeThread = null; if (args[1].equals("write")) { writeThread = new JungleWriteThread(tree); writeThread.start(); } for (int count = 0; THREAD_COUNT > count; count++) { readThread[count].start(); } System.out.println("StartThread"); Thread.sleep(1000); if (writeThread != null) { writeThread.set(false); writeThread.get(); } long readCount = 0; for (int count = 0; THREAD_COUNT > count; count++) { readCount = readCount + readThread[count].getFindCount(); readThread[count].set(false); readThread[count] = null; } pw.println(THREAD_COUNT + " " + readCount); System.out.println(THREAD_COUNT + "readCount = " + readCount); System.gc(); System.out.println("-------------GC--------------"); Thread.sleep(1000); } pw.close(); } private static JungleTree createJungleTree() { Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser())); JungleTree tree = jungle.createNewTree("tree"); JungleTreeEditor editor = tree.getTreeEditor(); editor = editor.putAttribute(new DefaultNodePath(), "key", ByteBuffer.wrap(String.valueOf(0).getBytes())).b(); JungleTreeEditor newEditor = createTree(0, new DefaultNodePath(), editor); if (newEditor.success().isA()) { System.out.println("success faild"); System.exit(1); } return tree; } static Integer nodeNum = 1; public static JungleTreeEditor createTree(int deep, NodePath path, JungleTreeEditor editor) { String value1 = String.valueOf(nodeNum); nodeNum++; String value2 = String.valueOf(nodeNum); nodeNum++; editor = editor.addNewChildAt(path, 0).b(); editor = editor.putAttribute(path.add(0), "key", ByteBuffer.wrap(value1.getBytes())).b(); editor = editor.addNewChildAt(path, 1).b(); editor = editor.putAttribute(path.add(1), "key", ByteBuffer.wrap(value2.getBytes())).b(); deep++; if (deep < 10) { editor = createTree(deep, path.add(0), editor); editor = createTree(deep, path.add(1), editor); } return editor; } }