Armazenamento de
Informação em HSQL
LEIC-Tagus – TDB 05/06
Bruno Azenha nº 51377
Tópicos










Introdução
Interacção dos componentes
Suporte físico
Tabelas
Conteúdo das tabelas
Armazenamento e acesso a dados
Acessos em memória
Metadados e scripts
Tipos dados especiais
Aplicações Práticas
Introdução





SGBD implementado em Java que corre numa
JVM
Ligações ao SGBD através de interface JDBC
OpenSource
Suporta um grande conjunto dos standards SQL
92 e 200n, acrescentado algumas extensões
proprietárias
Três modos de operação: “in-memory”,
“standalone” e “client/server”
Interacção dos componentes


As aplicações do utilizador só
podem aceder através de uma
interface JDBC
Características dos modos de
operação:



Aplicação e BD na mesma
JVM
Ligação HTTP através da
Internet com recurso a um
WebServer ou a uma Servlet
Ligação TCP/IP (Intranet)
usando um servidor dedicado
Demonstration programs and Tools
JDBC Interface
HTTP
Connection
WebServer
Standalone
Servlet
Database Engine
HSQL
Connection
Server
Suporte físico

Cada BD consiste num conjunto de ficheiros:






teste.properties – propriedades genéricas da BD
teste.script – contêm a definição em SQL das tabelas, dos
dados e de outros objectos da BD, para as tabelas em
memória
teste.log – contém as alterações recentes à BD
teste.data – contém os dados para as tabelas em disco
teste.backup – é uma cópia de segurança comprimida do
último estado consistente conhecido para o ficheiro “.data”
teste.lck – é usado para assinalar que a BD está aberta
Tabelas (1/3)



O HSQL suporta tabelas temporárias (TEMP) e 3 tipos
de tabelas persistentes: em memória (MEMORY) e em
disco (CACHED) e de texto (TEXT)
As tabelas temporárias só duram enquanto a ligação
está activa
Para as tabelas em memória:




Sempre que a BD é iniciada são lidos todos os dados
existentes no ficheiro “.script”
Todos os dados são escritos de memória para disco quando é
executado o comando de SHUTDOW
Tempos de acesso menores que as tabelas em disco
Ideais para pequenos conjuntos de dados
Tabelas (2/3)

Para as tabelas em disco:





Os dados só são lidos do ficheiro “.data” quando a tabela é
acedida
Só são mantidos em memória parte dos dados e dos índices
Ao se executar o SHUTDOW, são escritos os dados alterados
e são efectuadas cópias de segurança de todas as tabelas em
disco
É possível configurar a quantidade de dados a serem
mantidos em cache
Ideais para tabelas contendo grandes conjuntos de dados
Tabelas (3/3)

Para as tabelas de texto:
Usam ficheiros CSV com fonte de dados
 O uso de memória é mais eficiente pois assenta no
carregamento para memória da totalidade dos
índices e apenas uma pequena parte dos dados
 Têm a vantagem da portabilidade e legibilidade do
formato
 Ficam a perder em termos de desempenho para os
outros dois tipos de tabelas persistentes

Conteúdo das tabelas






Nome (não visível)
Descrição da coluna (nome, tipo
dados, …)
Um ou mais índices (os túpulos só são
acessíveis através de índices)
Gestor de acesso a ficheiros se for
uma tabela em disco (DataFileCache)
Restrições de integridade (se existirem
chaves estrangeiras)
Se o utilizador não criou uma chave
primária, são criados automaticamente
uma coluna e índices ocultos
Table
Column (Vector)
Index (Vector)
Cache
Constraint (Vector)
Armazenamento e acesso a dados





O índice é uma AVL binary tree
(uma árvore binária especial)
Cada índice contém um nó raiz
(que é “null” se a tabela estiver
vazia)
Cada nó pode ter um nó pai e
nós filhos esquerdo e direito
Cada nó está ligado a um túpulo
(a linha que contém os dados)
Os dados são um array de
objectos
Index
Node [root]
Node [parent]
Node [left]
Node [right]
Row [data]
Table
Object
(array) [data]
Acessos em memória



A “cache” é uma
hashtable
Adicionalmente, os
túpulos encontram-se
ligados com listas
duplamente ligadas
Se existirem muitos
registos em cache, os
mais antigos são
guardados (se necessário)
e removidos de memória
Cache
Data
(array)
Row
.data:
[contains the binary records and empty blocks]
Metadados e scripts



As tabelas de sistema são
construídas dinâmicamente (só
quando são necessárias e em
memória) pela classe
DatabaseInformation
Chamadas às funções da
DatabaseMetaData permitem
obter dados das tabelas de sistema
SYSTEM_CONNECTIONINFO
retorna informação sobre a ligação
actual
jdbcDatabaseMetaData
Database
Table (Vector)
Access
DatabaseInformation
MetaData
SYSTEM_TABLES
SYSTEM_COLUMNS
SYSTEM_TYPEINFO
SYSTEM_INDEXINFO
...
SYSTEM_CONNECTIONINFO
Script generator
SYSTEM_SCRIPT
Log
Tipos de dados especiais



Suporte para os tipos OTHER e OBJECT (são mapeados para
java.lang.Object
Torna possível o armazenamento de dados binários nas colunas :
fotografias, objectos Java serializados, músicas, entre outros
Recurso à ferramenta “SQL Tool” e a prepared staments:
\bl /tmp/favoritesong.mp3
\bp INSERT INTO musictbl (id, stream) VALUES(3112, ?);
SELECT stream FROM musictbl WHERE id = 3112;
\bd /tmp/favoritesong.mp3


O tamanho máximo do objecto é ditado pela memória
disponível
Na prática, SGBDS de produção têm suportado com sucesso
objectos até um megabyte
Aplicações Práticas






OpenOffice.Org 2.0
JBoss
JFox
Mathematica
TrackStudio
Outros…
Bibliografia



HSQL Development Group, Hypersonic SQL
Arquitecture, www.hsqldb.org, 2005
HSQL Development Group, Hsqldb User Guide,
www.hsqldb.org, 2005
Benoît Marchal, Hypersonic SQL: A Desktop Java
Database,
http://www.developer.com/db/article.php/629
261
Download

Slides (armazenamento