Does the size of objects inserted into the session as facts directly affect
performance?
I have ran some very simple tests, with a kb with 1 rule that
accumulated/collected over all facts in working memory of a type.
If I have a really simple/small class, say SimpleClass
It looks like:
```
rule "collecting"
when
$res : List() from
accumulate( $s : SimpleClass(),
init( List l = new ArrayList(); ),
action( l.add($s); ),
result( l ))
then
System.out.println("Done");
end
```
If I have a more complex class that will result in deeply nested objects,
say ComplexClass
It looks like:
```
rule "collecting"
when
$res : List() from
accumulate( $s : ComplexClass(), // this is the only difference from
above
init( List l = new ArrayList(); ),
action( l.add($s); ),
result( l ))
then
System.out.println("Done");
end
Now my Java test is just a simple one that puts a timer before and after
insert like:
```
// initialize kb and session as usual
// make N number of objects to insert of type SimpleClass or ComplexClass;
depending on test run
// store them in local variable cs
final long start = System.nanoTime();
for (final SimpleClass c : cs) { // This would be ComplexClass when
comparing
ksession.insert(c);
}
final double end = ((System.nanoTime() - start) / 1000000.0);
final int firedRules = ksession.fireAllRules(); // not really needed
here
```
What I notice from these tests, is that for something like N=5000 of
SimpleClass inserted into the session runs quick, say something like 35 sec.
However, for the same N=5000 of ComplexClass inserted into the session, the
time jumps to something like 148 sec.
I haven't done exhaustive performance testing around this, but I am seeing
this in more complex scenarios as well.
I know that heap space (maybe perm space) play a role in this, but I have
monitored my JVM processes during execution and there is no lack of
available heap space and my machine has a lot of resources available still
in both SimpleClass and ComplexClass scenarios.
I am trying to understand if the actual size of an object inserted into the
session has an affect on its overall performance.
This may be a trivial question and I'm just overlooking something, but I'd
appreciate any advice and feedback on this subject. I have not successfully
been able to find any resources on the internet where this has been
explicitly asked to base any thought off of. I also have read up some on
Rete (and variations e.g. Drools), but I don't see how the size of the
objects inserted as facts applies to the insert performance.
Thanks!
--
View this message in context:
http://drools.46999.n3.nabble.com/Object-size-affect-on-session-insertion...
Sent from the Drools: User forum mailing list archive at
Nabble.com.