140 likes | 208 Views
HSQL database engine. Processamento e Optimização de Interrogações Vitor Silva. O HSQL. Grupo de desenvolvimento formado em 2001 Continuação do Hypersonic SQL Project 6 novas versões desde 2001 Linguagem JAVA Driver JDBC ANSI-92 SQL + SQL 99 + SQL 2003
E N D
HSQL database engine Processamento e Optimização de Interrogações Vitor Silva
O HSQL • Grupo de desenvolvimento formado em 2001 • Continuação do Hypersonic SQL Project • 6 novas versões desde 2001 • Linguagem JAVA • Driver JDBC • ANSI-92 SQL + SQL 99 + SQL 2003 • Tabelas em Memória Principal ou Secundária • Motor de Base de Dados de pequena dimensão, compacto • Capacidade: 8 GB de Dados
Processamento de Interrogações - Validação • O processamento de interrogações inicia-se ao invocar o método execute • Consoante o tipo de comando fornecido é seleccionado o método a invocar. A execução de um comando sql começa por validar a interrogação - recompileStatement • A validação começa por verificar qual o tipo de interrogação (Select, Insert, Update, Delete ou Call) - sqlCompileStatement • src\org\hsqldb\Session.java
Processamento de Interrogações - Preparação • É efectuado o parsing que identificará o esquema da interrogação – compileSelectStatement, compileUpdateStatement, etc • Uma vez validada a interrogação é iniciada a execução propriamente dita - executeImpl • src\org\hsqldb\Parser.java • src\org\hsqldb\CompiledStatement.java • src\org\hsqldb\CompiledStatementExecutor.java
Processamento de Interrogações - Resultados • Numa interrogação de select começa-se pela análise dos atributos envolvidos e colocam-se todos os tuplos que obedeçam às condições num conjunto de resultados possíveis – getResult • O algoritmo utilizado para processar Selects é baseado no algoritmo de nested loops join adaptado a objectos • O cálculo de agregados é apenas efectuado após a obtenção dos resultados • Por último poderá ser necessário remover duplicados ou, em caso de união, reordenar os resultados • src\org\hsqldb\Select.java
Resultados - Estrutura de Dados • Os resultados do processamento de interrogações são guardados em HashSet, em que cada Set é um array que representa uma linha de resultados • O objecto Result incorpora os resultados e a informação adicional sobre colunas, tipos dos atributos (metadados), etc. • src\org\hsqldb\Result.java • src\org\hsqldb\GroupedResult.java
Select – Alguns Pormenores • O algoritmo de execução de Select faz distinção entre um Select simples ou um Select envolvido numa union • É utilizada a metodologia de programação de objectos para obter os valores que obedecem às condições do Select (método get de acesso às estruturas) • HSQL permite funções agregadas aninhadas (count(id)+2, max(id)-min(id)) • src\org\hsqldb\Select.java • src\org\hsqldb\GroupedResult.java • src\org\hsqldb\TableFilter.java
Optimização • Uma vez que o processamento das interrogações segue algoritmos estáticos as optimizações são feitas ao nível desses algoritmos e têm a ver com a depuração de código • Neste momento a optimização é feita mais ao nível das aplicações que interagem com o HSQL e é nestas que se devem ter alguns cuidados para obter o melhor desempenho, como garantir que a outer relation seja a de menor dimensão
Optimização de Interrogações • O HSQL não utiliza índices para acelerar a ordenação dos resultados, mas utiliza-os para acelerar o tempo de processamento das interrogações • A utilização dos índices permite localizar mais rapidamente o primeiro tuplo que obedece a uma dada condição, reduzindo o número de linhas a processar
Optimização de Interrogações • Existe reescrita de condições de modo a que a primeira condição a ser processada seja uma condição com atributos índexados • src\org\hsqldb\TableFilter.java
Futuras Optimizações • Uma optimização que está a procurar ser implementada diz respeito ao melhor aproveitamento dos índices para o processamento das interrogações, mais concretamente identificar, num select com múltiplas condições com atributos indexados, procurar identificar qual terá melhor caminho de acesso • Melhoria do processo de parsing de modo a permitir uma melhor análise e reescrita de interrogações (considerar outros parâmetros para além dos índices)
Bibliografia • Portal HSQLdb - http://hsqldb.org/ • Código Fonte