Mark Payne created NIFI-5801:
--------------------------------

             Summary: Evaluating Expression Language can in many cases be made 
much more efficient
                 Key: NIFI-5801
                 URL: https://issues.apache.org/jira/browse/NIFI-5801
             Project: Apache NiFi
          Issue Type: Bug
          Components: Core Framework
            Reporter: Mark Payne
            Assignee: Mark Payne


When a StandardPropertyValue is obtained and evaluateAttributeExpressions is 
called, it builds the entire Evaluator Tree each time. This was done to ensure 
that Evaluator.evaluate() is called only once. However, the requirement to call 
this only once was introduced as a way to have anyMatchingAttribute, 
anyAttribute, allMatchingAttributes, allAttributes, etc. methods work, and 
these are rarely used. I.e., we introduced semantics that significantly slow 
performance in order to provide functionality that is used maybe 1% of the 
time. Instead, we should optimize for the 99% use case and incur a penalty, if 
necessary, in the 1% use case instead. Profiling the ConsumeKafkaRecord 
processor shows that 80% of the time in that method is evaluating Expression 
Language for `${schema.name}` to determine which schema should be used. We can 
likely make this evaluation just as quick as attributeMap.get("schema.name") by 
pre-building the Evaluators and re-using them.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to