Revision: 146
http://polepos.svn.sourceforge.net/polepos/?rev=146&view=rev
Author: patrickroemer
Date: 2010-11-29 15:35:16 +0000 (Mon, 29 Nov 2010)
Log Message:
-----------
cr/pr - first store/read implementations for complex circuit
Modified Paths:
--------------
trunk/polepos/settings/Circuits.properties
trunk/polepos/settings/DebugCircuits.properties
trunk/polepos/src/org/polepos/circuits/complex/Complex.java
trunk/polepos/src/org/polepos/data/ComplexHolder0.java
trunk/polepos/src/org/polepos/data/ComplexHolder1.java
trunk/polepos/src/org/polepos/data/ComplexHolder2.java
trunk/polepos/src/org/polepos/data/ComplexHolder3.java
trunk/polepos/src/org/polepos/data/ComplexHolder4.java
trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
Added Paths:
-----------
trunk/polepos/src/org/polepos/data/ComplexRoot.java
Modified: trunk/polepos/settings/Circuits.properties
===================================================================
--- trunk/polepos/settings/Circuits.properties 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/settings/Circuits.properties 2010-11-29 15:35:16 UTC (rev 146)
@@ -37,7 +37,16 @@
inheritancehierarchy.objects=3000,10000,30000
inheritancehierarchy.selects=100,100,100
+# complex
+#
+# [objects]: number of objects to select from
+# [selects]: number of queries run against all objects
+complex.depth=3,4,5
+complex.objects=5,5,5
+complex.selects=100,100,100
+
+
# Settings for all circuits in the database benchmark.
# melbourne
Modified: trunk/polepos/settings/DebugCircuits.properties
===================================================================
--- trunk/polepos/settings/DebugCircuits.properties 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/settings/DebugCircuits.properties 2010-11-29 15:35:16 UTC (rev 146)
@@ -37,7 +37,14 @@
inheritancehierarchy.objects=100,300,1000
inheritancehierarchy.selects=10,10,10
+# complex
+#
+# [objects]: number of objects to select from
+# [selects]: number of queries run against all objects
+complex.depth=3,4,5
+complex.objects=5,5,5
+complex.selects=100,100,100
# Settings for the database benchmark
# with short test runs for debugging only
Modified: trunk/polepos/src/org/polepos/circuits/complex/Complex.java
===================================================================
--- trunk/polepos/src/org/polepos/circuits/complex/Complex.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/circuits/complex/Complex.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -22,6 +22,7 @@
import org.polepos.framework.*;
+@CircuitDescription("write, read, query, update and delete complex object graph")
public interface Complex {
@Order(1)
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder0.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -22,78 +22,150 @@
import java.util.*;
+import org.polepos.framework.*;
+
import com.db4o.foundation.*;
-public class ComplexHolder0 {
+public class ComplexHolder0 implements CheckSummable {
- private ComplexHolder0 _child;
+ private ComplexHolder0 _previous;
private String _name;
- private List<ComplexHolder0> _children;
+ private List<ComplexHolder0> _children = new ArrayList<ComplexHolder0>();
private ComplexHolder0[] _array;
+ public static void main(String[] args) {
+ ComplexHolder0 root = generate(10, 1);
+ System.out.println(root.checkSum());
+ }
public static ComplexHolder0 generate(int depth, int leafs){
ComplexHolder0 complexHolder = new ComplexHolder0();
- complexHolder._children = new ArrayList<ComplexHolder0>();
complexHolder._name = "root";
- complexHolder._child = new ComplexHolder0();
- createChildren(depth -1, leafs);
+ complexHolder._previous = complexHolder;
+ createChildren(complexHolder, depth -1, leafs);
return complexHolder;
}
- private static void createChildren(int depth, int leafs) {
+ private static void createChildren(ComplexHolder0 root, int depth, int numChildren) {
if(depth < 1){
return;
}
- // _array = new ComplexHolder0[depth];
-
+ int factoryIdx = 0;
+ int holderIdx = 0;
+ List<ComplexHolder0> parentLevel = Arrays.asList(root);
for (int i = 0; i < depth; i++) {
+ Closure4<ComplexHolder0> curFactory = FACTORIES[factoryIdx];
+ List<ComplexHolder0> childLevel = new ArrayList<ComplexHolder0>();
+
+ ComplexHolder0 previous = null;
+ for (ComplexHolder0 curParent : parentLevel) {
+ for (int childIdx = 0; childIdx < numChildren; childIdx++) {
+ ComplexHolder0 curChild = curFactory.run();
+ curChild._name = String.valueOf(holderIdx);
+ curChild._previous = previous;
+ curChild._array = createArray(holderIdx);
+ curParent.addChild(curChild);
+ childLevel.add(curChild);
+ previous = curChild;
+ holderIdx++;
+ }
+ }
+
+ parentLevel = childLevel;
-
-
+ factoryIdx++;
+ if(factoryIdx == FACTORIES.length) {
+ factoryIdx = 0;
+ }
}
- // TODO Auto-generated method stub
}
+ private static ComplexHolder0[] createArray(int holderIdx) {
+ ComplexHolder0[] holders = new ComplexHolder0[] {
+ new ComplexHolder0(),
+ new ComplexHolder1(),
+ new ComplexHolder2(),
+ new ComplexHolder3(),
+ new ComplexHolder4(),
+ };
+ for (int i = 0; i < holders.length; i++) {
+ holders[i]._name = "a" + holderIdx + "_" + i;
+ }
+ return holders;
+ }
+ private void addChild(ComplexHolder0 child) {
+ _children.add(child);
+ }
+
+
private static final Closure4[] FACTORIES = {
- new Closure4(){
+ new Closure4<ComplexHolder0>(){
@Override
- public Object run() {
+ public ComplexHolder0 run() {
return new ComplexHolder0();
}
},
- new Closure4(){
+ new Closure4<ComplexHolder0>(){
@Override
- public Object run() {
+ public ComplexHolder0 run() {
return new ComplexHolder1();
}
},
- new Closure4(){
+ new Closure4<ComplexHolder0>(){
@Override
- public Object run() {
+ public ComplexHolder0 run() {
return new ComplexHolder2();
}
},
- new Closure4(){
+ new Closure4<ComplexHolder0>(){
@Override
- public Object run() {
+ public ComplexHolder0 run() {
return new ComplexHolder3();
}
},
- new Closure4(){
+ new Closure4<ComplexHolder0>(){
@Override
- public Object run() {
+ public ComplexHolder0 run() {
return new ComplexHolder4();
}
}
};
+ @Override
+ public long checkSum() {
+ return internalCheckSum(new IdentityHashMap<ComplexHolder0, ComplexHolder0>());
+ }
+ private long internalCheckSum(IdentityHashMap<ComplexHolder0, ComplexHolder0> visited) {
+ if(visited.containsKey(this)) {
+ return 0;
+ }
+ visited.put(this, this);
+ long checkSum = internalCheckSum();
+ for (ComplexHolder0 child : _children) {
+ checkSum += child.internalCheckSum(visited);
+ }
+ if(_array != null) {
+ for (ComplexHolder0 child : _array) {
+ checkSum += child.internalCheckSum(visited);
+ }
+ }
+ if(_previous != null) {
+ checkSum += _previous.internalCheckSum(visited);
+ }
+ return checkSum;
+ }
+
+ protected long internalCheckSum() {
+ return _name.hashCode();
+ }
+
+
}
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder1.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder1.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder1.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -20,6 +20,12 @@
package org.polepos.data;
-public class ComplexHolder1 {
+public class ComplexHolder1 extends ComplexHolder0 {
+
+ private int _i1;
+
+ protected long internalCheckSum() {
+ return _i1 + super.internalCheckSum();
+ }
}
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder2.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder2.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder2.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -20,6 +20,12 @@
package org.polepos.data;
-public class ComplexHolder2 {
+public class ComplexHolder2 extends ComplexHolder1 {
+
+ private int _i2;
+
+ protected long internalCheckSum() {
+ return _i2 + super.internalCheckSum();
+ }
}
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder3.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder3.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder3.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -20,6 +20,12 @@
package org.polepos.data;
-public class ComplexHolder3 {
+public class ComplexHolder3 extends ComplexHolder2 {
+
+ private int _i3;
+
+ protected long internalCheckSum() {
+ return _i3 + super.internalCheckSum();
+ }
}
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder4.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder4.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder4.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -20,6 +20,12 @@
package org.polepos.data;
-public class ComplexHolder4 {
+public class ComplexHolder4 extends ComplexHolder3 {
+ private int _i4;
+
+ protected long internalCheckSum() {
+ return _i4 + super.internalCheckSum();
+ }
+
}
Added: trunk/polepos/src/org/polepos/data/ComplexRoot.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexRoot.java (rev 0)
+++ trunk/polepos/src/org/polepos/data/ComplexRoot.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -0,0 +1,31 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.data;
+
+public class ComplexRoot {
+
+ public ComplexHolder0 _holder;
+
+ public ComplexRoot(ComplexHolder0 holder) {
+ _holder = holder;
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/data/ComplexRoot.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -23,22 +23,27 @@
import org.polepos.circuits.complex.*;
import org.polepos.data.*;
+import com.db4o.*;
import com.db4o.config.*;
public class ComplexDb4o extends Db4oDriver implements Complex {
@Override
public void write() {
-
ComplexHolder0 root = ComplexHolder0.generate(depth(), objectCount());
- store(root);
-
+ store(new ComplexRoot(root));
+ addToCheckSum(root);
}
@Override
public void read() {
- // TODO Auto-generated method stub
-
+ ObjectSet<ComplexRoot> result = db().query(ComplexRoot.class);
+ if(result.size() != 1) {
+ throw new IllegalStateException();
+ }
+ ComplexHolder0 holder = result.get(0)._holder;
+ db().activate(holder, Integer.MAX_VALUE);
+ addToCheckSum(holder);
}
@Override
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2010-11-29 14:16:04 UTC (rev 145)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2010-11-29 15:35:16 UTC (rev 146)
@@ -52,6 +52,7 @@
addDriver(new FlatObjectDb4o());
addDriver(new NestedListsDb4o());
addDriver(new InheritanceHierarchyDb4o());
+ addDriver(new ComplexDb4o());
addDriver(new MelbourneDb4o());
addDriver(new SepangDb4o());
addDriver(new BahrainDb4o());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|