OK, so a few questions:
What is a CDR? How much data does it contain? Do you load the rules fresh each time you
process one? Are there other rules besides the ones listed in the decision table?
--- On Tue, 5/18/10, Antonio Anderson Souza <antonio(a)voicetechnology.com.br> wrote:
From: Antonio Anderson Souza <antonio(a)voicetechnology.com.br>
Subject: Re: [rules-users] Jbilling Drools performance
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Tuesday, May 18, 2010, 9:49 AM
Dear All,
I've finished the tests with the digit per digit comparison without eval, but the
performance does not increased a lot, it still taking about 1 minute per CDR, that is so
slow for a Telecom Carrier, follow a piece of the new spreadsheet below:
RuleSet
pricing
Sequencial
true
RuleTable Padrao
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
CONDITION
ACTION
PRIORITY
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingField
PricingManager
manager
salience
name
digit0 == '$param'
name
digit1 == '$param'
name
digit2 == '$param'
name
digit3 == '$param'
name
digit4 == '$param'
name
digit5 == '$param'
name
digit6 == '$param'
name
digit7 == '$param'
name
digit8 == '$param'
name
digit9 == '$param'
name
digit10 == '$param'
name
digit11 == '$param'
itemId
setPrice($param)
Campo
Digito1
Campo
Digito2
Campo
Digito3
Campo
Digito4
Campo
Digito5
Campo
Digito6
Campo
Digito7
Campo
Digito8
Campo
Digito9
Campo
Digito10
Campo
Digito11
Campo
Digito12
ID do Item
Preço
Ordem
digit0
5
digit1
5
digit2
9
digit3
9
digit4
3
digit5
2
digit6
6
digit7
3
digit8
1
digit9
0
digit10
0
digit11
9
300
0.32610
1
digit0
5
digit1
5
digit2
9
digit3
8
digit4
3
digit5
2
digit6
6
digit7
3
digit8
5
digit9
0
digit10
8
digit11
9
300
0.32610
2
digit0
5
digit1
5
digit2
9
digit3
8
digit4
3
digit5
2
digit6
6
digit7
3
digit8
5
digit9
0
digit10
8
digit11
8
300
0.32610
3
digit0
5
digit1
5
digit2
9
digit3
8
digit4
3
digit5
2
digit6
6
digit7
3
digit8
5
digit9
0
digit10
8
digit11
7
300
0.32610
4
digit0
5
digit1
5
digit2
9
digit3
8
digit4
3
digit5
2
digit6
6
digit7
2
digit8
5
digit9
0
digit10
0
digit11
6
300
0.32610
5
Do i need to make some special treatment to get Drools indexing my rules? I'm using
the guvnor to upload the spreadsheet and compile the rules.
Does anybody have some tips to increase the performance?
Thank you very much,
Antonio Anderson Souza
Voice Technology
http://www.antonioams.com
2010/5/17 Swindells, Thomas <TSwindells(a)nds.com>
My advice is to try just having a single column:
strValue matches “$param.*”
you could also compare the performance of that to
eval(strValue.startsWith(“$param”))
Also presumably you are only wanting the first matching rule in your table to fire,
looking at the table below drools will fire all of the matching rules,
this will mean than any phone number with prefix 5511 will be charged at 0.4 as that will
be the last rule to fire.
Thomas
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org]
On Behalf Of Greg Barton
Sent: 14 May 2010 20:59
To: Rules Users List
Subject: Re: [rules-users] Jbilling Drools performance
No problem. I'm not sure how you'd do this in a decision table (it's probably
pretty trivial) but in DRL you'd do:
rule "makePhoneNumber"
when
s: String()
then
insert(new PhoneNumber(s));
retract(s);
end
With two caveats:
1) you need some conditions on the String matched if there are other Strings that
don't make PhoneNumbers.
2) The rule could use a salience value higher than the pricing rules, but that isn't
necessary.
Actually, there's a third caveat, and it's a big one: this won't work with
sequential mode. This is because the rule above would alter working memory with the
expectation that the pricing rules would react to the change. If you want to use
sequential mode
you'll have to convert to PhoneNumber objects before hand. I understand that
you're using this Jbilling package, but is there no way you can put an intermediate
adapter between the two? It'd be as simple as inserting "new
PhoneNumber(someString)" instead
of "someString".
--- On Fri, 5/14/10, Antonio Anderson Souza <antonio(a)voicetechnology.com.br> wrote:
From: Antonio Anderson Souza <antonio(a)voicetechnology.com.br>
Subject: Re: [rules-users] Jbilling Drools performance
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Friday, May 14, 2010, 2:16 PM
Dear Greg,
Thanks very much for your reply.
I'm using sequential mode = true
Is there a way to create this PhoneNumber class, and convert the String to the PhoneNumber
object inside the Drools? Because I'm using a system called JBilling and it send the
phoneNumber as a String.
Sorry if those are basic questions, but I'm a newbie in Drools...
Thank you very much,
Antonio Anderson Souza
Voice Technology
http://www.antonioams.com
2010/5/14 Greg Barton <greg_barton(a)yahoo.com>
Right off the bat I'd say try to get rid of the eval usage. Can you put the phone
number into an object like this:
class PhoneNumber {
private char digit0;
private char digit1;
///...same for the rest of the digits
public char getDigit0() { return digit0; }
public char getDigit1() { return digit1; }
}
Then the conditions would look like this:
digit0 == '$param'
Behind the scenes hopefully this will optimize better. The use of eval won't optimize
well.
Are you using sequential mode? This might be a good candidate for that if setting the
price does not trigger any other rules to fire.
--- On Fri, 5/14/10, Antonio Anderson Souza <antonioams(a)gmail.com> wrote:
From: Antonio Anderson Souza <antonioams(a)gmail.com>
Subject: [rules-users] Jbilling Drools performance
To: "Drools Users Mailing list" <rules-users(a)lists.jboss.org>
Date: Friday, May 14, 2010, 1:28 PM
Dear All,
I'm deploying a JBilling using Drools in a Telecom Carrier in Brazil, and I'm
using Decision tables in xls files to execute the pricing, my pricing table has about
40.000 rules, and I'm getting a terrible performance
about 1.5 minute to execute the price of each CDR (Call Detail Record) mediated.
Follow bellow a small piece of my decision table:
RuleTable Padrao
CONDITION
CONDITION
ACTION
PRIORITY
PricingField
PricingManager
manager
salience
name
eval (strValue.charAt(0) == '$param')
eval (strValue.charAt(1) == '$param')
eval (strValue.charAt(2) == '$param')
eval (strValue.charAt(3) == '$param')
eval (strValue.charAt(4) == '$param')
eval (strValue.charAt(5) == '$param')
eval (strValue.charAt(6) == '$param')
eval (strValue.charAt(7) == '$param')
eval (strValue.charAt(8) == '$param')
eval (strValue.charAt(9) == '$param')
eval (strValue.charAt(10) == '$param')
eval (strValue.charAt(11) == '$param')
itemId
setPrice($param)
Campo
Digito1
Digito2
Digito3
Digito4
Digito5
Digito6
Digito7
Digito8
Digito9
Digito10
Digito11
Digito12
ID do Item
Preço
Ordem
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
8
300
0.00000
1
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
7
300
0.00000
2
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
6
300
0.00000
3
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
5
300
0.00000
4
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
4
300
0.00000
5
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
3
300
0.00000
6
destinationnumber
5
5
1
1
3
5
8
8
0
1
8
2
300
0.00000
7
destinationnumber
5
5
1
1
300
0.40000
8
Is it normal? Are there somebody using Jbilling in a similar way? Does anybody can help
me?
Best regards,
Antonio Anderson Souza
Voice Technology
http://www.antonioams.com
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
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 postmaster(a)nds.com 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
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users