]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.db.tests/src/org/simantics/db/tests/performance/read/BtreeTest2.java
Added missing org.simantics.db.{tests,testing} plug-ins.
[simantics/platform.git] / tests / org.simantics.db.tests / src / org / simantics / db / tests / performance / read / BtreeTest2.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.db.tests.performance.read;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.UUID;
17
18 import org.simantics.databoard.Bindings;
19 import org.simantics.databoard.binding.mutable.Variant;
20 import org.simantics.datatypes.utils.BTreeUtils;
21 import org.simantics.db.Resource;
22 import org.simantics.db.Session;
23 import org.simantics.db.VirtualGraph;
24 import org.simantics.db.WriteGraph;
25 import org.simantics.db.WriteOnlyGraph;
26 import org.simantics.db.common.request.WriteOnlyResultRequest;
27 import org.simantics.db.common.request.WriteRequest;
28 import org.simantics.db.common.request.WriteResultRequest;
29 import org.simantics.db.exception.DatabaseException;
30 import org.simantics.db.service.VirtualGraphSupport;
31 import org.simantics.db.testing.base.ExistingDatabaseTest;
32 import org.simantics.utils.datastructures.Pair;
33
34
35 public class BtreeTest2 extends ExistingDatabaseTest {
36
37         public static final int NODE_SIZE = 500;
38         public static final int TEN = 10;
39         public static final int HUNDRED = 100;
40         public static final int THOUSAND = 1000;
41         public static final int MILLION = 1000000;
42
43         public static final int KEY_SIZE = THOUSAND;
44         public static final int ROUNDS = THOUSAND;
45
46         public void test() throws Exception {
47
48                 Session session = getSession();
49
50                 VirtualGraphSupport vgss = session.getService(VirtualGraphSupport.class);
51                 VirtualGraph vg = vgss.getMemoryPersistent(UUID.randomUUID().toString());
52
53                 final Resource tree = session.sync(new WriteResultRequest<Resource>(vg) {
54
55                         @Override
56                         public Resource perform(WriteGraph graph) throws DatabaseException {
57
58                                 return BTreeUtils.create(graph, null, NODE_SIZE, false).getTree();
59
60                         }
61
62                 });
63
64                 System.err.println("tree=" + tree);
65
66                 for(int i=0;i<ROUNDS;i++) {
67
68                         long start = System.nanoTime();
69
70                         final Collection<Pair<Variant, Resource>> values = session.sync(new WriteOnlyResultRequest<Collection<Pair<Variant, Resource>>>(vg) {
71
72                                 @Override
73                                 public Collection<Pair<Variant, Resource>> perform(WriteOnlyGraph graph) throws DatabaseException {
74
75                                         Collection<Pair<Variant, Resource>> values = new ArrayList<Pair<Variant, Resource>>();
76                                         for(int i=0;i<KEY_SIZE;i++) {
77                                                 Resource value = graph.newResource();
78                                                 graph.claim(value, L0.InstanceOf, null, L0.String);
79                                                 graph.claimValue(value, "Value" + i, Bindings.STRING);
80                                                 values.add(Pair.make(Variant.ofInstance(i), value));
81                                         }
82                                         return values;
83
84                                 }
85
86                         });
87
88                         long duration = System.nanoTime()-start;
89                         System.err.println("DATA at " + 1e-9*duration + "s.");
90                         start = System.nanoTime();
91
92                         session.sync(new WriteRequest(vg) {
93
94                                 @Override
95                                 public void perform(WriteGraph graph) throws DatabaseException {
96
97                                         BTreeUtils bu = BTreeUtils.create(graph, tree, NODE_SIZE, false);
98                                         bu.insertAll(graph, values);
99
100                                 }
101
102                         });
103
104                         duration = System.nanoTime()-start;
105                         System.err.println("INSERT at " + 1e-9*duration + "s.");
106
107                 }
108
109         }
110
111 }