From: <jbo...@li...> - 2006-04-20 04:06:43
|
Author: woolfel Date: 2006-04-20 00:06:39 -0400 (Thu, 20 Apr 2006) New Revision: 3835 Added: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetLoad.java labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetPerformance.java Removed: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetBenchmark.java Modified: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/GenerateRuleSet.java Log: I renamed the RulesetBenchmark to RulesetLoad and added another unit test to measure assert/fire performance. peter Modified: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/GenerateRuleSet.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/GenerateRuleSet.java 2006-04-20 04:05:10 UTC (rev 3834) +++ labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/GenerateRuleSet.java 2006-04-20 04:06:39 UTC (rev 3835) @@ -39,8 +39,8 @@ for (int idx=0; idx < count; idx++) { buf.append("rule rule" + idx + "" + linebreak); buf.append(" when" + linebreak); - buf.append(" $acc : Account(status == \"standard\", title == \"mr\")" - + linebreak); + buf.append(" $acc : Account(status == \"standard\", title == \"mr\", accountId == \"acc" + idx + + "\")" + linebreak); buf.append(" then" + linebreak); buf.append(" System.out.println(\"rule" + idx + " fired\");" + linebreak); buf.append("end" + linebreak + linebreak); Deleted: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetBenchmark.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetBenchmark.java 2006-04-20 04:05:10 UTC (rev 3834) +++ labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetBenchmark.java 2006-04-20 04:06:39 UTC (rev 3835) @@ -1,67 +0,0 @@ -package com.sample.benchmark; - -import junit.framework.TestCase; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Reader; - -import org.drools.PackageIntegrationException; -import org.drools.RuleBase; -import org.drools.RuleIntegrationException; -import org.drools.WorkingMemory; -import org.drools.compiler.DrlParser; -import org.drools.compiler.DroolsParserException; -import org.drools.compiler.PackageBuilder; -import org.drools.lang.descr.PackageDescr; -import org.drools.reteoo.RuleBaseImpl; -import org.drools.rule.InvalidPatternException; -import org.drools.rule.Package; - -/** - * @author Peter Lin - * - */ -public class RuleSetBenchmark extends TestCase { - public RuleSetBenchmark() { - super(); - } - - public void setUp() { - - } - - public void tearDown() { - - } - - private static RuleBase readRule() throws IOException, DroolsParserException, RuleIntegrationException, PackageIntegrationException, InvalidPatternException { - //read in the source - Reader reader = new InputStreamReader( RuleSetBenchmark.class.getResourceAsStream( "1000_rules.drl" ) ); - DrlParser parser = new DrlParser(); - PackageDescr packageDescr = parser.parse( reader ); - - //pre build the package - PackageBuilder builder = new PackageBuilder(); - builder.addPackage( packageDescr ); - Package pkg = builder.getPackage(); - - //add the package to a rulebase - RuleBaseImpl ruleBase = new RuleBaseImpl(); - ruleBase.addPackage( pkg ); - return ruleBase; - } - - public void testOneThousand() { - try { - long loadStart = System.currentTimeMillis(); - RuleBase ruleBase = readRule(); - long loadEnd = System.currentTimeMillis(); - System.out.println("time to load 1000 rules " + - (loadEnd - loadStart) + "ms"); - WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} Added: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetLoad.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetLoad.java 2006-04-20 04:05:10 UTC (rev 3834) +++ labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetLoad.java 2006-04-20 04:06:39 UTC (rev 3835) @@ -0,0 +1,89 @@ +package com.sample.benchmark; + +import junit.framework.TestCase; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Iterator; + +import org.drools.PackageIntegrationException; +import org.drools.RuleBase; +import org.drools.RuleIntegrationException; +import org.drools.WorkingMemory; +import org.drools.compiler.DrlParser; +import org.drools.compiler.DroolsParserException; +import org.drools.compiler.PackageBuilder; +import org.drools.lang.descr.PackageDescr; +import org.drools.reteoo.RuleBaseImpl; +import org.drools.rule.InvalidPatternException; +import org.drools.rule.Package; + +import com.sample.benchmark.models.Account; + +/** + * @author Peter Lin + * + */ +public class RuleSetLoad extends TestCase { + public RuleSetLoad() { + super(); + } + + public void setUp() { + + } + + public void tearDown() { + + } + + private static RuleBase readRule(String file) throws IOException, DroolsParserException, RuleIntegrationException, PackageIntegrationException, InvalidPatternException { + //read in the source + Reader reader = + new InputStreamReader( + RuleSetLoad.class.getResourceAsStream( file ) ); + DrlParser parser = new DrlParser(); + PackageDescr packageDescr = parser.parse( reader ); + + //pre build the package + PackageBuilder builder = new PackageBuilder(); + builder.addPackage( packageDescr ); + Package pkg = builder.getPackage(); + + //add the package to a rulebase + RuleBaseImpl ruleBase = new RuleBaseImpl(); + ruleBase.addPackage( pkg ); + return ruleBase; + } + + public void testOneThousandLoad() { + try { + String file = "1000_rules.drl"; + long loadStart = System.currentTimeMillis(); + RuleBase ruleBase = readRule(file); + long loadEnd = System.currentTimeMillis(); + System.out.println("time to load " + file + + " " + (loadEnd - loadStart) + "ms"); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void testFourThousandLoad() { + try { + String file = "4000_rules.drl"; + long loadStart = System.currentTimeMillis(); + RuleBase ruleBase = readRule(file); + long loadEnd = System.currentTimeMillis(); + System.out.println("time to load " + file + + " " + (loadEnd - loadStart) + "ms"); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} Added: labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetPerformance.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetPerformance.java 2006-04-20 04:05:10 UTC (rev 3834) +++ labs/jbossrules/trunk/drools-examples/src/java/com/sample/benchmark/RuleSetPerformance.java 2006-04-20 04:06:39 UTC (rev 3835) @@ -0,0 +1,237 @@ +package com.sample.benchmark; + +import junit.framework.TestCase; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Iterator; + +import org.drools.PackageIntegrationException; +import org.drools.RuleBase; +import org.drools.RuleIntegrationException; +import org.drools.WorkingMemory; +import org.drools.compiler.DrlParser; +import org.drools.compiler.DroolsParserException; +import org.drools.compiler.PackageBuilder; +import org.drools.lang.descr.PackageDescr; +import org.drools.reteoo.RuleBaseImpl; +import org.drools.rule.InvalidPatternException; +import org.drools.rule.Package; + +import com.sample.benchmark.models.Account; + +/** + * @author Peter Lin + * + */ +public class RuleSetPerformance extends TestCase { + public RuleSetPerformance() { + super(); + } + + public void setUp() { + + } + + public void tearDown() { + + } + + private static RuleBase readRule(String file) throws IOException, DroolsParserException, RuleIntegrationException, PackageIntegrationException, InvalidPatternException { + //read in the source + Reader reader = + new InputStreamReader( + RuleSetPerformance.class.getResourceAsStream( file ) ); + DrlParser parser = new DrlParser(); + PackageDescr packageDescr = parser.parse( reader ); + + //pre build the package + PackageBuilder builder = new PackageBuilder(); + builder.addPackage( packageDescr ); + Package pkg = builder.getPackage(); + + //add the package to a rulebase + RuleBaseImpl ruleBase = new RuleBaseImpl(); + ruleBase.addPackage( pkg ); + return ruleBase; + } + + /** + * test the performance with 50 facts and 5 rules. The test measures + * the load, assert and fire time. + */ + public void testFiveRuleFire() { + try { + int factCount = 50000; + String file = "5_rules.drl"; + int loop = 5; + long totalload = 0; + long totalassert = 0; + long totalfire = 0; + for (int c=0; c < loop; c++) { + long loadStart = System.currentTimeMillis(); + RuleBase ruleBase = readRule(file); + long loadEnd = System.currentTimeMillis(); + long loadet = loadEnd - loadStart; + totalload += loadet; + System.out.println("time to load " + file + + " " + loadet + "ms"); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + ArrayList objects = new ArrayList(); + // create the objects + for (int idx=0; idx < factCount; idx++) { + Account acc = new Account(); + acc.setAccountId("acc"+idx); + acc.setTitle("mr"); + acc.setStatus("standard"); + objects.add(acc); + } + Iterator itr = objects.iterator(); + long assertStart = System.currentTimeMillis(); + while( itr.hasNext() ) { + workingMemory.assertObject(itr.next()); + } + long assertEnd = System.currentTimeMillis(); + long assertet = assertEnd - assertStart; + totalassert += assertet; + System.out.println("time to assert " + assertet + + " ms"); + long fireStart = System.currentTimeMillis(); + workingMemory.fireAllRules(); + long fireEnd = System.currentTimeMillis(); + long fireet = fireEnd - fireStart; + totalfire += fireet; + System.out.println("time to fireAllRules " + fireet + + " ms"); + workingMemory.dispose(); + } + System.out.println(file); + System.out.println("number of objects asserted " + factCount); + System.out.println("average load " + (totalload/loop) + " ms"); + System.out.println("average assert " + (totalassert/loop) + " ms"); + System.out.println("average fire " + (totalfire/loop) + " ms"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * + */ + public void testFiftyRuleFire() { + try { + int factCount = 50000; + String file = "50_rules.drl"; + int loop = 5; + long totalload = 0; + long totalassert = 0; + long totalfire = 0; + for (int c=0; c < loop; c++) { + long loadStart = System.currentTimeMillis(); + RuleBase ruleBase = readRule(file); + long loadEnd = System.currentTimeMillis(); + long loadet = loadEnd - loadStart; + totalload += loadet; + System.out.println("time to load " + file + + " " + loadet + "ms"); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + ArrayList objects = new ArrayList(); + // create the objects + for (int idx=0; idx < factCount; idx++) { + Account acc = new Account(); + acc.setAccountId("acc"+idx); + acc.setTitle("mr"); + acc.setStatus("standard"); + objects.add(acc); + } + Iterator itr = objects.iterator(); + long assertStart = System.currentTimeMillis(); + while( itr.hasNext() ) { + workingMemory.assertObject(itr.next()); + } + long assertEnd = System.currentTimeMillis(); + long assertet = assertEnd - assertStart; + totalassert += assertet; + System.out.println("time to assert " + assertet + + " ms"); + long fireStart = System.currentTimeMillis(); + workingMemory.fireAllRules(); + long fireEnd = System.currentTimeMillis(); + long fireet = fireEnd - fireStart; + totalfire += fireet; + System.out.println("time to fireAllRules " + fireet + + " ms"); + workingMemory.dispose(); + } + System.out.println(file); + System.out.println("number of objects asserted " + factCount); + System.out.println("average load " + (totalload/loop) + " ms"); + System.out.println("average assert " + (totalassert/loop) + " ms"); + System.out.println("average fire " + (totalfire/loop) + " ms"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * + */ + public void testFiveHundredRuleFire() { + try { + int factCount = 50000; + String file = "500_rules.drl"; + int loop = 5; + long totalload = 0; + long totalassert = 0; + long totalfire = 0; + for (int c=0; c < loop; c++) { + long loadStart = System.currentTimeMillis(); + RuleBase ruleBase = readRule(file); + long loadEnd = System.currentTimeMillis(); + long loadet = loadEnd - loadStart; + totalload += loadet; + System.out.println("time to load " + file + + " " + loadet + "ms"); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + ArrayList objects = new ArrayList(); + // create the objects + for (int idx=0; idx < factCount; idx++) { + Account acc = new Account(); + acc.setAccountId("acc"+idx); + acc.setTitle("mr"); + acc.setStatus("standard"); + objects.add(acc); + } + Iterator itr = objects.iterator(); + long assertStart = System.currentTimeMillis(); + while( itr.hasNext() ) { + workingMemory.assertObject(itr.next()); + } + long assertEnd = System.currentTimeMillis(); + long assertet = assertEnd - assertStart; + totalassert += assertet; + System.out.println("time to assert " + assertet + + " ms"); + long fireStart = System.currentTimeMillis(); + workingMemory.fireAllRules(); + long fireEnd = System.currentTimeMillis(); + long fireet = fireEnd - fireStart; + totalfire += fireet; + System.out.println("time to fireAllRules " + fireet + + " ms"); + workingMemory.dispose(); + } + System.out.println(file); + System.out.println("number of objects asserted " + factCount); + System.out.println("average load " + (totalload/loop) + " ms"); + System.out.println("average assert " + (totalassert/loop) + " ms"); + System.out.println("average fire " + (totalfire/loop) + " ms"); + } catch (Exception e) { + e.printStackTrace(); + } + } +} |