How to use Drools High-Performance with Large Data..?

We’re in early stages of a project and try to decide how to proceed. We are aimed to make 15 millions requests per day to the business rule engine. The business rule engine is going to require some large data stored on a no-sql database to decide which rule in the drl file is satisfied.

My first approach was to use Drools as embedded within a Java application. So, data will be fetched on the Java App and the rule engine will access it directly.

I read about KIE execution server to be easily scalable. Another approach would be to use KIE Execution Server but it seems I would have to fetch the data in Java App and transfer it to the KIE server via Java Client API or REST API. I believe there’ll be performance problems due to data transfer overhead. Is there any way for me to include a custom java library inside KIE Execution Server so that I’ll be able to fetch data from a database and access it within drl files.

In short words, I’ll need Drools to work high-performance using a large data stored on a DB. What would be the best way to proceed, embedded Drools within a Java App, KIE Execution Server, or something else?

If you are worried about transferring large amount of objects over the wire, you could use a rule inside the kjar you are executing in the KIE Server to retrieve that data for you.

You can have this rule in a specific agenda-group or have some kind of guard fact so you can control when you want to execute it.

Remember that the KIE Server executes kjars. A kjar is basically a jar file containing a maven-like structure where rules, classes and dependencies can be defined and used.

Hope it helps,