On 8/10/13 2:47 AM, Madushanka Fonseka wrote:
Hi,
I Have been working with Apache derby for last few months as I am into
innovating Apache derby to support "Fuzzy Query".
I want to know why apache derby prfers bytecode generation over
reflection ?
Hi Madushanka,
A SQL interpreter needs to evaluate lots of expressions. Consider the
following statement:
select a+b from t where c*d > e*f;
In this statement, the SQL interpreter has to evaluate
a+b
c*d > e*f
For this expression evaluation, all SQL interpreters generate bytecode.
At least, all SQL interpreters which I know about. For most SQL
interpreters, the bytecode is something proprietary. At runtime, the
bytecode is evaluated on a special virtual machine built into the SQL
interpreter. What is different about Derby is that Derby doesn't define
its own proprietary bytecode and Derby doesn't supply a special virtual
machine in its execution layer. Instead, Derby just uses Java bytecode
and the Java virtual machine for expression evaluation. For a pure-Java
database like Derby, the traditional approach would mean that every
expression would be evaluated on 2 virtual machines: first the
proprietary virtual machine and then ultimately the Java virtual
machine. The advantages of the Derby approach are supposed to be:
1) Derby doesn't have to maintain its own proprietary virtual machine.
2) Eliminating one of the virtual machines ought to result in measurable
performance boosts for queries involving expressions and lots of rows.
Reflection is a further issue for expressions which invoke external
routines coded in Java. When the bytecode generator was created 15 years
ago, Java reflection was an expensive operation. I believe that the
performance of reflection has improved significantly since then.
Hope this helps,
-Rick
Then I would like out of those two mechanisms what would be the best
approach to execute fuzzy queries ?
FYI - Fuzzy Query will look like this.
Select * good students from student,
Select students where avg is rather above 60
Madushanka Fonseka,
B.Sc (Eng), M.Sc (reading),
Snr Software Engineer,
Virtusa Inc.