[rules-users] Execution time for drools5.0 against large data size

ABRA2 rabarna at archstone.in
Wed Nov 4 09:15:14 EST 2009


Hi

 I would like to test the time taken to run a single rule (eg.
HelloWorldExample from Drools5.0 documentation) against large data size (i.e
the object inserted in ksession is 10,000). The .drl file is loaded only
once and i am looping the part where message object is created and set with
values and inserted into ksession for 10,000 times. The time taken was 10.7
secs on an average. Am i doing something wrong? Can i improve it in anyway?
Your help is appreciated.
thanks
ABRA

HelloWorld.drl :

package org.drools.examples
 
import org.drools.examples.HelloWorldExample.Message;

global java.util.List list
 
rule "Hello World"
    dialect "mvel"
	when
		m : Message( status == Message.HELLO, message : message)
	then
	System.out.println( message ); 
	modify ( m ) { message = "Goodbye cruel world",
	               status = Message.GOODBYE };	               
end
rule "Good Bye"
    dialect "java"
	when
		Message( status == Message.GOODBYE, message : message )
	then
		System.out.println( message ); 	
end



HelloWorldExample.java
/**
 * This is a sample file to launch a rule package from a rule source file.
 */
public class HelloWorldExample {
	
	public static final void main(final String[] args) throws Exception {
		final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
				.newKnowledgeBuilder();

		// this will parse and compile in one step
		kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld.drl",
				HelloWorldExample.class), ResourceType.DRL);

		// Check the builder for errors
		if (kbuilder.hasErrors()) {
			System.out.println(kbuilder.getErrors().toString());
			throw new RuntimeException("Unable to compile \"HelloWorld.drl\".");
		}

		// get the compiled packages (which are serializable)
		final Collection<KnowledgePackage> pkgs = kbuilder
				.getKnowledgePackages();

		// add the packages to a knowledgebase (deploy the knowledge packages).
		final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
		kbase.addKnowledgePackages(pkgs);

		final StatefulKnowledgeSession ksession = kbase
				.newStatefulKnowledgeSession();
		ksession.setGlobal("list", new ArrayList());

		ksession.addEventListener(new DebugAgendaEventListener());
		ksession.addEventListener(new DebugWorkingMemoryEventListener());

		// setup the audit logging
		KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
				.newFileLogger(ksession, "log/helloworld");
		long starttime = System.currentTimeMillis();
		for(int u=0;u<10000;u++)
		{
		final Message message = new Message();
			message.setMessage("Hello World");
			message.setStatus(Message.HELLO);
			ksession.insert(message);
			ksession.fireAllRules();
		}
		 long endtime = System.currentTimeMillis();
	        System.out.println("execution time is "+(endtime-starttime));
		logger.close();

		ksession.dispose();
	}

	public static class Message {
		public static final int HELLO = 0;
		public static final int GOODBYE = 1;
		private String message;

		private int status;

		public Message() {

		}

		public String getMessage() {
			return this.message;
		}

		public void setMessage(final String message) {
			this.message = message;
		}

		public int getStatus() {
			return this.status;
		}

		public void setStatus(final int status) {
			this.status = status;
		}
		
		public static Message doSomething(Message message) {
			return message;
		}

		public boolean isSomething(String msg, List list) {
			list.add(this);
			return this.message.equals(msg);
		}
	}

}


-- 
View this message in context: http://old.nabble.com/Execution-time-for-drools5.0-against-large-data-size-tp26195944p26195944.html
Sent from the drools - user mailing list archive at Nabble.com.




More information about the rules-users mailing list