zhangchenghui created CALCITE-4144:
--------------------------------------
Summary: Reduce code generation and class loading overhead when
getScalar in JaninoRexCompiler.
Key: CALCITE-4144
URL: https://issues.apache.org/jira/browse/CALCITE-4144
Project: Calcite
Issue Type: Improvement
Components: core
Affects Versions: 1.21.0
Environment: version: calcite-core 1.21
model: filterableTable
Reporter: zhangchenghui
Fix For: 1.25.0
Attachments: image-2020-07-27-22-44-44-455.png,
image-2020-07-27-22-45-25-350.png, image-2020-07-27-22-45-54-346.png,
image-2020-07-27-22-46-18-306.png
I used the FilterableTable mode in the project, but I found that the query was
particularly slow. I used the JProfile tool to troubleshoot the thread
time-consuming place, and then through the debug, I found that each request
took two places:
1、org.apache.calcite.adapter.enumerable.EnumerableInterpretable#getBindable
!image-2020-07-27-22-44-44-455.png!
This place optimizes the cache settings by setting the cache size.
2、org.apache.calcite.interpreter.JaninoRexCompiler#baz
!image-2020-07-27-22-45-25-350.png!
But this place is not cached, and a new expression string is used every time to
create it through reflection.
JProfile tool time consumption:
!image-2020-07-27-22-45-54-346.png!
我本来想在这里加一层缓存的,但发现每次生成的表达式都是不一样,如下:
!image-2020-07-27-22-46-18-306.png!
So you can't use the getBindable method to directly add cache.
Is there anything you can optimize here? For example, can you generate a
template class in advance, and then generate different objects through
different parameter values?
Bring tea to the boss!
Looking forward to your reply!
--
This message was sent by Atlassian Jira
(v8.3.4#803005)