It depends on your use case but do you actually need to generate rules each 
time? Or could you have a static set of rules and insert extra data in your 
working memory to simulate each of the rules?

If your scenario was you have different pricing rules for different customers 
and your data was something like the following:
Customer, Discount
A, 0.9
B, 0.89
C. 0.95

You could either generate 3 rules:

Rule "Customer A pricing"
When
                P: Purchase(customer == "A", finalPrice == null)
Then
                Modify(p) {
                                p.setFinalPrice(p.getPrice()*0.9);
}
End

Rule "Customer B pricing"
When
                P: Purchase(customer == "B", finalPrice == null)
Then
                Modify(p) {
                                p.setFinalPrice(p.getPrice()*0.89);
}
End

Rule "Customer C pricing"
When
                P: Purchase(customer == "C", finalPrice == null)
Then
                Modify(p) {
                                p.setFinalPrice(p.getPrice()*0.95);
}
End

Or you could insert a CustomerDetails(customer, discount) for each customer and 
have a single rule
Rule "Customer pricing"
When
                C : CustomerDetails()
                P : Purchase(customer == c.name, finalPrice == null)
Then
Modify(p) {
                                p.setFinalPrice(p.getPrice()*c.getDiscount());
}

Don't know if it will help or not - depends on your scenario.

Thomas

From: [email protected] 
[mailto:[email protected]] On Behalf Of Piotr Jedrychowski
Sent: 07 January 2011 14:16
To: Rules Users List
Subject: Re: [rules-users] Speed up inserting of rules into knowledge base

Part:
knowledgeBuilder.add(resource, ResourceType.DRL);
is the most expensive part of my source code - rest of instructions are nothing 
when you compare them to above line.

I cannot serialize the compiled rule packages because rules are generated from 
data read from database and this data isn't static. Data is generated before 
loading rules from files that user can change - so I have to do this:
1) read files (which could be changed by user since last JBoss startup)
2) process files and generate rows for database
3) get rows from database and generate rules for Drools

Rules aren't stored directly into database - I wasn't accurate in my previous 
e-mail. - sorry.



On 2011-01-07 14:00, Corneil du Plessis wrote:
You should only repeat

knowledgeBuilder.add(resource, ResourceType.DRL);

for each rule.

The next thing you can do is to serialize the compiled rule packages.

You should also consider using Guvnor to manage your rules.

On 07/01/2011 14:05, Piotr Jedrychowski wrote:
Hello.

I'm loading a big amount of rules during starting of JBoss (20000 rules). All 
rules (in string format) are available before JBoss startup - they are stored 
into database. Rules are loaded one by one and it takes about 90 minutes. I 
want to speed up this process. Is there something like "bulk load" for 
inserting rules into knowledge base or another smart way to fast loading a big 
amount of rules?

I'm using:
1) Drools 5.1
2) JBoss 4.2.3

My source code looks like this:

String rule = ...
Resource resource = ResourceFactory.newReaderResource(new StringReader(rule));
KnowledgeBuilder knowledgeBuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
knowledgeBuilder.add(resource, ResourceType.DRL);
knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());

Regards,
Piotr




_______________________________________________

rules-users mailing list

[email protected]<mailto:[email protected]>

https://lists.jboss.org/mailman/listinfo/rules-users





_______________________________________________

rules-users mailing list

[email protected]<mailto:[email protected]>

https://lists.jboss.org/mailman/listinfo/rules-users

________________________________

**************************************************************************************
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
[email protected] 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
**************************************************************************************
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to