240 likes | 438 Views
Vantagens na Utilização de Banco de Dados Objeto-Relacional em Sistemas Laboratoriais. Ricardo Ferreira Schiavo. ESCOLA POLITÉCNICA DA UNIVERSIDADE DE SÃO PAULO Profª. Solange Nice Alves de Souza. Introdução. Bancos de dados objeto-relacionais Sintaxe SQL99 e Oracle
E N D
Vantagens na Utilização de Banco de Dados Objeto-Relacional em Sistemas Laboratoriais Ricardo Ferreira Schiavo ESCOLA POLITÉCNICA DA UNIVERSIDADE DE SÃO PAULO Profª. Solange Nice Alves de Souza
Introdução • Bancos de dados objeto-relacionais • Sintaxe SQL99 e Oracle • Descrição do experimento • Análise de resultados obtidos
Modelo Objeto-Relacional • Bancos de dados orientado a objeto suportam tipos complexos de dados, como gráficos, imagens, multimedia, etc • Bancos de dados relacionais suportam grandes volumes de dados e consultas complexas • O Banco de dados objeto-relacional busca aproveitar as vantagens de ambos
Modelo Objeto-Relacional • Muitos SGBDs orientados a objeto falharam por oferecer as não oferecer a eficiencia de otimização disponíveis e conhecidas em SGBDs relacionais • OR-SGBDs oferecem muitas das vantagens de OO, porém mantendo o as relações como a abstração fundamental
SQL-99 e Oracle • INCITS - InterNational Committee for Information Technology Standards • O padrão SQL-99 apresenta a maior parte das funcionalidades objeto relacionais • Os diferentes fornecedores se basearam no padrão porém com algumas diferenças na sintaxe
Elementos Objeto-Relacionais - Oracle • Tipos de Objetos (UDT) • Nested Tables (Tabelas aninhadas) • References (REF) • VArrays (Varying Arrays) • Large Objects (LOBs) • Object View (Visão de Objetos)
Tipos definidos pelo usuário • Um “user-defined type” ou UDT é essencialmente uma definição de classe, com estrutura e métodos • Um UDT pode ser usado de duas formas: • Como uma linha em uma tabela • Como uma coluna de uma tabela
Definição de UDT • SQL99 CREATE TYPE <nome_do_tipo> AS ( <lista de atributos> <lista de métodos> ); • Oracle CREATE TYPE nome_do_tipo AS OBJECT ( id NUMBER, nome VARCHAR2(255), MEMBER FUNCTION get_id RETURN NUMBER ); /
SELECT e INSERT SELECT t.campo_objeto.atributo, t. t.campo_objeto.metodo() FROM tabela t; INSERT INTO tabela VALUES ( 1, ‘campo texto’, NOME_OBJ (11, ‘texto’) ); (construstor, métodos de comparação (MAP) e ordem (ORDER) criados automaticamente – ordem de atributos na definição)
Herança / Polimorfismo CREATE TYPE Poligono AS OBJECT ( nome varchar(20),pontos Points_obj, MEMBER FUNCTION get_area RETURN NUMBER ) NOT FINAL NOT INSTANTIABLE / CREATE TYPE Quadrado UNDER Poligono ( OVERRIDING MEMBER FUNCTION get_area RETURN NUMBER ); • É possível implementar herança múltipla • Utilização de herança em tabelas
Nested Tables create type autor as object ( nome varchar(10) ); / create type conj_autores as table of autor; / create type livro as object ( titulo varchar(20), autores conj_autores); / create table livros of livro nested table autores store as tabela_autores;
Definição de UDT • Tipos de Objetos (UDT) • Nested Tables (Tabelas aninhadas) • References (REF) • VArrays (Varying Arrays) • Large Objects (LOBs) • Object View (Visão de Objetos)
Experimento • LIMS • Pequena representação de um sistema laboratórial • Objetivos • Obter descrição e resultado formatado de todos os tipos • Calcular regressão linear dos pontos do gráfico • Entidades • Testes • Resultados (Text, Numeric, Date, Graph) • Pontos (100 pontos por gráfico)
Resultados - Inserts Por execução • 4000 resultados • 4000 testes • 100.000 pontos gráfico Por execução • 40.000 resultados • 40.000 testes • 1.000.000 pontos gráfico
Resultados - Selects Volume dados • 20.000 resultados • 20.000 testes • 500.000 pontos grafico
Resultados - Selects Volume dados • 140.000 resultados • 140.000 testes • 3.500.000 pontos gráfico
Resultados – Regressão Linear • 500.000 pontos gráfico O-R Elapsed: 00:00:00.20 Statistics ---------------------------------------------------------- 3 recursive calls 0 db block gets 4163 consistent gets 0 physical reads 0 redo size 615 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed Relacional Elapsed: 00:00:00.06 Statistics ---------------------------------------------------------- 4 recursive calls 0 db block gets 1205 consistent gets 0 physical reads 0 redo size 512 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
Resultados – Regressão Linear • 3.500.000 pontos gráfico O-R Elapsed: 00:00:17.16 Statistics ---------------------------------------------------------- 132 recursive calls 0 db block gets 28074 consistent gets 19729 physical reads 0 redo size 616 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed Relacional Elapsed: 00:00:05.73 Statistics ---------------------------------------------------------- 5 recursive calls 0 db block gets 8142 consistent gets 5551 physical reads 0 redo size 512 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
Resultados – Regressão Linear • 3.500.000 pontos gráfico – 2ª execução O-R Elapsed: 00:00:16.76 Statistics ---------------------------------------------------------- 2 recursive calls 0 db block gets 27867 consistent gets 20061 physical reads 0 redo size 616 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed Relacional Elapsed: 00:00:04.86 Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 8069 consistent gets 5438 physical reads 0 redo size 512 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
Conclusão • Os componentes objeto-relacional presentes no Oracle permitem uma melhor organização da hierarquia das entidades e do código • A performance e escalabilidade de tabelas de objetos ainda é inferior a estrutura equivalente relacional, porém satisfatórias • Podem ser criados métodos para realizar operações nos elementos complexos (LOBs, multimídia) sem que seja necessária a transmissão de toda a informação da base de dados para os clientes • Novas tendências de Mapeamento objeto-relacional (ORM)