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-performance-tp4028244.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to