heh that's my first approach... The memory usage is normal I think, because you are creating a lot of objects and they are kept in memory. Can you share the project that you are using with us? so I can test the performance in my machine? your machine details will be also necessary. Thanks!
2009/9/17 PF <[email protected]> > 2009/9/17 Mauricio Salatino <[email protected]> > >> First of all you can try adding: >> $ae1 :Event(symbol == 1, $Pr1 : price) and >> $ce1 :Event(this != $ae1, symbol == 1, price > ($Pr1/1.2), this after >> $ae1 ) >> >> That will avoid the cross product. >> Post again the result with that. > > Hi Mauricio, > Your advice helped a bit, but not very much (please see below). I also > modified the test for Drools to show the event/sec throughput using Timer > instead of fixed number of events per time. I think it's more helpful this > way. > New run: > No. of events/second is: 7135. > No. of events/second is: 8358. > No. of events/second is: 8218. > No. of events in total is: 23715. > No. of total events/second is: 7905.333333333333 > Memory used:16872192 > > Old rule file: > No. of events/second is: 7441. > No. of events/second is: 8133. > No. of events/second is: 7688. > No. of events in total is: 23263. > No. of total events/second is: 7754.666666666667 > Memory used:16892760 > > Paul. > > >> 2009/9/17 PF <[email protected]> >> >>> Hi guys, >>> We made some experiments with Drools Fusion and we wonder if there is any >>> way to speed it up. In our experiments, we detected complex events in >>> streams of stock tickers and got times significantly slower with Drools than >>> with other CEP systems (and also higher memory consumption in the same order >>> of magnitude): >>> Number of events Drools 5.0 Fusion Esper 3.1.0 Etalis with SWI Prolog >>> Etalis with Yap Prolog >>> 10000 1179 453 328 265 (time in miliseconds to process the stream of >>> events) >>> 20000 2359 828 701 531 >>> 30000 3538 1141 1023 780 >>> 40000 4718 1500 1356 1078 >>> 50000 5897 1813 1702 1329 >>> >>> I can provide some of our code if someone needs it (beside what I pasted >>> below). >>> Please tell me if you know any obvious optimizations? Or if you think >>> this is due to Java (vs. C in other implementations), or any other reasons. >>> Thank you, regards, >>> Paul Fodor >>> Our program has 5 rules to detect complex events: >>> fusion.drl: >>> rule "experiment A -Rule 0/0" >>> when >>> $ae1 :Event(symbol == 1, $Pr1 : price) and >>> $ce1 :Event(this after $ae1 , symbol == 1, price > ($Pr1/1.2) ) >>> then >>> //System.out.println("Ce1 fired !"); >>> end >>> rule "experiment A -Rule 0/1" >>> when >>> ( >>> $ae2 :Event(symbol == 2,$Pr2 : price) and >>> $ce2 : Event(this after $ae2 , symbol == 2,price > ($Pr2/1.2) ) >>> ) >>> then >>> //System.out.println("Ce2 fired !"); >>> end >>> rule "experiment A -Rule1" >>> when >>> ( >>> $ae1 :Event(symbol == 1, $Pr1 : price) and >>> $ce1 :Event(this after $ae1 , symbol == 1, price > ($Pr1/1.2) ) >>> ) >>> or >>> ( >>> $ae2 :Event(symbol == 2,$Pr2 : price) and >>> $ce2 : Event(this after $ae2 , symbol == 2,price > ($Pr2/1.2) ) >>> ) >>> then >>> //System.out.println("Ce3 fired !"); >>> end >>> >>> rule "experiment A -Rule4" >>> when >>> ( >>> $ae1 :Event(symbol == 1, $Pr1 : price) and >>> $ce1 :Event(this after $ae1 , symbol == 1, price > ($Pr1/1.2) ) >>> ) >>> and >>> ( >>> $ae2 :Event(symbol == 2,$Pr2 : price) and >>> $ce2 : Event(this after $ae2 , symbol == 2,price > ($Pr2/1.2) , this >>> after[0,20m] $ce1 ) >>> ) >>> then >>> //System.out.println("Ce4 fired !"); >>> end >>> >>> rule "experiment A -Rule5" >>> when >>> ( >>> $ae1 :Event(symbol == 1, $Pr1 : price) and >>> $ce1 :Event(this after $ae1 , symbol == 1, price > ($Pr1/1.2)) >>> ) >>> and >>> ( >>> $ae2 :Event(symbol == 2,$Pr2 : price) and >>> $ce2 : Event(this after $ae2 , symbol == 2,price > ($Pr2/1.2) , this >>> overlaps $ce1) >>> ) >>> then >>> //System.out.println("Ce5 fired !"); >>> end >>> >>> We have an Event class for events with its parameters and an EventStream >>> class to fire the events: >>> EventStream.java: >>> ... >>> import org.drools.runtime.StatefulKnowledgeSession; >>> public class EventStream { >>> public StatefulKnowledgeSession get_working_session() { return >>> ksession;} >>> ... >>> void generateEventStream(double duration, double p) { >>> ... >>> //Drools >>> Event temp = new Event(symbol,currValue); >>> ksession.insert(temp); >>> ... >>> } >>> } >>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> [email protected] >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >> >> >> -- >> - http://salaboy.wordpress.com >> - http://www.jbug.com.ar >> - Salatino "Salaboy" Mauricio - >> >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > -- - http://salaboy.wordpress.com - http://www.jbug.com.ar - Salatino "Salaboy" Mauricio -
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
