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