changeset 320:e3e4ffd746cb

commit
author tatsuki
date Tue, 07 Feb 2017 21:34:21 +0900
parents b606b727dc2b
children 14190fd751cf
files build.gradle src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/Data/TreeMapBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleTreeCreater.java src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/DefaultTransactionManager.java
diffstat 6 files changed, 89 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/build.gradle	Fri Feb 03 20:21:53 2017 +0900
+++ b/build.gradle	Tue Feb 07 21:34:21 2017 +0900
@@ -18,7 +18,7 @@
 dependencies {
     compile "commons-collections:commons-collections:3.2.1"
     compile "org.apache.maven.surefire:surefire-junit4:2.13"
-    compile "com.google.guava:guava:12.0"
+    compile group: 'com.google.guava', name: 'guava', version: '20.0'
     compile fileTree(dir: 'lib', include: '*.jar')
     compile group: 'junit', name: 'junit', version: '4.11'
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/Data/TreeMapBenchMark.java	Fri Feb 03 20:21:53 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/Data/TreeMapBenchMark.java	Tue Feb 07 21:34:21 2017 +0900
@@ -4,26 +4,52 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.data.treemap.TreeMap;
 
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
 
 public class TreeMapBenchMark {
     public static void main(String[] args) {
         for (int i = 1; i <= 10; i++) {
-            TreeMap<Integer, Integer> map = new TreeMap<>();
-            ArrayList<Integer> list = new ArrayList<>();
+            TreeMap<String, String> map = new TreeMap<>();
+
+            List<String> insertValueList = new ArrayList<>();
+            for (int count = 1; count < 100 * i; count++) {
+                insertValueList.add(0,String.valueOf(count));
+            }
 
-            for (int count = 1; count < 100000 * i; count++) {
-                map = map.put(count, count);
-                list.add(count);
+            Iterator<String> insertValueIterator = insertValueList.iterator();
+            long t1 = System.currentTimeMillis();
+            while (insertValueIterator.hasNext()) {
+                String str = insertValueIterator.next();
+                map = map.put(str, str);
+            }
+            long t2 = System.currentTimeMillis();
+
+            List<String> fiindValueList = new ArrayList<>();
+            for (int count = 1; count < 1000; count++) {
+                fiindValueList.add(0,String.valueOf(count));
             }
 
-            Collections.shuffle(list);
-            long t1 = System.currentTimeMillis();
-            for (Integer num : list) {
-                map = map.delete(num);
+            Iterator<String> findtValueIterator = fiindValueList.iterator();
+            long t3 = System.currentTimeMillis();
+            while (findtValueIterator.hasNext()) {
+                Optional<String> ttt = map.get(findtValueIterator.next());
             }
-            long t2 = System.currentTimeMillis();
-            System.out.println((i * 100000) + " time = " + (t2 - t1));
+            long t4 = System.currentTimeMillis();
+
+            Iterator<String> deleteValueIterator = insertValueList.iterator();
+            long t5 = System.currentTimeMillis();
+            while (deleteValueIterator.hasNext()) {
+                map = map.delete(deleteValueIterator.next());
+            }
+            long t6 = System.currentTimeMillis();
+            System.out.println((i * 100) + " " + (t2 - t1)); //insert
+            //System.out.println((i * 100) + " " + (t4 - t3)); // find
+            //System.out.println((i * 100) + " " + (t6 - t5));// delete
+
         }
+
+
     }
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java	Fri Feb 03 20:21:53 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java	Tue Feb 07 21:34:21 2017 +0900
@@ -33,6 +33,7 @@
                 editor = editor.putAttribute(path, "roleId", value2).b();
             }
             editor.success();
+
             long t1 = System.currentTimeMillis();
             for (int findCount = 0; findCount < 50000; ) {
                 InterfaceTraverser traverser = tree.getTraverser(true);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleTreeCreater.java	Fri Feb 03 20:21:53 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleTreeCreater.java	Tue Feb 07 21:34:21 2017 +0900
@@ -11,11 +11,15 @@
 
 public class JungleTreeCreater {
 
-    int maxDeps;
-    int maxNodeCount;
-    int nodeCount = 1;//今作ったノードのカウント、rootがあるから最初は1
-    public JungleTreeCreater(int maxNodeCount) {
+    private int maxDeps;
+    private int maxNodeCount;
+    private int distanceCreateIndex;
+    private int editCount = 0;
+    private int nodeCount = 1;//今作ったノードのカウント、rootがあるから最初は1
+
+    public JungleTreeCreater(int maxNodeCount, int distanceCreateIndex) {
         this.maxNodeCount = maxNodeCount;
+        this.distanceCreateIndex = distanceCreateIndex;
         this.maxDeps = getMaxDeps(maxNodeCount);
     }
 
@@ -35,14 +39,18 @@
                 return editor;
             }
             String value = String.valueOf(nodeCount);
-            either = editor.addNewChildAndPutAttribute(path, i,key,ByteBuffer.wrap(value.getBytes()));
+            either = editor.addNewChildAndPutAttribute(path, i, key, ByteBuffer.wrap(value.getBytes()));
             if (either.isA())
                 Assert.fail();
             editor = either.b();
-            either = editor.success();
-            if (either.isA())
-                Assert.fail();
-            editor = either.b();
+            editCount++;
+            if (distanceCreateIndex == editCount) {
+                either = editor.success();
+                if (either.isA())
+                    Assert.fail();
+                editor = either.b();
+                editCount = 0;
+            }
             nodeCount++;
         }
         for (int i = 0; i < 2; i++) {
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java	Fri Feb 03 20:21:53 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java	Tue Feb 07 21:34:21 2017 +0900
@@ -8,10 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.RedBlackTreeNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
-import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
-
-import java.nio.ByteBuffer;
 
 import static java.lang.Thread.sleep;
 
@@ -19,9 +15,13 @@
  * Created by e115731 on 2016/12/30.
  */
 public class CreateIndexBenchMark {
+    private static String key = "key";
+    private static String indexKey = "indexKey";
+    static int distanceCreateIndex = 1;
+
     public static void main(String args[]) throws InterruptedException {
         if (args.length == 0) {
-            System.out.println("args default or difference");
+            System.out.println("args default or redblack");
             System.exit(0);
         }
 
@@ -31,9 +31,7 @@
             System.out.println("create red black tree");
         }
 
-        String key = "key";
-        String indexKey = "indexKey";
-        warmUp();
+        warmUp(args);
         for (int i = 0; i <= 1000; ) {
             Jungle jungle = new DefaultJungle(null, "hogehoge");
             Long t1 = System.currentTimeMillis();
@@ -48,7 +46,7 @@
             }
             JungleTreeEditor editor = tree.getJungleTreeEditor();
             int maxNodeCount = i;
-            JungleTreeCreater creater = new JungleTreeCreater(maxNodeCount);
+            JungleTreeCreater creater = new JungleTreeCreater(maxNodeCount, distanceCreateIndex);
             editor = creater.createTree(editor, key, indexKey, path);
             Long t2 = System.currentTimeMillis();
             System.out.println((i) + " " + (t2 - t1));
@@ -58,15 +56,28 @@
         }
     }
 
-    private static void warmUp(){
-        Jungle jungle = new DefaultJungle(null, "hogehoge");
-        JungleTree tree = jungle.createNewDifferenceTree("Tree");
-        NodePath path = new DefaultNodePath();
-        JungleTreeEditor editor = tree.getJungleTreeEditor();
-        Either<Error, JungleTreeEditor> either = editor.putAttribute(path, "key", ByteBuffer.wrap("value".getBytes()));
-        if (either.isA())
-            return;
-        editor = either.b();
-        either = editor.success();
+    private static void warmUp(String[] args) {
+
+        for (int i = 0; i <= 1000; ) {
+            Jungle jungle = new DefaultJungle(null, "hogehoge");
+            Long t1 = System.currentTimeMillis();
+            JungleTree tree;
+            NodePath path;
+            if (args[0].equals("default")) {
+                tree = jungle.createNewTree("Tree");
+                path = new DefaultNodePath();
+            } else {
+                tree = jungle.createNewRedBlackTree("Tree", key);
+                path = new RedBlackTreeNodePath();
+            }
+            JungleTreeEditor editor = tree.getJungleTreeEditor();
+            int maxNodeCount = i;
+            JungleTreeCreater creater = new JungleTreeCreater(maxNodeCount, distanceCreateIndex);
+            editor = creater.createTree(editor, key, indexKey, path);
+            Long t2 = System.currentTimeMillis();
+
+            i = i + 100;
+            System.gc(); //GCしないとクソみたいに重くなる
+        }
     }
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/DefaultTransactionManager.java	Fri Feb 03 20:21:53 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/DefaultTransactionManager.java	Tue Feb 07 21:34:21 2017 +0900
@@ -57,7 +57,6 @@
             public int getTreeType() {
                 return TreeType.DEFAULT;
             }
-
             @Override
             public TreeOperationLog getLog() {
                 return _log;
@@ -73,8 +72,8 @@
         Index index = tip.getIndex();
         ParentIndex parentIndex = tip.getParentIndex();
         InterfaceTraverser traverser = new DefaultInterfaceTraverser(newRoot, index, parentIndex, true);
-        traverser.updateIndex(editNodeList);
-        //traverser.createIndex();
+        //traverser.updateIndex(editNodeList);
+        traverser.createIndex();
         TreeContext newTreeContext = new DefaultTreeContext(newRoot, tip, list, uuid, _treeName, nextRevision, traverser);
 
         if (repository.compareAndSet(newTreeContext.prev(), newTreeContext)) {