[rules-users] Jbilling Drools performance
Mark Proctor
mproctor at codehaus.org
Tue May 18 17:30:55 EDT 2010
On 18/05/2010 22:11, Antonio Anderson Souza wrote:
> Greg,
>
> CDR is a Call Detail Record, sorry I forgot to explain it, the object
> is a POJO with the following attributes:
>
> field: name: datereference type: DATE value: 2010-04-28 00:00:00.0
> field: name: billingid type: STRING value: 20100428.15544.42adf
> field: name: accountid type: INTEGER value: 15544
> field: name: billingperiod type: STRING value: 20100401
> field: name: billingclassification type: STRING value: DUR
> field: name: ipxcallguid type: STRING value:
> 5k692927-guwtka-g8kj8d0u-1-g8krry54-o4n
> field: name: transactiondatetime type: DATE value: 2010-04-28 20:21:01.337
> field: name: billingitemid type: INTEGER value: 0
> field: name: ratesystem type: STRING value: IPXNET
> field: name: originnumber type: STRING value:
> 551135880520 at bitcompany.braste
> field: name: destinationnumber type: STRING value: 551139012650
> field: name: destinationareaid type: STRING value: 100000551
> field: name: chargedduration type: DATE value: 1980-01-01 00:02:06.0
> field: name: chargedamount type: FLOAT value: 0.0816
> field: name: userid type: INTEGER value: 3372
> field: name: username type: STRING value: bitcom51
> field: name: unitamount type: FLOAT value: 0.00389
> field: name: amountcurrency type: STRING value: USD
> field: name: timezone type: INTEGER value: -3
> field: name: registertype type: STRING value: MV
> field: name: datelastupdated type: DATE value: 2010-04-29 02:57:18.54
> field: name: lastupdatedby type: STRING value: IPXRateCalls rev032
> field: name: lastupdateremarks type: STRING value: null
> field: name: dateinserted type: DATE value: 2010-04-29 02:57:18.54
> field: name: destinationdetail type: STRING value: SAO PAULO
> field: name: type type: STRING value: Fixo
> field: name: collectedcallflag type: INTEGER value: 0
> field: name: jb_timestamp type: DATE value: null
> field: name: digit0 type: INTEGER value: 5
> field: name: digit1 type: INTEGER value: 5
> field: name: digit2 type: INTEGER value: 1
> field: name: digit3 type: INTEGER value: 1
> field: name: digit4 type: INTEGER value: 3
> field: name: digit5 type: INTEGER value: 9
> field: name: digit6 type: INTEGER value: 0
> field: name: digit7 type: INTEGER value: 1
> field: name: digit8 type: INTEGER value: 2
> field: name: digit9 type: INTEGER value: 6
> field: name: digit10 type: INTEGER value: 5
> field: name: digit11 type: INTEGER value: 0
>
> This spreadsheet is only a sample because the whole one has 40000
> rules, I'm checking the Jbilling code, but it seams to be loading the
> rules each time.
You are building the kbase for each execution, that would indeed be
heavy. build the kbase once, then just re-use the same session. If you
can provide something as a public benchmark, we can all start to look
into it.
Mark
>
> Best regards,
>
> Antonio Anderson Souza
> Voice Technology
> http://www.antonioams.com
>
>
> 2010/5/18 Greg Barton <greg_barton at yahoo.com
> <mailto:greg_barton at yahoo.com>>
>
> 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 at voicetechnology.com.br
> <mailto:antonio at voicetechnology.com.br>>/* wrote:
>
>
> From: Antonio Anderson Souza <antonio at voicetechnology.com.br
> <mailto:antonio at voicetechnology.com.br>>
> Subject: Re: [rules-users] Jbilling Drools performance
> To: "Rules Users List" <rules-users at lists.jboss.org
> <mailto:rules-users at 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 at nds.com
> <http://mc/compose?to=TSwindells@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 at lists.jboss.org
> <http://mc/compose?to=rules-users-bounces@lists.jboss.org>
> [mailto:rules-users-bounces at lists.jboss.org
> <http://mc/compose?to=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 at voicetechnology.com.br
> <http://mc/compose?to=antonio@voicetechnology.com.br>>/*
> wrote:
>
>
> From: Antonio Anderson Souza
> <antonio at voicetechnology.com.br
> <http://mc/compose?to=antonio@voicetechnology.com.br>>
> Subject: Re: [rules-users] Jbilling Drools performance
> To: "Rules Users List" <rules-users at lists.jboss.org
> <http://mc/compose?to=rules-users@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 at yahoo.com
> <http://mc/compose?to=greg_barton@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 at gmail.com
> <http://mc/compose?to=antonioams@gmail.com>>/* wrote:
>
>
> From: Antonio Anderson Souza <antonioams at gmail.com
> <http://mc/compose?to=antonioams@gmail.com>>
> Subject: [rules-users] Jbilling Drools performance
> To: "Drools Users Mailing list"
> <rules-users at lists.jboss.org
> <http://mc/compose?to=rules-users@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 at lists.jboss.org
> <http://mc/compose?to=rules-users@lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> <http://mc/compose?to=rules-users@lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> -----Inline Attachment Follows-----
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> <http://mc/compose?to=rules-users@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 at nds.com
> <http://mc/compose?to=postmaster@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 at lists.jboss.org
> <http://mc/compose?to=rules-users@lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> -----Inline Attachment Follows-----
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> <http://mc/compose?to=rules-users@lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100518/6075914c/attachment.html
More information about the rules-users
mailing list