Thanks W,

I tried it out ,But didn't get any performance improvement :(
The issue might be that I am inserting too many objects into working memory

jayadevan

On Jun 1, 2009 3:36pm, Wolfgang Laun <[email protected]> wrote:
The first two patterns pair each driver assignment with each trip -


which is quite a lot of work to do. (The infix "and" between the 2nd


and 3rd pattern doesn't change this.) Also, the field restriction


"tripId in ($tid)" is not the most efficient way.





Try this:





rule "Assignment Check"


when


$creVo: DriverAssignVO($drId: driverId, $tid1: tripId)


$creVo: DriverAssignVO(driverId == $drId, $tid2: tripId != $tid1)


$trAsgn1: TripVO( tripId == $tid1, $startDtmUtc: startDtmUtc,


$endDtmUtc: endDtmUtc)


$trAsgn2: TripVO( tripId == $tid2,


((startDtmUtc >= $startDtmUtc && startDtmUtc

(endDtmUtc >= $startDtmUtc && endDtmUtc

then


System.out.println("TRIP ID: " + $crvo.getTripId());


end





Here the first two patterns produce all pairs of assignments of a


single driver, and the remainder checks for overlaps.





You'll also find that this produces two symmetric firings for each


overlap. It might be possible to avoid this by using "$tid2: tripId >


$tid1" in the second pattern, the id's data type permitting.





-W








2009/6/1 Mark Proctor [email protected]>:


> Please send these emails to the user list (in cc) so everyone can help, not


> directly to me.


>


> Mark


> jayadevan m wrote:


>


> Hi


>


> We have one performance(memory) issue in drools-5


>


> Our Scenario


>


> We have 3 entities


>


> Trip - Entity representing details about trip


>


> Driver - Entity for driver , it contain details about driver


>


> Assignments - details about each assignments (one driver may assigned to


> many trip)


>


> The rule is to find ,"Find overlapping between trip assignments"


>


> For Implementing this we take the Trip ,Driver And Assignments entities


> from Data base and put it into working memory


>


> For Small number of records this rule work well ,


>


> But we want to check it against 15000 driver ,331176 assignments and 12745


> trips


>


> In that case it take huge amount of time for execution (rule firing )


>


>


>


> Rule is


>


> rule "Assignment Check"


>


> when


>


> $creVo: DriverAssignVO($drId: driverId ,$tid: tripId);


>


> $tripAssignment: TripVO(


>


> $tpid: tripId,


>


> $startDtmUtc: startDtmUtc,


>


> $endDtmUtc: endDtmUtc)


>


> and


>


> $trvo: TripVO(


>


> tripId != $tpid,


>


> tripId in ($tid),


>


> ((startDtmUtc >= $startDtmUtc && startDtmUtc

> $endDtmUtc) ||


>


> (endDtmUtc >= $startDtmUtc && endDtmUtc

> $endDtmUtc)));


>


> $crvo: DriverAssignVO($drvrId: driverId , driverId == $drId ,


> tripId != $tid, tripId == $tpid)


>


> then


>


> System.out.println("TRIP ID: " + $crvo.getTripId());


>


> end


>


>


>


> thanks and regards


>


> _______________________________________________


> 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



_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to