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