[rules-users] Poor performance from a simple join

Mark Proctor mproctor at codehaus.org
Mon Dec 19 11:59:25 EST 2011


On 19/12/2011 16:58, Mark Proctor wrote:
> sorry I misread that, you've put the binding first, not using a nested 
> accessor.
>
> Currently you have
> $call              : BINNING_INPUT()
> $device_typeLookup : LU_DEVICE_TYPE( $call.device_type == device_type )
>
> try rewriting it as:
> $call              : BINNING_INPUT()
> $device_typeLookup : LU_DEVICE_TYPE( device_type == $call.device_type )
>
> I know edson was working on making such that the order no longer 
> matters, I'm not sure what progress he made on that and he's away at 
> the moment so can't answer. It may be that he's already done that work 
> and it's correctly getting executed as an indexed constraint, or it 
> might be rewritting to an eval. Hopefully edson can answer when he 
> gets back.
>
> Ass Mauricio suggests, maybe you can restrict the number of instances 
> for BINNING_INPUT and LU_DEVICE_TYPE too.
ooops
s/Ass/As/
>
> Mark
>
>
>
>
> On 19/12/2011 16:51, Mark Proctor wrote:
>> Nested accessors are not currently indexed, because we cannot assure 
>> their immutability:
>> $call.device_type
>>
>> If people changed indexed nested accessors, without correctly 
>> notifying the engine it would result in integrity problems.
>>
>> If you have a large number of these, trying flattening the model, 
>> such as you would do in a database.
>>
>> Mark
>> On 19/12/2011 16:23, David Martin wrote:
>>> Folks:
>>>
>>> My co-workers and I have been using Drools to great success, but we 
>>> ran smack into a performance brick wall recently.
>>>
>>> In the example below, both BINNING_INPUT and LU_DEVICE_TYPE have 
>>> large numbers of associated facts in working memory (BINNING_INPUT 
>>> has more than 8 million facts in working memory, LU_DEVICE_TYPE 
>>> about 10k.)
>>>
>>> LU_DEVICE_TYPE models a lookup table.
>>>
>>> rule "Binning for Attribute: Device_type_desc"
>>>   when
>>>     $call :
>>> BINNING_INPUT()
>>>     $device_typeLookup :
>>> LU_DEVICE_TYPE(
>>>         $call.device_type == device_type
>>>       )
>>>
>>>   then
>>>     $call.setDevice_type_desc($device_typeLookup.getDevice_type_desc());
>>> end
>>>
>>> It's a simple enough rule: join on the device_type field.  
>>> Unfortunately, this rule and a few others like it are taking FOREVER 
>>> to insert.  Even when I cut the number of BINNING_INPUT facts in 
>>> working memory down from 8M to 10k.
>>>
>>> This feels like a basic Drools question.  But I can't seem to find 
>>> any help from google.
>>>
>>> Please advise!
>>>
>>> Thanks in advance,
>>>
>>> Dave Martin
>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20111219/537e005a/attachment.html 


More information about the rules-users mailing list