processamento e optimização de interrogações

Propaganda
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
Software que recorre ao HSQL
Open Source Software
Commercial Software
Office and Productivity
OpenOffice 2.0
Application Servers
JBoss, JFox, Jonas
Mathematics and Science
Mathematica
Object Relational Mapping Software
Hibernate
ObJectRelationalBridge - OJB
Mr. Persister ORM
Database Clustering Software
C-JDBC
Issue Tracking
Jira
TrackStudio
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
Obrigado pela atenção
Download