In the first half of 2013 BRFplus reached a milestone with more than 1000 customers. BRFplus and its successor, NetWeaver Decision Service Management, can be considered one of the most used business rule management systems.
Such a large number of customers sometimes creates a lot of pressure to quickly provide fixes or new features. The endless number of usage scenarios lets us continuously face new challenges which contribute to product quality and performance. Recently we have seen some use cases we never dreamt of, such as 20,000,000 objects, decision tables with more than 10,000 rows, etc.
You may question the need for this, and of course there are design issues resulting in those numbers. Nevertheless we took our chances to understand what is going on and optimize our code. Some results are available in form of the four notes which I want to mention in this blog:
1930741: Performance Improvements in the BRFplus Design Time
Looking at a decision table with more than 10,000 rows made my colleague Michael Aakolk wonder whether our persistence layer could be optimized. After some analysis and testing, he found the key to an incredible acceleration of the delta detection mechanism we use when saving objects to the database. In the respective scenario, the runtime for saving the decision table to the database was reduced from several minutes to 1.24 seconds! The improvement grows with the size of a use case and is independent of decision tables. The note is available for the NetWeaver releases 7.02, 7.30, 7.31, and 7.40.
1936926: Runtime improvements for decision tables
We continuously strive for improvement in rule and decision service execution. With this note, the performance of executing decision tables is dramatically reduced. Our internal test with some large decision tables showed an improvement by a factor of almost five (5 seconds versus 1 second). Smaller use cases also benefit from the improvement. Again, this was an achievement by Michael Aakolk. The note is available for the NetWeaver releases 7.31 and 7.40.
1940360: Changes to the Application Server Buffering for BRFplus Meta Data Tables
Some customers have small use cases, some have big ones. In some, the rules keep on changing all the time and in some they are quite stable. All of those influencing factors make it very difficult to define the best DB buffer settings. Therefore, we have decided to provide a report to help define buffer settings for BRFplus tables. Again, thanks go to Michael Aakolk. The note is available for the NetWeaver releases 7.31 and 7.40.
1938697: BRFplus: Remove unnecessary data conversion
We have found situations in which BRFplus was unnecessarily converting data back and forth. Customers cannot identify if and when they run into such a situation. With this note, a more intelligent data reference management is created that avoids unnecessary data conversions. Christian Auth is responsible for the improvement. Callers do not need to change their code. The note is available for the NetWeaver releases 7.31 and 7.40.
Another nice improvement is the support for BW InfoObject and business partner data elements in DDIC binding of element data obejcts. You may check out notes 1921114 (BW Integr.: Consider text and check tables for InfoObjects) and 1930400 (Consider texts for Business Partners). Several customers brought up those two requirements in the past.
UPDATE, new note 1941409 – Improvements for truncate affected code validity
While saving an object BRFplus has to analyze dependencies and invalidate oudated generated code. This part has been reworked and greatly improved by my colleague Michael Aakolk. The performance gains depend a lot on the specific scenario, the number of involved objects and the number of reused objects (in several functions). In a very big use case the performance of a save operation was improved from about two minutes to less than a second.