[rules-users] How to make this rule more memory efficient?

Ryan Fitzgerald ryan.fitzgerald at ericsson.com
Wed Apr 28 04:45:30 EDT 2010


Thanks Wolfgang.

Should I conclude therefore that high memory usage is unavoidable due to the number of facts that must be processed? I was hoping that there might be a clever way of writing the rules so that the rules engine can minimise the network it generates - even if it takes a little longer to execute.

All of the facts are read from a database and thus loaded into working memory. My fallback position is to not load all these objects into working memory but instead embed into a rule, a service call that queries the db for all inconsistencies (effectively using SQL instead of a drools rule). However, since I will have other rules that operate on these objects in working memory, I was hoping to use these facts for all rules.

/Ryan. 

-----Original Message-----
From: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Wolfgang Laun
Sent: 27 April 2010 14:59
To: Rules Users List
Subject: Re: [rules-users] How to make this rule more memory efficient?

If there are n Cell facts,
 $cell1 : Cell()
 $cell2 : Cell()
needs to create n*n pairs in the network before any reduction may set in.
Using
  $cell2 : Cell(this != $cell1)
reduces this by n, so we're still quadratic. Something like
 $cell1 : Cell( $id1 : id )
 $cell2 : Cell( id > $id1 )
reduces it to n*(n-1)/2 which is less than 50% of the original, but still quadratic.

-W

2010/4/26 Swindells, Thomas <TSwindells at nds.com>:
> You should probably restrict it so that
>
> $cell2 : Cell(this != $cell1)
>
>
>
> Thomas
>
>
>
> From: rules-users-bounces at lists.jboss.org
> [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Ryan 
> Fitzgerald
> Sent: 26 April 2010 15:34
> To: rules-users at lists.jboss.org
> Subject: [rules-users] How to make this rule more memory efficient?
>
>
>
> Hi,
>
>
>
> Can anyone advise me on how to make a drools rule more memory efficient?
> Here is the problem:
>
>
>
> I have a Cell and a ProxyCell object classes.
>
>
>
> The ProxyCell represents the Cell when their internal ID's match.
>
>
>
> Each Cell and ProxyCell however has a unique name (not same as ID).
>
>
>
> A Cell can reference (by name) a ProxyCell (as long as the ProxyCell 
> does not represent that actual Cell - which would effectively be a 
> self-reference and is not allowed).
>
>
>
> What I want to do is find out where I have a reference from any 
> instance of Cell - cell1 - to any instance of ProxyCell - proxycell2 - 
> but am missing a reference from cell2 to proxycell1 where proxycell2 
> is a representation of
> cell2 and proxycell1 is a representation of cell1.
>
>
>
> Here is the rule I have written for it:
>
>
>
> rule "Check consistent references"
>
> when
>
>         $cell1 : Cell()
>
>         $cell2 : Cell()
>
>         $proxycell1 : ProxyCell ( id = $cell1.id, $cell2.references 
> contains this.name )
>
>         $proxycell2 : ProxyCell ( id = $cell2.id, $cell1.references 
> not contains this.name )
>
> then
>
>         //report an error.....
>
> end
>
>
>
>
>
> I have 10,000 instances of Cell and 10,000 instances of ProxyCell in 
> working memory. For each instance of Cell, it can have references to 
> 60 different ProxyCell instances. Loading the Cell and ProxyCell 
> instances into working memory is not a problem. However, when I try to 
> run this rule above, the memory quickly goes above 1GB and I eventually get an out of memory error.
>
>
>
> I was wondering if there is a better way to structure or write this 
> rule so that it doesn't use so much memory.
>
>
>
> Thanks,
>
> Ryan.
>
>
>
> ________________________________
> **********************************************************************
> **************** This message is confidential and intended only for 
> the addressee. If you have received this message in error, please 
> immediately notify the postmaster at nds.com and delete it from your 
> system as well as any copies. The content of e-mails as well as 
> traffic data may be monitored by NDS for employment and security 
> purposes. To protect the environment please do not print this e-mail 
> unless necessary.
>
> NDS Limited. Registered Office: One London Road, Staines, Middlesex, 
> TW18 4EX, United Kingdom. A company registered in England and Wales. 
> Registered no. 3080780. VAT no. GB 603 8808 40-00
> **********************************************************************
> ****************
>
> ________________________________
> This message is confidential and intended only for the addressee. If 
> you have received this message in error, please immediately notify the 
> postmaster at nds.com and delete it from your system as well as any 
> copies. The content of e-mails as well as traffic data may be 
> monitored by NDS for employment and security purposes.
> To protect the environment please do not print this e-mail unless necessary.
>
> An NDS Group Limited company. www.nds.com
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




More information about the rules-users mailing list