Thanks W,
<br />
<br />I tried it out ,But didn't get any performance improvement :(
<br />The issue might be that I am inserting too many objects into working memory
<br />
<br />jayadevan
<br />
<br />On Jun 1, 2009 3:36pm, Wolfgang Laun <wolfgang.laun@gmail.com> wrote:
<br />> The first two patterns pair each driver assignment with each trip -
<br />>
<br />>
<br />> which is quite a lot of work to do. (The infix "and" between the 2nd
<br />>
<br />>
<br />> and 3rd pattern doesn't change this.) Also, the field restriction
<br />>
<br />>
<br />> "tripId in ($tid)" is not the most efficient way.
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> Try this:
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> rule "Assignment Check"
<br />>
<br />>
<br />> when
<br />>
<br />>
<br />> $creVo: DriverAssignVO($drId: driverId, $tid1: tripId)
<br />>
<br />>
<br />> $creVo: DriverAssignVO(driverId == $drId, $tid2: tripId != $tid1)
<br />>
<br />>
<br />> $trAsgn1: TripVO( tripId == $tid1, $startDtmUtc: startDtmUtc,
<br />>
<br />>
<br />> $endDtmUtc: endDtmUtc)
<br />>
<br />>
<br />> $trAsgn2: TripVO( tripId == $tid2,
<br />>
<br />>
<br />> ((startDtmUtc >= $startDtmUtc && startDtmUtc
<br />>
<br />> (endDtmUtc >= $startDtmUtc && endDtmUtc
<br />>
<br />> then
<br />>
<br />>
<br />> System.out.println("TRIP ID: " + $crvo.getTripId());
<br />>
<br />>
<br />> end
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> Here the first two patterns produce all pairs of assignments of a
<br />>
<br />>
<br />> single driver, and the remainder checks for overlaps.
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> You'll also find that this produces two symmetric firings for each
<br />>
<br />>
<br />> overlap. It might be possible to avoid this by using "$tid2: tripId >
<br />>
<br />>
<br />> $tid1" in the second pattern, the id's data type permitting.
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> -W
<br />>
<br />>
<br />>
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> 2009/6/1 Mark Proctor mproctor@redhat.com>:
<br />>
<br />>
<br />> > Please send these emails to the user list (in cc) so everyone can help, not
<br />>
<br />>
<br />> > directly to me.
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Mark
<br />>
<br />>
<br />> > jayadevan m wrote:
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Hi
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > We have one performance(memory) issue in drools-5
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Our Scenario
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > We have 3 entities
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Trip - Entity representing details about trip
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Driver - Entity for driver , it contain details about driver
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Assignments - details about each assignments (one driver may assigned to
<br />>
<br />>
<br />> > many trip)
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > The rule is to find ,"Find overlapping between trip assignments"
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > For Implementing this we take the Trip ,Driver And Assignments entities
<br />>
<br />>
<br />> > from Data base and put it into working memory
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > For Small number of records this rule work well ,
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > But we want to check it against 15000 driver ,331176 assignments and 12745
<br />>
<br />>
<br />> > trips
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > In that case it take huge amount of time for execution (rule firing )
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > Rule is
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > rule "Assignment Check"
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > when
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $creVo: DriverAssignVO($drId: driverId ,$tid: tripId);
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $tripAssignment: TripVO(
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $tpid: tripId,
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $startDtmUtc: startDtmUtc,
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $endDtmUtc: endDtmUtc)
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > and
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $trvo: TripVO(
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > tripId != $tpid,
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > tripId in ($tid),
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > ((startDtmUtc >= $startDtmUtc && startDtmUtc
<br />>
<br />> > $endDtmUtc) ||
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > (endDtmUtc >= $startDtmUtc && endDtmUtc
<br />>
<br />> > $endDtmUtc)));
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > $crvo: DriverAssignVO($drvrId: driverId , driverId == $drId ,
<br />>
<br />>
<br />> > tripId != $tid, tripId == $tpid)
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > then
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > System.out.println("TRIP ID: " + $crvo.getTripId());
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > end
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > thanks and regards
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> > _______________________________________________
<br />>
<br />>
<br />> > rules-users mailing list
<br />>
<br />>
<br />> > rules-users@lists.jboss.org
<br />>
<br />>
<br />> > https://lists.jboss.org/mailman/listinfo/rules-users
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />> >
<br />>
<br />>
<br />>
<br />>
<br />>
<br />> _______________________________________________
<br />>
<br />>
<br />> rules-users mailing list
<br />>
<br />>
<br />> rules-users@lists.jboss.org
<br />>
<br />>
<br />> https://lists.jboss.org/mailman/listinfo/rules-users
<br />>
<br />>
<br />>