UNIVERSIDADE FEDERAL DE GOIÁS – UFG CAMPUS CATALÃO – CaC DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO – DCC Bacharelado em Ciência da Computação Projeto Final de Curso Armazenamento de Dados XML: Técnicas de Benchmark para avaliação Autor: Nádia Félix Felipe da Silva Orientador: Ms. Márcio de Souza Dias Catalão - 2007 Nádia Félix Felipe da Silva Armazenamento de Dados XML: Técnicas de Benchmark para avaliação Monografia apresentada ao Curso de Bacharelado em Ciência da Computação da Universidade Federal de Goiás Campus Catalão como requisito parcial para obtenção do tı́tulo de Bacharel em Ciência da Computação Área de Concentração: Banco de Dados Orientador: Ms. Márcio de Souza Dias Catalão - 2007 S. Félix Felipe da, Nádia Armazenamento de Dados XML: Técnicas de Benchmark para avaliação/Ms. Márcio de Souza Dias- Catalão - 2007 Número de paginas: 134 Projeto Final de Curso (Bacharelado) Universidade Federal de Goiás, Campus Catalão, Curso de Bacharelado em Ciência da Computação, 2007. Palavras-Chave: 1. Dados semi-estruturados. 2. XML. 3. Benchmarks Nádia Félix Felipe da Silva Armazenamento de Dados XML: Técnicas de Benchmark para avaliação Monografia apresentada e aprovada em de Pela Banca Examinadora constituı́da pelos professores. Ms. Márcio de Souza Dias – Presidente da Banca Ms. Márcio Antônio Duarte Wisner Antônio Marques À minha famı́lia, em e special meus pais, que souberam entender minha ausência. Aos meus amigos e meu orientador Márcio de Souza Dias. AGRADECIMENTOS Primeiramente agradeço infinitamente a Deus, pelo dom e graça da vida, tenho convicta certeza que sem Ele seria impossı́vel concluir este trabalho. Agradeço incessantemente aos meus pais, Dioclemar e Iva, irmãos e aos meus sobrinhos Ana Júlia e João Antônio, pela certeza de que frutos seriam colhidos, bastaria para isso dedicação. Agradeço também ao meu orientador Márcio de Souza Dias, por abdicar muitas vezes de horas de descanso e por ter me dado todo suporte necessário a conclusão deste. É inevitável citar ainda os amigos João Luiz, Liliane, Clayton, Wellington, Francilene, Luiz Carlos e Leonardo, fontes de apoio e insentivo na busca contı́nua pelas respostas necessárias a este trabalho. Agradeço ainda à professora Cristiane de Fátima dos Santos, pelo apoio e decisão pelo tema deste projeto. Aos amigos e colegas de trabalho da Unimed Catalão pelo apoio, em especial ao meu grande amigo Adercley. Se torna difı́cil citar todos os nomes, uma vez que, pela graça de Deus, foram várias as pessoas que estiveram ao meu lado, me consolando nos momentos difı́ceis e me incentivando quando necessário. Obrigado a todos pelo apoio. Esta vitória não é minha, é nossa. ”Nada te perturbe, nada te espante... Tudo passa. A paciência tudo alcança! A quem tem Deus nada falta.” Santa Tereza D’ávila. ”A vida é para nós o que concebemos dela. Para o rústico cujo campo lhe é tudo, esse campo é um império. Para o César cujo império lhe ainda é pouco, esse império é um campo. O pobre possui um império; o grande possui um campo. Na verdade, não possuı́mos mais que as nossas próprias sensações; nelas, pois, que não no que elas vêem, temos que fundamentar a realidade da nossa vida.” Fernando Pessoa RESUMO Silva, N. Armazenamento de Dados XML: Técnicas de Benchmark para avaliação. Curso de Ciência da Computação, Campus Catalão, UFG, Catalão, Brasil, 2007, 134p. A Internet vem gradativamente ganhando destaque ao ser usada como veı́culo de intercâmbio de informações. Têm sido objeto de estudo de grandes ciêntistas, os quais buscam melhorar esse intercâmbio, tornando o mais leve e eficiênte. Os dados produzidos neste contexto são conhecidos por apresentar caracterı́sticas semi-estruturadas, ou seja, uma informalidade na sua organização. Um tipo de dado semi-estruturado e de grande aceitação neste cenário é o XML (eXtensible Markup Language), um formato que caminha para ser considerado um padrão nesse meio, sendo fortemente utilizado por aplicações diversas, como intercâmbio e integração de dados. Com o aparecimento da XML surge a necessidade de prover meios para manipulação e armazenamento desse tipo de informação, uma vez que são dados com caracterı́sticas particulares e diferenciadas, não podendo simplesmente ser aplicados técnicas de gerenciamento com Bancos de Dados tradicionais sem algum pré-processamento. Deste modo, este trabalho busca estabelecer o Estado da Arte do armazenamento de dados XML, os tipos de bancos de dados existentes, suas particularidades, vantagens e desvantagens, e também apresentar ao leitor as ferramentas existentes no mercado para a realização de uma análise comparativa automatizada entre Bancos de Dados XML, utilizando técnicas de avaliação e de softwares de benchmarks (softwares voltados a testar o desempenho de um sistema por meio de comparações e métricas estabelecidas). Palavras-Chaves: Dados semi-estruturados, XML, Benchmarks i Sumário 1 Introdução 1 2 Armazenamento de Informações - Definições 4 2.1 Caraterı́sticas Fundamentais acerca dos Bancos de Dados . . . . . . . . . . 5 2.1.1 Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.2 Informação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.3 Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.4 Arquitetura do Sistema de Banco de Dados 2.1.5 Linguagens de Banco de Dados . . . . . . . . . . . . . . . . . . . . 13 . . . . . . . . . . . . . 10 3 Histórico e Desenvolvimento dos Bancos de Dados 3.1 17 Do surgimento da Escrita à automação do processo de armazenamento . . 17 3.1.1 Processamento manual de dados (papel e lápis) . . . . . . . . . . . 17 3.1.2 Surgimento dos Computadores, cartões perfurados e máquinas eletromecânicas para ordenar e tabular registros . . . . . . . . . . . . . . 18 3.1.3 Fitas magnétivas, Sistemas de Arquivos . . . . . . . . . . . . . . . . 20 3.1.4 Os primeiros SGBD’s da Década de 70 - Modelos Hierárquicos, Modelo em Redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 3.3 3.1.5 Meados da Década de 80 - Modelo Relacional . . . . . . . . . . . . 24 3.1.6 Final da Década de 80 até atual . . . . . . . . . . . . . . . . . . . . 25 A internet no contexto de armazenamento de informações . . . . . . . . . . 27 3.2.1 Uma mudança de paradigma . . . . . . . . . . . . . . . . . . . . . . 28 3.2.2 Linguagens de Marcação no Contexto de Armazenamento . . . . . . 31 Bancos de Dados para documentos XML . . . . . . . . . . . . . . . . . . . 34 4 Dados - Sua Representação, sua estruturação e a utilização de XML 4.1 36 Classificação de Dados apartir de sua representação Estrutural . . . . . . . 37 4.1.1 Dados Estruturados . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.2 Dados Não Estruturados . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1.3 Dados Semi - Estruturados . . . . . . . . . . . . . . . . . . . . . . . 38 ii 4.2 A estrutura de um documento XML . . . . . . . . . . . . . . . . . . . . . . 41 4.3 DTD(Document Type Definition) . . . . . . . . . . . . . . . . . . . . . . . 43 4.4 XML Schema Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.4.1 Representação - Árvores XML . . . . . . . . . . . . . . . . . . . . . 48 4.5 Documentos Centrados em Dados e Documentos Centrados em Documentos 49 4.6 Banco de Dados para documentos XML . . . . . . . . . . . . . . . . . . . 50 4.6.1 Banco de Dados Relacional habilitado para receber dados XML . . 51 4.6.2 XML Native Databases ou (Sistemas de Banco de Dados Nativos em XML) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.6.3 Caracterı́sticas de SGBDs XML Nativos . . . . . . . . . . . . . . . 60 4.6.4 Principais Vantagens em trabalhar com bancos de dados relacionais 4.6.5 Principais Desvantagens em trabalhar com bancos de dados relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.6.6 Principais Vantagens em trabalhar com Banco de Dados XML . . . 69 4.6.7 Principais Desvantagens em trabalhar com Banco de Dados XML . 69 5 Benchmark em Bancos de Dados XML 5.1 5.2 67 71 Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.1.1 XOO7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.1.2 XMach-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.1.3 XBench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.1.4 XMark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1.5 MBench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1.6 XCheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.1.7 Um comparativo entre os Benchmarks apresentados . . . . . . . . . 87 Bancos de Dados escolhidos para o Estudo de Caso . . . . . . . . . . . . . 89 5.2.1 BD nativo escolhido: eXist . . . . . . . . . . . . . . . . . . . . . . . 92 5.2.2 BD com suporte a XML escolhido: Oracle 9i . . . . . . . . . . . . . 93 5.2.3 XCheck - o benchmark escolhido . . . . . . . . . . . . . . . . . . . . 93 5.2.4 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.2.5 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6 Conclusão 100 Referências 103 Apêndices 108 iii A XCheck 109 A.1 Descrição do processo de instalação . . . . . . . . . . . . . . . . . . . . . . 109 A.1.1 Fase de análise dos dados . . . . . . . . . . . . . . . . . . . . . . . 119 A.2 Como adaptar o XCheck para receber outros BD’s . . . . . . . . . . . . . . 119 B eXist 121 B.1 Descrição do processo de Instalação . . . . . . . . . . . . . . . . . . . . . . 121 B.2 Alguns conceitos sobre eXist . . . . . . . . . . . . . . . . . . . . . . . . . . 121 C Oracle XML 126 C.1 Descrição do Processo de Instalação . . . . . . . . . . . . . . . . . . . . . . 127 C.2 Alguns conceitos sobre Oracle . . . . . . . . . . . . . . . . . . . . . . . . . 131 iv LISTA DE ABREVIATURAS E SIGLAS XML - eXtensible Markup Languagem BD - Banco de Dados DBA - Administrador de Banco de Dados SGBD - Sistema Gerenciador de Banco de Dados DBMS - Database Management System DDL - Data Definition Language DML - Data Manipulation Language SQL - Structured Query Language ISAM - Indexed Sequential Access Method VSAM - Virtual Storage Access Method IMS - Information Menagement Systems OO - Orientado ao Objeto DARPA - Defense Advanced Research Projects Agency TCP - Transmission Control Protocol IP - Internet Protocol GML - Generalized Markup Language SGML - Standard Generalized Markup Language HTML - HyperText Markup Language W3C - World Wide Web Consortium DTD - Document Type Definition XSD - XML Schema language CLOB - Character Large Objects XQL - XML Query Language XPATH - XML Path Language SUT - System Under Test GNU - General Public Licence CPU - Central Processing Unit GPL - General Public Licence LGPL - Lesser General Public Licence v Lista de Figuras 2.1 O Dado processado gera Informação . . . . . . . . . . . . 6 2.2 Acesso ao banco de Dados . . . . . . . . . . . . . . . . . . 7 2.3 Sistema Gerenciador de Banco de Dados . . . . . . . . . . 9 2.4 Os três nı́veis da arquitetura . . . . . . . . . . . . . . . . . 11 2.5 Arquitetura Detalhada do Sistema . . . . . . . . . . . . . . 13 3.1 Cartões Perfurados . . . . . . . . . . . . . . . . . . . . . . 19 3.2 Máquina de Cartões Perfurados . . . . . . . . . . . . . . . 19 3.3 Modelo de Banco de Dados Hierárquico . . . . . . . . . . . 22 3.4 Modelo de Banco de Dados em Rede . . . . . . . . . . . . 23 3.5 Modelo de Banco de Dados Relacional . . . . . . . . . . . 25 3.6 Arquitetura tradicional de banco de dados Cliente/Servidor 29 3.7 Arquitetura de Aplicação com Base na WEB . . . . . . . . 30 3.8 Evolução dos Bancos de Dados até a necessidade de Bancos de Dados especiais para documentos XML[Santiago, 2004] 35 4.1 Tipos de Dados e exemplos . . . . . . . . . . . . . . . . . 39 4.2 Exemplo de um documento XML . . . . . . . . . . . . . . 41 4.3 Exemplo de uma DTD . . . . . . . . . . . . . . . . . . . . 43 4.4 Exemplo de um XML Schema . . . . . . . . . . . . . . . . 46 4.5 Documento XML . . . . . . . . . . . . . . . . . . . . . . . 46 4.6 DTD para Documento XML . . . . . . . . . . . . . . . . . 47 4.7 XML Schema para Documento XML . . . . . . . . . . . . 47 4.8 Exemplo de um documento Centrado em Dados . . . . . . 49 4.9 Exemplo de um documento Centrado em Documentos . . . 50 vi 4.10 Representação do documento XML com o uso de grafos . . 53 4.11 Abordagem em Grafo . . . . . . . . . . . . . . . . . . . . . 54 4.12 Tabela de rótulo . . . . . . . . . . . . . . . . . . . . . . . . 54 4.13 Granularidade Grande . . . . . . . . . . . . . . . . . . . . 56 4.14 Granularidade pequena . . . . . . . . . . . . . . . . . . . . 56 4.15 Granularidade Média . . . . . . . . . . . . . . . . . . . . . 57 4.16 Nı́veis de Granularidade . . . . . . . . . . . . . . . . . . . 58 4.17 Trecho de um documento XML . . . . . . . . . . . . . . . 63 4.18 Consulta Xpath . . . . . . . . . . . . . . . . . . . . . . . . 63 4.19 A consulta XPath representada no Grafo . . . . . . . . . . 64 5.1 Estrutura de um Benchmark . . . . . . . . . . . . . . . . . 73 5.2 Estrutura hierárquica do documento de teste gerado pelo gerador de dados XML - [Rahm, 2000]. . . . . . . . . . . . 78 5.3 DTD de controle de documentos para XMarch-01, . . . . 79 5.4 Componentes da Arquitetura Benchmark XMach . . . . . 80 5.5 Tempo médio gasto pela CPU para execução das Consultas 98 A.1 Instalação do XCheck . . . . . . . . . . . . . . . . . . . . . 112 A.2 Estrutura arquivo engines.xml . . . . . . . . . . . . . . . . 113 A.3 Arquivo experiment . . . . . . . . . . . . . . . . . . . . . . 114 A.4 Status que o programa dá após o comando $./XCheck.pl run example . . . . . . . . . . . . . . . . . . . . . . . . . . 114 A.5 Alterando o arquivo experiment . . . . . . . . . . . . . . . 116 A.6 Interações realizadas pelo Xcheck para chegar ao resultado 117 A.7 Arquivo experiment adaptado ao Oracle . . . . . . . . . . 120 B.1 Instalação BD Exist . . . . . . . . . . . . . . . . . . . . . 121 B.2 Organização Hierárquica das coleções . . . . . . . . . . . . 123 B.3 Tela de criação de coleções no Banco de Dados XML eXist. 123 B.4 Armazenamento dos documentos aluno.xml e curso.xml no Banco de Dados eXist . . . . . . . . . . . . . . . . . . . . vii 124 B.5 Documento curso.xml após armazenado no banco de dados 125 C.1 Arquitetura do Oracle XML DB . . . . . . . . . . . . . . . 127 C.2 Instalador Oracle . . . . . . . . . . . . . . . . . . . . . . . 128 C.3 Produto a escolher para a instalação . . . . . . . . . . . . 128 C.4 opções para a instalação . . . . . . . . . . . . . . . . . . . 129 C.5 Criação do BD . . . . . . . . . . . . . . . . . . . . . . . . 129 C.6 Instalação do Componente XML . . . . . . . . . . . . . . . 130 C.7 Resumo da instalação . . . . . . . . . . . . . . . . . . . . . 130 C.8 Tela de status de configuração . . . . . . . . . . . . . . . . 131 C.9 Criação da Tabela Aluno no Oracle . . . . . . . . . . . . . 132 C.10 Criação da Tabela Curso no Oracle . . . . . . . . . . . . . 132 C.11 Inserir dados na tabela aluno . . . . . . . . . . . . . . . . 132 viii Lista de Tabelas 3.1 Principais Diferenças entre XML e HTML . . . . . . . . . 4.1 Algumas diferenças entre dados Semi-Estruturados e Estru- 33 turados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2 abordagem grafo . . . . . . . . . . . . . . . . . . . . . . . 55 4.3 Comparação entre Banco de Dados Relacional e Banco Dados XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.1 Parâmetros de geração de documentos . . . . . . . . . . . 80 5.2 Banco de dados suportados pelo XCheck de forma padrão . 87 5.3 Resumo de Benchmarks para Bancos de Dados XML . . . 88 5.4 Alguns Bancos de dados XML nativos existentes . . . . . . 91 5.5 Bancos de dados com suporte a XML . . . . . . . . . . . . 92 ix Lista de Algoritmos x Capı́tulo 1 Introdução A necessidade de organizar e gerenciar a informação faz com que não baste que um dado seja simplesmente armazenado, é indispensável que posteriormente a isso tal dado possa ser consultado com semântica correta e em tempo hábil. Faz parte do campo de ação dos Sistemas Gerenciadores de Bancos de Dados administrar a infomação de maneira a assegurar a integridade do que está guardado. Neste contexto, justifica-se a constante prática dos estudiosos e pesquisadores da área de Banco de Dados em buscar formas de aprimorar esses sistemas com intuito de garantir que as informações estarão de fato seguras e ao alcance dos seus devidos usuários. O sucesso nos resultados obtidos por parte de estudiosos da área já é vivenciado e vêm sendo aprimorado mediante as necessidades que vão surgindo no coditiano, conforme já dito anteriormente. E uma das mudanças de paradigmas mais impactantes nesse contexto de armazenamento de informações surge a partir do aumento do fluxo de informação que trafega pela Internet. Esse fluxo crescente justifica-se pela diversidade de aplicações que trabalham dados conforme a polı́tica da sua empresa, ou seja, na Internet passam a trafegar dados que possuem uma natureza heterogênea, uma estrutura não estável e não tão rı́gida e suscetı́vel a mudanças (Dados Semi-Estruturados tratados em Capı́tulos seguintes) [Moraes, 2001]. Dados advindos da Internet não podem ser armazenados em Banco de Da- 1 dos tradicionais, onde a informação e a forma de organização já são prédeterminadas, com uma representação rı́gida e estável, sem que haja antes algum tipo de processamento. Neste trabalho, onde o foco é a Tecnologia de armazenamento de informação e dados cuja estrutura não é pré-determinada, será mostrado conceitos e modelos de Banco de Dados preparados e especı́ficos para receber tais tipos. A abordagem feita será delineada para dois segmentos, sendo o primeiro o armazenamento de dados semi-estruturados, levando em consideração especificamente a Linguagem XML (eXtensible Markup Language), por ser um formato que é bastante usado para intercâmbio de informações e portanto necessita ser armazenado. E a segunda abordagem será voltada para especificação de ferramentas automatizadas que possibilitem escolher entre as várias opções de Bancos de Dados já existentes no mercado para trabalhar Dados XML. Tal estudo será realizado no intuito de retratar duas frentes de pesquisa destinadas a obter uma solução para o problema de armazenamento de dados semi-estruturados, como exposto a seguir, [Moraes, 2001]: • Será mostrado o ponto de vista dos cientistas que acreditam na Adaptação dos Bancos de Dados já existentes e predominantes no mercado para receber dados XML, que são denominados Banco de Dados habilitados ou com suporte à dados XML. • E ainda será exposto a proposta dos estudiosos que apostam na consolidação de Bancos de dados especı́ficos para Documentos XML, chamados Banco de Dados Nativos XML. Como objetivo desse Trabalho, embasado nos dois modelos de Banco de Dados citados será feita uma análise comparativa acerca desses dois tipos de Sistemas Gerenciadores de Banco de Dados existentes para XML. Para isso abordaremos a técnica de Benchmark, ou seja, a aplicação de softwares para a avaliação de Banco de Dados XML. 2 Utilizando de pesquisas em livros e sites da Internet relacionados ao tema, o trabalho é dividido nos seguintes Capı́tulos: O primeiro e presente Capı́tulo destina-se a uma Introdução ao tema, situando o leitor desta em qual contexto vislumbra estar este trabalho. O Segundo Capı́tulo contempla definições importantes ao entendimento desde trabalho. Ou seja, neste capı́tulo é mostrado aspectos relevantes e conceitos sobre bancos de dados em geral. No Terceiro Capı́tulo será apresentado um breve Histórico acerca da Tecnologia de Armazenamento de Dados, desde a necessidade de se guardar a informação até a necessidade de melhorar as técnicas e o padrão de intercâmbio e tráfego de informação na Internet. No Quarto Capı́tulo serão abordados aspectos quanto a representação de um dado, a classificação, as formas de armazenamento, as técnicas de guarda, entre outras caracterı́sticas. Como o foco é o dado XML, estaremos ainda apresentando pontos relevantes quanto a estrutura de um Dado XML, técnicas de busca, tipos de banco de dados existentes, primeiros modelos e formas de representação, etc. No Quinto Capı́tulo após uma abordagem teórica do padrão XML e da apresentação de Bancos de Dados XML, será abordado formas do administrador do Banco de Dados (DBA) estar optanto entre qual técnica é a melhor diante da situação em que ele se encontra. Para conseguir tal feito, neste capı́tulo são apresentados técnicas de Benchmark, sendo que, para exemplificar seu uso são escolhidos dois Bancos de Dados, um do tipo Especı́fico a Documentos XML e o outro com Suporte para documentos XML (eXist e Oracle respectivamente). Estes testes são feitos com um Benchmark eleito, o XCheck. E por fim serão feitas conclusões acerca das experiências vivenciadas com este trabalho. 3 Capı́tulo 2 Armazenamento de Informações Definições Cresce com o passar dos anos o número e a variabilidade das informações que estão disponı́veis aos usuários por meio eletrônico. E em vão seriam estas informações caso não fosse possı́vel seu armazenamento para seu posterior acesso. Desta forma, os Bancos de Dados (BD’s) definidos como Sistemas Computadorizados que proporcionam meios para armazenamento e processamento de tais dados [Date, 2004], tornaram-se um componente essencial no cotidiano da sociedade moderna. A partir do momento que a comunidade acadêmica e empresarial admite a importância de aumentar as potencialidades de Sistemas para o gerênciamento das Informações, passa a existir um enorme esforço para simplificar o uso desses bancos de dados de forma a acomodar e integrar fontes de informações de naturezas diversas, com o intuito de garantir aos usuários segurança, confiabilidade e maximização de ganhos de tempo e consequêntemente lucros. Dentro deste contexto, faz-se necessário um entendimento a cerca dos termos e das caracterı́sticas dos Bancos de Dados de maneira geral. Sendo este capı́tulo, destinado a apresentar termos técnicos com os quais o leitor deve estar familiarizado. 4 2.1 Caraterı́sticas Fundamentais acerca dos Bancos de Dados É comum surgirem atividades que envolvam alguma interação com um banco de dados no dia a dia de qualquer ser humano, como por exemplo, ao realizar uma reserva em um hotel, ao fazer alguma transação bancária, ao pegar emprestado um livro em uma biblioteca, dentre várias outras situações cotidianas. Tais situações são exemplos de aplicações de bancos de dados, onde tradicionalmente a maior parte dos dados que são armazenados e acessados estão em formato textual ou numérico. Porém, em outros contextos é possı́vel ter dados com formatos diferentes, como imagens e sons, com caracterı́sticas próprias de cada contexto. Essas situações dispertam a comunidade acadêmica para estudos cada vez mais aprofundados de tecnologias que viabilizem o uso dos BD’s nas suas formas de manipulação. 2.1.1 Dados Dados são valores que representam conceitos, instruções, fatos sobre eventos ou alguma aplicação, de modo formalizado [Navathe e Elmasri, 2000]. São a parte mais preciosa de um sistema, pois são a representação convencional de fatos, conceitos ou instruções de forma apropriada para comunicação e processamento por meios automáticos. São registros organizados de transações e que representam um conjunto de sı́mbolos sem qualquer significado em si mesmos, desta forma, é necessário que possa ser feito algum processamento ou interpretação (mecânica ou humana) para que um dado possua um significado . O valor do dado por si só não constitui um conhecimento útil, não fornece interpretação sobre os eventos, nem qualquer base para ação. É necessário que os dados sejam armazenados para que possam ser então processados ou interpretados, principalmente se tal interpretação depen- 5 der de recursos temporais (dados guardados de maneira cronológica, ou histórica) ou da avaliação de mais de uma pessoa [Navathe e Elmasri, 2000]. 2.1.2 Informação Já foi falado anteriormente que um dado não possui valor semântico por si só, entretando um dado trabalhado gera informação [Date, 2004]. Ou seja, a partir de um dado registrado 1 , é possı́vel interpretar e processar tal dado por pessoas ou por meios automatizados, e esse resultado (a informação obtida) é o que dará sentido a uma aplicação. Faz-se ainda importante dizer que é a informação que permite a tomada de decisões, sendo que o significado dos dados ou a informação obtida apartir de dados armazenados, como ilustra a Figura 2.1 [Navathe e Elmasri, 2000], é o que fará com que o profissional ou a aplicação obtenha êxito nos resultados. Desta forma, a qualidade dos resultados obtidos apartir do uso das informações geradas depende também do meio de armazenamento, sendo que este meio deve possibilitar que [Date, 2004]: • Os dados armazenados estejam organizados; • Estejam disponı́veis no tempo certo e de forma correta; • E que possam estar acessı́veis às pessoas certas, com segurança. Figura 2.1: O Dado processado gera Informação 1 O termo registro é bastante usado em Banco de Dados para referenciar um dado armazenado, ou seja, um dado passa a ser um registro quando armazenado em algum sistema [Date, 2004] 6 Tais caracterı́sticas citadas anteriormente são implementadas em Sistemas denominados Banco de Dados, tratados com maior atenção na seção a seguir. 2.1.3 Banco de Dados Um Banco de Dados é uma coleção de dados relacionados, de tal forma que se possa recuperá-los quando necessário. Estes dados representam informações do mundo real e podem ser manipulados por usuários especı́ficos, [Takai et al., 2005] Geralmente quando se fala em um Banco de dados, se estabelece uma aplicação a qual estará acessando a Informação presente no banco de dados, uma camada de acesso e o Banco de dados em si, conforme Figura 2.2 a seguir: Figura 2.2: Acesso ao banco de Dados De acordo com [Navathe e Elmasri, 2000], os Bancos de Dados possuem algumas propriedades, dentre elas destacam-se: • Um banco de dados representa algum aspecto do mundo real, ou seja, uma parte da rotina de uma empresa, ou de alguma organização, cu7 jos dados precisam ser armazenados ( conforme citado na Figura 2.2, tendo em vista que é uma aplicação de cunho real). Imagina-se isso fisicamente e organiza de forma cronológica ou não o seu armazenamento. Há autores, como em [Martins, 2003], que chamam essa parte do mundo real de minimundo (miniword ) ou Universo de Discurso (UoD, Universe of Discurse). • Os dados para se relacionar devem seguir uma lógica, dados aleatórios, sem uma lógica na interação não podem ser referenciados como um Banco de Dados. Essa lógica é garantida exatamente pela caracterı́stica anterior, visto que, se o Banco de dados é baseado em algum aspecto do mundo real, ele segue uma lógica e possui semântica, ou seja, não são meros dados, são dados em um contexto, o que o caracteriza, após alguns processamentos, uma informação armazenada. • Todo Banco de Dados têm um objetivo especı́fico, portanto, deve ficar claro quais são seus usuários, quais as restrições de acesso, quais as aplicações estabelecidas. Sendo assim, um Banco de Dados tem sempre uma fonte de alimentação, uma relativa interação com o mundo real, o minimundo e um grupo de usuários [Navathe e Elmasri, 2000]. Observando a Figura 2.2 é possı́vel verficar que a fonte de alimentação é uma aplicação, é ela quem comunica diretamente com o mundo real. A camada de acesso faz a conecção entra a camada de aplicação e o BD e pode se fazer necessária ou não. O BD ainda possibilita que os dados estejam atualizados a todo instante, ou seja, operações de inserção, remoção e consultas são facilitadas e são coordenadas por um software gestor, o SGBD. O Sistema de Gerenciamento de Bancos de Dados (SGBD) ou DBMS (Database Management System), como mostra a Figura 2.3 é quem coordena o Banco de Dados, e por consequência a organização. O SGBD é composto por softwares e aplicativos que dinamizam as operações de 8 inserção, consulta e atualização de forma que usuários não autorizados não tenham acesso a componentes crı́ticos do sistema [Date, 2004]. Ou seja, o principal objetivo de um SGBD é proporcionar um ambiente tanto conveniente quanto eficiênte para recuperação e armazenamento das informações no Banco de Dados. Na Figura 2.3 é possı́vel observar que o SGBD é composto por um Banco de Dados, ou seja, um armazém de informações, sendo este por sua vez composto pelos dados. Figura 2.3: Sistema Gerenciador de Banco de Dados [Navathe e Elmasri, 2000] O SGBD provê um controle das informações e operações pertinentes no Banco de Dados. Logo, ao comparar o enfoque de Banco de Dados com o do armazenamento tradicional feito com arquivos é possı́vel visualizar diferenças que manifestam na comunidade acadêmica o desejo de continuar inovando com SGBD’s. Para que fique mais claro, a seguir algumas diferenças são apresentadas [Date, 2004]. • No processamento de arquivos cada usuário define e implementa os arquivos necessários para a aplicação especı́fica. Embora em muitos casos, usem de dados em comum, usuários diversos mantém arquivos 9 separados, atualizando-os somente para uso próprio. Isso faz com que haja trabalho redundante e desperdı́cio de memória. Em se tratando dos Bancos de Dados, um único repositório é mantido, sendo que após definido passa a ser acessado por diversos usuários. • O Sistema de Banco de Dados possui uma relativa descrição dos dados, as restrições de acesso e a estrutura do Banco de Dados. Essa definição é armazenada no catálogo2 do sistema, que contém informações como a estrutura de cada arquivo, o tipo de formato de armazenamento de cada itém de dados e várias restrições relativas aos dados. As informações armazenadas no catálogo são chamadas de metadados e descrevem a estrutura fundamental do Banco de Dados. Isso faz com que a inconcistência e as divergências geradas no caso dos arquivos sejam corrigidas nos Bancos de Dados, uma vez que é estabelecido um padrão e uma certa organização com relação ao acesso e armazenamento da informação. • Outra importante propriedade dos Sistemas de Banco de Dados é o Compartilhamento de Dados e Processamento de Transações de Multiusário, onde como o próprio nome coloca, os SGBDs possibilitam a vários usuários terem acesso a um mesmo repositório de dados ao mesmo tempo, com ferramentas que permitam que a informação armazenada esteja correta, não se corrompa e não seja redundante, o que não acontece com o Sistema de Processamento de Arquivos. 2.1.4 Arquitetura do Sistema de Banco de Dados Uma das caracterı́sticas que trazem destaque aos Bancos de Dados é o fato de fornecerem nı́veis de abstração, ou seja, tal técnica possibilita que detalhes não interessantes a todos usuários sejam revelados. De acordo com a arquitetura proposta por ANSI/SPARC - Study Group on Data 2 Um espaço na memória para armazenamento especı́fico de dados da estrutura do Banco de Dados [Date, 2004] 10 Base Management Systems [Stanley, ] é possı́vel visualizar três nı́veis dessa arquitetura, observe a Figura 2.4: Figura 2.4: Os três nı́veis da arquitetura [Date, 2004] 1. Nı́vel interno: Também conhecido como nı́vel de armazenamento, é o mais próximo do meio de armazenamento fı́sico. É aquele que se preocupa com o modo como os dados são fisicamente armazenados dentro do sistema. 2. Nı́vel externo: Também conhecido como nı́vel lógico do usuário, é o nı́vel mais próximo dos usuários, é aquele que se preocupa com o modo como os dados são vistos por usuários individuais. Nesse nı́vel usa-se muito o termo visões, que se refere à permissão de acesso que cada usuário possui. 3. Nı́vel conceitual: Também conhecido como nı́vel lógico de comunidade, ou ainda somente como nı́vel lógico, é um nı́vel ”indireto”entre os outros dois. O nı́vel externo se preocupa com as percepções dos usuários individuais, enquanto o nı́vel conceitual está preocupado com uma percepção do grupo de usuários (os usuários que acessam o Banco de Dados como um todo). Mas se faz importante lembrar que a maior parte dos usuários não está interessada no Banco de Dados inteiro, mas somente em alguma parte 11 restrita dele, desta forma haverá muitas visões externas distintas, cada qual consistindo em uma representação mais ou menos abstrata de alguma parte do banco de dados completo, e haverá exatamente uma visão conceitual, consistindo em uma representação igualmente abstrata do Banco de Dados em sua totalidade. Do mesmo modo, haverá uma ”visão interna”representando o modo como o Banco de Dados está armazenado internamente. Os nı́veis interno e conceitual são nı́veis implementados por meio dos Modelos de Banco de Dados [Takai et al., 2005]. Nos modelos de Bancos de Dados existentes faz-se necessário definir a sua estrutura (tipos de dados, relacionamentos e restrições que devem existir entre os mesmos). Tais modelos podem ser classificados como modelos de mais alto nı́vel ou conceituais (que estão próximos do modo como muitos usuários percebem os dados) a até o mais baixo nı́vel (modelos que definem a forma como os dados são armazenados com detalhes)[Date, 2004]. Dentro dos vários modelos existentes 3 é importante definir a diferença entre a estrutura (descrição) do banco de dados e os dados em si (o que será armazenado). A descrição do banco de dados é chamada de Esquema de banco de dados [Navathe e Elmasri, 2000]. E este é definido durante o projeto do Banco de dados, podendo ser alterado poucas vezes em BDs tradicionais. Porém os dados em si podem mudar com relativa freqüência, sofrendo alterações de acordo com cada usuário 4 . A seguir na Figura 2.5 é apresentado a arquitetura detalhada de um Sistema de Banco de dados. Observe a importância do Administrador do Banco de Dados (DBA) e do Sistema de Gerênciamento de Banco de Dados (SGBD), pois é o SGBD sobre as coordenadas do DBA que determina os acessos: 3 4 Estaremos falando desses modelos de Banco de Dados de forma cronológica no Capı́tulo 2 Mais adiante, será possı́vel ver que esta é uma das necessidades de aprimoramento reveladas com o surgimento da internet, devido a grande diversidade dos tipos de dados da WEB. 12 Figura 2.5: Arquitetura Detalhada do Sistema [Date, 2004] 2.1.5 Linguagens de Banco de Dados Um sistema de banco de dados proporciona dois tipos de linguagens: uma especı́fica para os esquemas do banco de dados e outra para expressar consultas e atualizações [Navathe e Elmasri, 2000]. Linguagem de Definição de Dados Um esquema de dados é especificado por um conjunto de definições expressas por uma linguagem especial chamada linguagem de definição de dados (Data Definition Language) ou DDL. O resultado da compilação dos parâmetros DDL’s é armazenado em um conjunto de tabelas que constituem um arquivo especial chamado diretório de dados ou dicionário de 13 dados [Santiago, 2004]. Um dicionário de dados é um arquivo de metadados, ou seja, um arquivo que possui informações a respeito dos dados a serem armazenados. Em um sistema de banco de dados, esse arquivo ou diretório é consultado antes que o dado real seja modificado e isso é feito em tempo de execução. A estrutura de memória e o método de acesso usados pelo Banco de Dados são especificados por um conjunto de definições em um tipo especial de DDL chamado Linguagem de Definição e Armazenamento de Dados (Data Storage and Definition Language). O resultado da compilação dessas definições é um conjunto de instruções para especificar os detalhes de implementação dos esquemas do banco de dados (os detalhes normalmente são ocultados dos usuários) [Navathe e Elmasri, 2000]. Linguagem de Manipulação dos Dados São várias formas de manipulação de dados tais como: • A recuperação das informações armazenadas no Banco de dados, ou seja é realizada uma consulta, que por sua vez é uma solicitação para recuperação de informações; • Inserção de novas informações no Banco de dados; • A remoção de informações do Banco de dados; • A modificação das informações do Banco de dados; Sendo assim, é necessário ter uma linguagem para facilitar tais formas de manipulação, o que é garantido com o uso da Linguagem de Manipulação de Dados ou a (DML). São classificadas segundo dois tipos [Navathe e Elmasri, 2000]: • DML procedurais - Exigem que o usuário especifique quais dados são necessários e como obtê-los. • DML não procedurais - Exigem que o usuário especifique quais dados são necessários, sem especificar como obtê-los. 14 As DML’s não procedurais são normalmente mais fáceis de aprender e de usar. Entretanto, como o usuário não especifica como obter os dados, essas linguagens podem gerar código menos eficiênte que os gerados por linguagens procedurais. Sendo então, uma consulta uma solicitação para recuperação de informações, a parte de uma DML responsável pela recuperação de informações é chamada de linguagem de consultas (query language), [Navathe e Elmasri, 2000]. SQL Uma DML procedural bastante conhecida é a SQL, ou Structured Query Language ou Linguagem de Consulta Estruturada. Foi originalmente desenvolvida pela IBM, quando ainda era chamada Sequel 2 [Silberschatz, 1999]. Normalmente, os diversos SGBDs relacionais implementam versões da SQL que possuem algumas pequenas diferenças entre si. Dentre os mecanismos para consulta aos dados, as principais funcionalidades oferecidas pela SQL são [Silberschatz, 1999]: • Ordenação dos resultados por um determinado campo da tabela; • Junções entre tabelas, ou seja, permite consultas a fontes diferentes; • Funções de agregação, que permitem que sobre os valores de uma determinada coluna da tabela, sejam realizadas operações. As principais funções oferecidas são: soma, média, máximo valor, mı́nimo valor e contagem; • Consultas aninhadas, um mecanismo para especificação de condições que representem a existência de valores de campos em outros campos de outras tabelas. É semelhante às junções; • Operações de conjuntos, que vêem os resultados de consultas como conjuntos, realizando operações de união, interseção e subtração. SQL oferece também, recursos para a inserção de dados, exclusão, junção, 15 criação de tabelas, restrições de segurança, definição de visões [Silberschatz, 1999]. Ela é utilizada basicamente para consultas a dados organizados segundo um esquema relacional, o que requer uma estrutura definida previamente. 16 Capı́tulo 3 Histórico e Desenvolvimento dos Bancos de Dados 3.1 Do surgimento da Escrita à automação do processo de armazenamento Neste capı́tulo será feita uma recapitulação rápida do histórico e evolução dos Métodos de Armazenamento de Informações e os Bancos de Dados, visto que tal tecnologia passou por várias gerações, e se conserva aprimorando suas funções e se especificando a cada aplicação. Neste trabalho, vamos dividir a História dos Bancos de dados em algumas gerações distintas. 3.1.1 Processamento manual de dados (papel e lápis) A primeira fase do Armazenamento de dados é caracterizada pelo surgimento da escrita até 1900. Segundo [Carabajal, 2006] a escrita além de servir como forma de comunicação, veio de uma necessidade de guardar informações para que pudessem ser usadas posteriormente, e mesmo antes com os hieroglifos, o armazenamento já era feito através de marcas (os homens ao voltar de uma caçada marcavam os lugares pelos quais eles passavam para facilitar sua volta) ou mesmo através de desenhos (desenhos feitos em rochas eram marcas para que os descendentes dos homens da 17 época viessem a conhecer sua cultura, uma forma de guardar informações para serem usadas no futuro). O homem evoluiu e a necessidade de guardar o trajeto realizado na floresta não soou mais como um problema, a automação dos processos Industriais, a Revolução das Máquinas trouxe consigo a necessidade agora de armazenar dados para agilizar tarefas cotidianas, maximizando os ganhos e o lucro do homem. Surgem os armazenamentos fı́sicos, grandes salas destinadas ao arquivamento e guarda de documentos necessários ao processo e constituição da história. A difı́cil tarefa dos responsáveis pela guarda dos documentos fisicos alinhada à necessidade de processamento, faz com que equipamentos para facilitar tal rotina fossem desenvolvidos. 3.1.2 Surgimento dos Computadores, cartões perfurados e máquinas eletro-mecânicas para ordenar e tabular registros Apartir da necessidade de processamento e automação do processo de guarda de informações, surgem os primeiros computadores [Junior, 2006] baseados em transistores, o que permitiu que a computação começasse a fazer parte da vida de algumas empresas que decidiram investir em processamento de dados. A princı́pio a idéia era trabalhar os dados e simplesmente processá-los (gravar e gerar relatórios) sem qualquer transformação. Com os ganhos trazidos por um processamento eletrônico, vieram também tentativas de melhorar os benefı́cios trazidos por tal técnica, surge os cartões perfurados [Junior, 2006]. Os cartões perfurados (placas perfuradas para guardar informações) foi um hábido iniciado entre 1801 e 1805, por Joseph Marie Jacquard, um matemático francês, que usou tal artifı́cio para controlar a produção de tecido a partir de padrões descritos em cartões perfurados (informações acerca do processo eram armazenadas para se manter um padrão na confeccção dos tecidos, na máquina de tecelagem). A máquina conseguia ler esses cartões, conforme um dispositivo encon18 trava um furo no cartão, e o atravessava, e com isso era cumprida uma determinada instrução. [Meirelles, 2002]. Na Figura 3.1, é possı́vel visualizar como era o formato de um cartão perfurado: Figura 3.1: Cartões Perfurados [Oliveira, 2000] Em 1890, Herman Hollerith usou a tecnologia dos cartões perfurados e sugeriu automatizar o procedimento do censo demográfico dos EUA1 . Hollerith formou uma companhia para produzir máquinas que registravam dados em cartões, os ordenava e tabulava. Esta companhia se tornou a IBM. Até 1955, muitas companhias tinham andares inteiros para guardar cartões perfurados e processavam milhares de registros a cada noite [Azevedo, 2006]. A seguir na Figura 3.2 é possı́vel visualizar como eram essas máquinas: Figura 3.2: Máquina de Cartões Perfurados [Azevedo, 2006] Os Cartões perfurados ainda não garantiam segurança o suficiênte para os dados, e não davam suporte para um armazenamento eficaz, além da grande demanda de espaço fı́sico para a guarda dos mesmos. Empresas 1 Hollerith obteve o resultado do censo em 6 semanas, enquanto a forma anterior ao procedimento proposto por ele demorava cerca de dez anos [Junior, 2006] 19 especializadas da área incentivaram estudos, o que garantiu o desenvolvimento de técnicas de armazenamento mais eficazes. A seção a seguir contextualiza o surgimento das Fitas Magnéticas e Sistemas de Arquivos. 3.1.3 Fitas magnétivas, Sistemas de Arquivos Na sequência, nas décadas de 40 e 50 aproximadamente, a empresa UNIVAC (Universal Automated Computer ) desenvolveu uma fita magnética capaz de armazenar o equivalente a 10 mil cartões. A máquina UNIVAC I construı́da por esta empresa, ficou conhecida do público americano por após cálculos e armazenamentos de dados, prever em uma eleição para a presidência (em 1952) a vitória do candidato Eisenhower [Meirelles, 2002]. O fato da UNIVAC proporcionar aos usuários, computadores capazes de armazenar programas, veio fazer com que mais tarde na Década de 60, surgisse a programação baseada em processos. Isto auxiliou os usuários nas operações realizadas diariamente com o uso dessas máquinas. Por exemplo, programas de adição eram organizados em função do processo de adição usado pela máquina: carregando os registradores com números, executando a instrução de adição, se preocupando principalmente com overflow 2 e underflow 3 , mas não se preocupando se os resultados eram armazenados para uso posterior [Figueiredo, 2003]. Devido a necessidade de conservar a informação, a maioria dos programas passou a usar o armazenamento em disco [Figueiredo, 2003]. Contudo, os dados gravados em disco ficaram logo difı́ceis de organizar e administrar. Essa situação levou os profissionais a criar pacotes de programas cuja finalidade era facilitar a manipulação do armazenamento em disco. Surgiram, então, os chamados sistemas de arquivo [Figueiredo, 2003]. Com eles, os programadores podiam criar arquivos, armazenar dados e lê-los mais 2 Estouro de pilha ou transbordamento de dados, sobrecarga de um registro, ou seja quando se excede a quantidade máxima de armazenamento de um registro [Moraes, 2001] 3 Quando se tenta retirar algo que não existe, ou seja quando se tenta remover uma informação de um registro vazio [Moraes, 2001] 20 tarde para análise e apresentação. Os aplicativos ainda eram geralmente organizados em função do modelo baseado em processos, e o aparecimento de linguagens de nı́vel mais elevado, especialmente do COBOL, resultou no desenvolvimento de grandes programas de aplicação comercial. Embora esses primeiros sistemas de arquivo auxiliassem o programador, os métodos de acesso aos dados eram ainda primitivos. O acesso ao dado era aleatório e requeria que o aplicativo soubesse a localização fı́sica dos dados no disco. Os endereços exigiam algoritmos de hashing 4 . Desenvolver algoritmos de hashing com uma distribuição boa e uniforme era uma habilidade importante, especialmente quando diferentes drives de discos exigiam diferentes algoritmos. Essa dificuldade fez surgir o primeiro recurso importante independente da implementação: o arquivo indexado que em vez de exigir que o aplicativo fornecesse a localização exata de um segmento de dados gravado, somente uma chave simbólica era necessária [Meirelles, 2002]. Dentre os sistemas de arquivos mais usados estavam os sistemas ISAM (Indexed Sequencial Access Method ) e VSAM (Virtual Sequential Access Method ), que rodam em equipamentos de grande porte. Esses sistemas, embora escassos, ainda são usados em algumas empresas para armazenar dados históricos (relatórios acessados com pouquı́ssima frequência, mas que precisam ser guardados por uma questão burocrática) [Figueiredo, 2003]. Nesta fase descrita, o processamento era orientado ao arquivo, sendo que era necessário que o arquivo fosse lido seqüencialmente, e a inserção de um novo dado era feita gravando-se os novos registros no arquivo principal. Tal operação demandava tempo e se o arquivo fosse grande ocasionava processamento desnecessário. A busca incessante por técnicas de armazenamento mais eficazes perdurou e a década de 70 inaugura Sistemas Gerenciadores de Dados. 4 Técnica de Consulta para encontrar um endereço de memória [Moraes, 2001] 21 3.1.4 Os primeiros SGBD’s da Década de 70 - Modelos Hierárquicos, Modelo em Redes Os primerios Sistemas Gerenciadores de Bancos de Dados surgiram com a demanda de maior processamento, visto que, não era o bastante as facilidades trazidas pelos sistemas de arquivos indexados, era necessário um sistema capaz de coordenar todos os ”arquivos”, ou seja, os registros armazenados, e não deixar estas atividades para o usuário. Os pesquisadores partiram da natureza muito das vezes hierárquica dos dados, considerando registros como uma árvore, onde um registro podia ter um subregistro e assim sucessivamente, ou seja, existia um arquivo denominado ascendente e o outro descendente, estabelecendo uma hierarquia, caracterizando assim os SGBD’s hierárquicos [Meirelles, 2002]. Figura 3.3: Modelo de Banco de Dados Hierárquico [Takai et al., 2005] Conforme observado na Figura 3.3, cada tipo de registos, ou seja cada nó da arvore está associado a outros por relações de 1 para N, em que do lado N das relações estão os filhos, as quais podem ser vistas como relações pai e filhos. Neste modelo não existem ligações entre elementos da árvore ao mesmo nı́vel ou nı́veis diferentes nem com elementos em diferentes ramos. Apenas existem ligações entre cada elemento e o seu superior (ou pai). Neste modelo, se um dado registo tiver de pertencer a mais que um ramo da árvore, terá que ser duplicado, podendo isto causar inconsistência na informação e uma redundância de dados. 22 O mais conhecido dos SGBD’s hierárquicos é o IMS (Information Management Systems ) da IBM. O problema desses tipos de sistemas é que em vários casos não era possı́vel armazenar dados de forma hierárquica. Um exemplo de uma situação como esta, é no caso de um produto, que pode ser comprado de vários fornecedores e um mesmo fornecedor pode fabricar vários produtos [Navathe e Elmasri, 2000]. Como solução ao problema apresentado anteriormente, foi projetado os Sistemas de Bancos de Dados em Rede. O primeiro a surgir foi o CODASYL. Neste modelo os dados também podiam ser representados em forma de árvore, porém um registro descendente podia ter qualquer número de ascendentes. Vale lembrar que em ambos os casos citados, a sua implementação era facilitada pelo uso de ponteiros [Navathe e Elmasri, 2000]. Figura 3.4: Modelo de Banco de Dados em Rede [Date, 2004] O modelo de rede foi desenvolvido aproximadamente na mesma altura do modelo relacional tendo sido utilizado em produtos comerciais antes deste último [Jackson, 1999]. Neste modelo, a informação é armazenada de forma semelhante ao modelo hierárquico, no entanto, ao contrário deste, cada elemento que constitui a estrutura pode ter ligações com vários elementos ao mesmo nı́vel ou em nı́veis diferentes, existindo relações um para muitos, muitos para um ou muitos para muitos. Este modelo permite que a navegação até chegar a um determinado elemento não necessite de passar por todos os nı́veis, podendo tomar atalhos. Desta forma, a informação 23 está organizada num grafo. Tal como o modelo hierárquico, este modelo caiu agora em desuso, existindo no entanto ainda em aplicações mais antigas. A Figura 3.4 representa o modelo de rede. Entretanto, os dois Modelos apresentados anteriormente ainda sofriam de deficiências tais como complexidade para efetuar consultas, acessos por meio de links ou ponteiros dentre outras, o que fez com que pesquisadores continuassem na batalha por um modelo que facilitasse a vida dos projetistas. O modelo Relacional aparece como meio de superar as deficiências dos Modelos apresentados anteriormente. 3.1.5 Meados da Década de 80 - Modelo Relacional Um estudo realizado por um pesquisador da área de Banco de dados, chamado Edgar Frank Codd veio formalizar a base para futuros desenvolvedores, ou seja, por meio de um trabalho teórico de representação de relacionamentos de dados complexos, Codd veio tornar mais simples a estrutura resultante, através do método denominado normalização [Silva, 2001]. A normalização consistia em separar armazenamento e recuperação de dados. Esse esforço culminou com o desenvolvimento de um novo tipo de banco de dados - O Relacional [Meirelles, 2002]. Apartir da normalização do Banco de Dados, o modelo relacional mudou a visão antes centrada nas ”estruturas de dados e nas operações fı́sicas”, para a modelagem dos dados no ambiente em que os dados se inserem. O foco do processo passou a ser visto de um nı́vel mais elevado, abstraindo detalhes de como implementar os aplicativos necessários para o bom funcionamento do sistema e potencializando o dado em si, suas caraterı́sticas, suas futuras formas de interpretação, que é o que realmente interessa para o uuário final. O banco de dados passa a ser definido apartir de um esquema, apartir de uma estrutura [Silva, 2001]. Sendo assim, os Bancos de Dados Relacionais consistem em um conjunto de tabelas, que contém linhas e colunas e se relacionam entre si, delimi24 tados por uma estrutura rı́gida. Cada tabela possui várias colunas e cada uma das colunas tem um nome único. Elas possuem ainda colunas que são definidas como campos chaves e possibilitam a conexão entre elas. É possı́vel realizar consultas por meio de linguagens como a SQL (Structured Query Language), sendo que toda consulta feita resulta também em uma tabela [Navathe e Elmasri, 2000]. Figura 3.5: Modelo de Banco de Dados Relacional [Date, 2004] 3.1.6 Final da Década de 80 até atual A busca pela melhora da performace nos Bancos de Dados já existentes fez surgir um novo modelo que atendesse também a comunidade daqueles que além de armazenar textos e registro cotidianos precisavam armazenar imagens, e dados mais complexos. • Modelo Orientado a Objetos: Posteriormente ao modelo Relacional que normalmente armazena somente dados, surge o Banco de Dados Orientado a Objetos (O.O.), que possui a caracterı́stica de armazenar não só dados, mas também métodos, ou seja procedimentos manipuladores destes dados. Estes não armazenam tabelas, nem 25 árvores, mas sim estados de objetos [Navathe e Elmasri, 2000]. Os sistemas de gerenciamento de Banco de Dados Orientado a Objetos cresceram fora das pesquisas durante o começo da metade dos anos 80, buscando ter sustentação da gerência da base de dados para objetos gráfico-estruturados. O termo “sistema de banco de dados orientado a objetos”surgiu por volta de 1985. • Objeto-relacionais: Após o surgimento dos Bancos de Dados Orientados a Objetos, surge também um banco de dados que mescla as facilidades dos BD’s Relacionais e dos BD’s O.O’s, sendo então chamados de Banco de Dados Objeto-Relacionais. Estes foram criados a partir da necessidade de se ampliar os conceitos do modelo orientado a objetos para o modelo relacional, ou seja, estender o modelo relacional para lidar com aplicações novas. São geralmente usados em aplicações para objetos complexos, tais como imagens, mapas, imagens geradas por satélite, previsão do tempo, projetos de engenharia, biologia, projeto genoma, etc [Navathe e Elmasri, 2000]. Nesse contexto, os Bancos de Dados Objeto-relacionais fazem uso de alguns conceitos do modelo de dados orientados a objeto dentro do modelo relacional. Alguns exemplos de caracterı́sticas presentes nas linguagens orientadas a objetos e abordadas nos modelos objetorelacionais são: a abstração de dados, herança de dados e funções, representação de atributos multivalorados dentro de uma tabela, dentre outros [Abiteboul, 2003]. Os Bancos de Dados até aqui apresentados atendem a uma comunidade, cujas as exigências se restringem a acomodar bem, dados que possuem uma estrutura representacional bem definida [Figueiredo, 2003]. Porém, atentos à ascensão da internet, ao crescimento e particularidade dos dados, os cientistas se motivaram a desenvolver sistemas de armazenamento que atendem a esta clientela, que integrem a informação de forma a facilitar 26 seu manuseio. 3.2 A internet no contexto de armazenamento de informações A Internet evoluiu a partir da Arpaneth, que foi um projeto do final da década de 60 sob o patrocı́nio da Agência de Projetos de Pesquisa Avançada do Departamento de Defesa dos Estados EUA (DARPA), para conectar todas as diversas redes do governo e acadêmicas dos Estados Unidos, em uma única rede, com protocolo de comunicação comum TCP/IP (Transmission Control Protocol/ Internet Protocol) 5 . Paralelo a este trabalho desenvolvido pela Agência DARPA, o cientista da computação Theodore Nelson implementava uma forma de estruturar a informação, permitindo que documentos de texto referenciem outros documentos e arquivos, tal mecânismo de acesso é chamado de hipertexto, e era feito por meio de links ou ligações entre tais documentos. Mais tarde por volta de 1990 Tim Berners-Lee aprimorou os conceitos desenvolvidos por Ted Nelson (como era chamado o Theodore Nelson), contribuindo com a idéia do browser 6 , onde os links propostos por Ted foram implementados, ou seja, por meio de um browser gráfico que podesse integrar todos os diferentes tipos de informações em uma única janela. Isto facilitou ao usuário final que ganhou a praticidade de não ter que usar todos os comandos e procedimentos separados que precisavam usar antes. O empenho e dedicação dos ciêntistas anteriormente citados e de outros contribuintes do processo de aprimoramento sofrido pela Internet trouxe 5 O modelo TCP/IP - como muitos outros modelos de protocolos - pode ser visto como um grupo de camadas, em que cada uma resolve um grupo de problemas da transmissão de dados, fornecendo um serviço bem definido para os protocolos da camada superior. Estas camadas mais altas estão mais perto do usuário (camada de aplicação), lidam com dados mais abstratos e confiam nos protocolos das camadas mais baixas para traduzir dados em um formato que pode eventualmente ser transmitido fisicamente. 6 Um navegador (também conhecido como web browser ou simplesmente browser, termos em inglês). O termo browser vem do verbo to browse que significa olhar páginas de um livro, revista, etc, porém o termo neste caso refere-se às páginas da internet 27 um sucesso indescritı́vel a Internet, fazendo com que sua diversidade, sua heterogeneidade e o crescimento ”desordenado”dos dados despertasse a comunidade cientı́fica da área de Banco de Dados para o estudo e a especificação de uma base que atendesse também a esta aplicação. A justificativa para tal estudo vem da própria natureza dos dados, e da constante necessidade de intercâmbio de informações geradas no mundo do business-to-business 7 e e-commerce 8 . Cada empresa adota sua própria polı́tica de transporte de dados, gerando consequentemente dificuldade quanto a quesitos de portabilidade e integração entre sistemas. No cenário proposto pelos BD’s tradicionais, fazia-se necessário que os dados apresentassem a mesma estrutura. Ou seja, BD’s tradicionais pedem um esquema pré-definido, uma estrutura rı́gida, enquanto que os dados no ambiente web são diversificados e não possuem essa estrutura rı́gida, sendo denominados semi-estruturados [Mello, 2003a]. Então, há a necessidade de realizar a comunicação entre essas duas abordagens de troca de informação, sendo esta necessidade uma parte integrante do objetivo desse trabalho. 3.2.1 Uma mudança de paradigma Em comparação com sistemas convencionais de gerenciamento de banco de dados, a comunicação com dados na Web apresenta uma mudança essencial de paradigma. A abordagem padrão de dados é baseada em uma arquitetura cliente/servidor. O cliente, pessoa ou programa, emite uma consulta que é processada. Por sua vez, o servidor responde a esta consulta [Figueiredo, 2003]. Observe a Figura : 7 8 Comércio Eletrônico feito entre Empresas [Garber, 2004] Comércio realizado via internet, ou seja comércio eletrônico [Garber, 2004] 28 Figura 3.6: Arquitetura tradicional de banco de dados Cliente/Servidor [Mello, 2003a] Já no contexto Web, considera-se uma abordagem de ”múltiplas camadas”. A camada mais baixa consiste de fontes de dados, também chamadas de servidores. Estes podem ser servidores de banco de dados convencionais, podem ser também sistemas legados9 , servidores de arquivos ou qualquer aplicação que produza dados. A camada mais alta, ou seja a camada do Cliente, consiste em interfaces ou aplicações com o usuário. Entre a camada do Cliente e a camada do servidor podem haver camadas intermediárias, frequentemente chamadas de Middleware, ou seja são camadas que transformam, integram ou adicionam valor aos dados [Abiteboul, 2003]. Observe a Figura : 9 Sistemas existentes, que foram desenvolvidos no passado, com métodos de análise e programação obsoletos, pouco documentados, usando linguagens ultrapassadas [Figueiredo, 2003]. 29 Figura 3.7: Arquitetura de Aplicação com Base na WEB [Abiteboul, 2003] No nı́vel mais simples, não há camadas intermediárias e a interação é diretamente entre clientes e servidores. Os dados fluem dos servidores para os clientes, enquanto consultas são mandadas na direção inversa. O processamento da consulta no lado do servidor consiste em traduzir a consulta para o modelo de dados próprio do servidor. O resultado é novamente processado para modelo de dados de lógica comum, de forma que o cliente possa entendê-lo. Pesquisadores de Banco de Dados interessados em integração de dados trabalham no entendimento do Middleware. Uma abordagem é o data warehousing. O middleware importa dados da fonte e os armazena em um banco de dados intermediário especialmente construı́do (o warehouse), que é consultado pelo cliente. A principal dificuldade com esta abordagem é manter o banco de dados em dia quando as fontes são atualizadas. Uma segunda abordagem é um Sistema Mediador, onde as consultas do cliente são transformadas e traduzidas junto à fonte de dados. Resultados parciais de várias fontes são integrados pelo mediador em tempo real, isto resolve o problema de atualizações, mas aumenta a carga para comunicação e atualizações [Abiteboul, 2003]. Houveram várias tentativas que foram se aperfeiçoando na arte de inte30 grar dados num ambiente tão dinâmico quanto é a internet. O surgimento de tecnologias como as linguagens de Marcação tais como a GML (Generalized Markup Language- Linguagem de Marcações Genéricas), a SGML ( Standard Generalized Markup Language - Linguagem Padrão de Marcações Genéricas) e posteriormente a XML ( EXtensible Markup Language ou, em português, Linguagem extensı́vel de formatação). Vieram melhorar as formas de representação e manipulação de dados semi-estruturados, como serão abordados nas seções seguintes. 3.2.2 Linguagens de Marcação no Contexto de Armazenamento O surgimento das Linguagens de Marcação foi marcante na década de 90, com o aparecimento da Web. Estas linguagens permitem a construção de padrões públicos e abertos que vêm sendo criados para se tentar maiores avanços no tratamento da informação; elas minimizam o problema de transferência de um formato de representação de um documento para outro, e liberam a informação das tecnologias de informação proprietárias. Sendo assim considera-se todo documento como constituı́do de três componentes, claramente distintos e separados: (a) conteúdo, (b) estrutura e (c) estilo (ou formatação). O conteúdo é a informação propriamente dita, a estrutura define como se dá a organização da informação, ou das idéias, no documento e o estilo define o visual de apresentação das informações ao usuário. Neste trabalho, não estamos preocupados com o estilo, ou seja com a apresentação das informações, mas sim com o conteúdo e a estrutura desse documento, por isso a seguir será apresentado algumas linguagens que têm em seu contexto a caraterı́stica de se preocupar com o dado em si, não com a apresentação: • SGML (Generalized Markup Language) A SGML foi proposta em 1986 para permitir a definição de documentos de acordo com sua estrutura e conteúdo, independente de sua apresentação [Iso, 1986]. O intercâmbio e troca de dados seria favorecido se a SGML obtivesse 31 êxito com isso, e o armazenamento passaria a usar das facilidades de tal implementação. É uma linguagem genérica para a descrição da estrutura lógica de documentos, permitindo a definição de linguagens especı́ficas, ou seja geradas a partir das regras definidas por ela, o que fez com que padrão SGML desse origem a outros padrões que surgiram com a demanda do WWW (World Wide Web) por novos recursos. A linguagem SGML é um padrão muito poderoso e geral, tendo sido utilizada em ramos como o da publicação técnica, indústrias farmacêuticas, companhias aeroespaciais, automotivas e de telecomunicações. Mas apesar dos benefı́cios que podem ser ganhos usando SGML, sua base de usuários foi limitada a grandes empresas, pois se trata de uma linguagem muito complexa e extensa, fazendo com que os custos com implementação não sejam tão triviais [Iso, 1986]. Para remediar os problemas enfrentados pela SGML, surge então um subconjunto da SGML, o XML (Extensible Markup Language) tratado a seguir. • XML(Extensible Markup Language) A Web, devido ainda não possuir um padrão barato e acessı́vel a todos, precisava descobrir um meio de estabelecer um padrão para transmissão de dados sem uma estrutura pré-definida e sem a complexidade da SGML, fato já afirmado no tópico anterior. Partindo dessa premissa, o trabalho conjunto de um grande número de empresas (Oracle, IBM, Compaq, Xerox, Microsoft, dentre outras) e de pesquisadores (MIT - USA, INRIA - França, Universidade de Keio Japão) reunidos no World Wide Web Consortium (W3C) 10 em 1996, com o objetivo de criar um formalismo para facilitar a troca de da10 Órgão que desenvolve tecnologias (especificações, diretrizes, programas e ferramentas) para conduzir a Internet ao seu potencial máximo, funciona como um fórum para informação, comércio, comunicação e entendimento coletivo [W3C, 1996] 32 dos na Web, veio culminar com o surgimento da XML (eXtensible Markup Language) [W3C, 1996]. A XML é uma linguagem de marcação, assim como a Hypertext Markup Language (HTML). A principal diferença entre essas duas linguagens de marcação é o enfoque, a HTML é voltada à apresentação e a XML permite a associação de tags definidas pelo usuário para descrição de conteúdo, algumas diferenças são mostradas na Tabela 3.1. Neste sentido, enquanto os elementos HTML são pré-definidos e, portanto, não podem ser alterados, na XML é permitido que sejam criados conforme a necessidade da aplicação, provendo assim, extensibilidade [Martins, 2003]. Outro ponto que também diferencia HTML de XML é o fato de que em documentos HTML, como a preocupação é somente com a apresentação não é possı́vel fazer consultas e isso também motivou os desenvolvedores da XML a criar uma linguagem que permitisse consultas com o máximo de eficiência possı́vel, o que aproxima o documento XML de um Banco de Dados. Tabela 3.1: Principais Diferenças entre XML e HTML XML [Heuser et al., 2005] HTML Descreve uma unidade de informação Apresenta uma unidade de informação Foca no que o Dado Significa Foca na Apresentação do dado Troca de Dados entre Aplicações Apresentação do dado Após a união de diversas empresas e entidades educacionais, em 10 fevereiro de 1998 vêm a tona então, a publicação da recomendação para versão 1.0 da linguagem XML, atualmente encontra - se na versão 1.1 [W3C, 1996]. Embora o propósito original da iniciativa da XML fosse a definição de uma linguagem de marcação voltada para o ambiente Web, esta 33 linguagem também se mostrou uma forma interessante para a representação de dados estruturados11 e semi-estruturados 12 , tornando-se um importante meio de representação no transporte e interoperabilidade dos dados [W3C, 1996]. Devido a essa caracterı́stica, cada vez mais empresas da área de negócios eletrônicos e finanças vêm aderindo à utilização de tecnologias associadas à XML. Como essas aplicações exigiam um controle de segurança e maior grau de confiabilidade, não demorou muito para que os documentos XML (ou seja, documentos escritos segundo as regras desta linguagem) recebessem atenção das principais ferramentas gerenciadoras de banco de dados, os SGBDs. Os SGBDs adaptados para tratar documentos XML são chamados de XML habilitados, enquanto os SGBDs desenvolvidos com a finalidade de lidar com documentos XML são chamados de XML nativos [Martins, 2003]. 3.3 Bancos de Dados para documentos XML Em 1998, começam a surgir comercialmente os primeiros bancos de Dados para armazenamento de documentos XML. Após o despertar dos desenvolvedores para o crescimento de tais dados na Web veio a necessidade de tratar estes dados e armazená-los em um repositório especı́fico de forma a facilitar sua manipulação. O XML é uma linguagem de marcação que trabalha com dados semiestruturados (tratado no próximo Capı́tulo), sendo que do pondo de vista de um Banco de Dados, um documento XML é uma coleção de dados. Porém não tem em muitos casos uma estrutura tão rı́gida quanto a exigida pelos BD’s relacionais por exemplo, combinando linguagem natural com uma certa linha de rigidez [Figueiredo, 2003]. Como já citado anteriormente, os SGBDs adaptados para tratar do11 12 Dados com uma estrutura rı́gida de organização, melhor apresentados no próximo Capı́tulo Uma estrutura não tão rı́gida de organização, também detalhado no próximo Capı́tulo 34 cumentos XML são chamados de XML habilitados, enquanto os SGBDs desenvolvidos com a finalidade de lidar com documentos XML são chamados de XML nativos [Martins, 2003]. Estes tipos de Sistemas de Banco de Dados serão melhor apresentados no capı́tulo seguinte, onde também será abordado a tecnologia XML. Sendo assim, neste Capı́tulo foram abordados algumas das gerações e momentos pelos quais os principais Bancos de Dados passaram e a necessidade de ampliar ou mesmo apresentar novos Bancos de Dados nesta lista para tratar de dados com caracterı́sticas não tão rı́gidas e não tão formais (os dados semi-estruturados). Tal tentativa será constantemente abordada neste trabalho, visto que este é o objetivo do mesmo. Em alguns momentos foram citados exemplos de dados que trafegam pela internet, e portanto merecem um tratamento especial, devido a natureza heterogenea e citada no parágrafo anterior. Na Figura 3.8 é apresentado um esboço da evolução pela qual os Bancos de Dados passaram até chegar no foco deste trabalho, ou seja, o tratamento especial que se deve dar a dados cuja natureza é heterogênea e os Bancos de Dados especiais para trabalharem com o padrão XML. Figura 3.8: Evolução dos Bancos de Dados até a necessidade de Bancos de Dados especiais para documentos XML[Santiago, 2004] 35 Capı́tulo 4 Dados - Sua Representação, sua estruturação e a utilização de XML O sucesso da Internet culminando com o seu crescimento veio justificar a necessidade de encontrar mecanismos para viabilizar o armazenamento, o acesso e atualização destes dados, visto que os mesmos não podem ser consultados através de técnicas tradicionais de Bancos de Dados. Isto se dá devido uma estrutura heterogênea, na qual dados advindos de fontes distintas, de naturezas diversas se cruzam diariamente, impossibilitanto técnicas tradicionais de manipulação de dados. Este capı́tulo destina-se a abordar conceitos relevantes acerca do aspecto prepresentacional do dado, relatando caracterı́sticas interessantes e primordiais na definição da estrutura representacional, na existência ou não de padrões que estes dados precisam seguir para garantir o sucesso das operações realizadas no armazenamento em um determinado repositório de dados. Consequentemente serão abordados também conceitos acerca da linguagem XML, uma linguagem para representação de dados, que será apresentada neste capı́tulo e podendo também ajudar na tecnologia de Banco de Dados, dinamizando o acesso e integrando fontes de dados. 36 4.1 Classificação de Dados apartir de sua representação Estrutural Manipular um dado constitui-se em vários passos, dentre tais é necessário a princı́pio entender a sua natureza e a forma de representá-lo, visto que em bases de dados eletrônicas pode-se distinguir formas de representação especı́ficas para cada aplicação e de acordo com cada banco de Dados, então definir as operações relevantes para o usuário. O modelo de dados é primordial para a definição da forma como será armazenados dados. Porém é necessário definir que tipo de dados pode ser guardado em cada base de dados, tomando cuidados com relação à estrutura. Nas seções seguintes serão abordados aspectos quanto a classificação dos dados, sua representação (sua estrutura) e suas caracterı́sticas particulares [Mello, 2003a]: 4.1.1 Dados Estruturados Os Dados Estruturados são dados que seguem um modelo pré definido (definição a priori), ou seja, na sua representação são regidos por regras, estão subordinados a manter um padrão imposto por um esquema (um conceito abordado no Capı́tulo 2) definido antes do conhecimento dos dados [Mello, 2003a]. Um esquema pode prever quais elementos são encontrados nos documentos, a ordem em que estes elementos podem aparecer, a hierarquização destes elementos, o tipo de dados do conteúdo destes elementos, entre outros. Um exemplo disso são os Bancos de Dados Relacionais, que seguem a descrição do banco de dados definida durante o seu projeto, o qual fornece uma estrutura, ou seja, a forma como os dados serão armazenados [Hunter et al., 2003]. Isto limita o usuário na inserção e dificulta a integração de BD’s diferentes, visto que de acordo com o seu respectivo programador, cada Banco 37 de Dados é regido por seu esquema. 4.1.2 Dados Não Estruturados Ao contrário dos dados estruturados, os dados não estruturados não apresentam qualquer padrão, não podem ser armazenados de acordo com um esquema. Exemplo de tais dados são as imagens, o texto livre, etc [Mello, 2003a]. E para este trabalho só serão citados, uma vez que não faz parte do escopo deste. 4.1.3 Dados Semi - Estruturados Dados semi-estruturados possuem caracterı́sticas intermediárias em relação aos tipos definidos nas seções anteriores a esta, ou seja, esta categoria traz consigo uma representação não completamente rı́gida, nem tão pouco completamente sem estrutura. São classificados assim por possuirem uma Representação Estrutural Heterogênea [Hunter et al., 2003]. O exemplo mais prático e conhecido de dados com essa caracterı́stica heterogênea citada são os dados contidos na web, onde fontes de origens diversas, com padrões diferentes são lançados neste mundo virtual que é a internet. Outro ponto que merece ser mencionado em relação a estes dados é que são considerados auto-descritivos, pois possuem uma representação na qual o esquema está presente no próprio dado, sendo assim o esquema não é pré-definido, como no caso dos Dados Estruturados. Esquemas para Dados Semi-estruturados são definidos após a existência dos mesmos. E por possuirem esta representação auto-descritiva, os valores e a estrutura em muitos casos se confundem. Outra caracterı́stica desse tipo de representação de dados, é a sua Estrutura Irregular. Na internet, por exemplo, onde existem formas diferentes de representar o mesmo objeto, com campos diversos e não padronizados, operações de armazenar ou acessar grandes bases de dados podem se tornar 38 dispendiosas e desgastantes, além de alterar a semântica dos dados, caso não haja técnicas de armazenamento eficazes. Tomando como exemplo uma base de currı́culos de todos colaboradores de uma multinacional, aspectos individuais de cada um, como a escolaridade, experiência, conhecimento em idiomas poderiam em muitos casos serem campos que não seriam preenchidos e consequentemente estes campos ficariam em branco, trazendo desperdı́cio de memória e aumento do tempo de resposta à alguma requisição feita pelo usuário. Além disso, considerando ainda bases de dados de diferentes etnias e culturas diferentes, este seria outro fator que tornaria difı́cil a integração dessas bases, onde todas as filiais teriam que seguir o mesmo padrão. Para facilitar o acesso aos usuários do sistema, dando mais sentido (semântica) à aplicação, a Estrutura Irregular é um aspecto que deve ser considerado, sendo a particularidade de cada filial, de cada departamento mantida ao máximo, com o mı́nimo de pré-processamento. Dá-se aqui um motivo pelo qual a ciência tem investido no estudo de dados Semiestruturados. Desta forma é possı́vel visualizar na figura 4.1 em qual posição se encontra os dados Semi-Estruturados em relação a classificação dos outros tipos, ou seja, em uma posição intermediária. Figura 4.1: Tipos de Dados e exemplos [Mello, 2003b] 39 Algumas diferenças entre dados Semi-estruturados e dados Estruturados são apresentadas na Tabela 4.1 a seguir: Tabela 4.1: Algumas diferenças entre dados Semi-Estruturados e Estruturados [Mello, 2003a] Dados Estruturados Dados Semi-Estruturados Esquema Rı́gido Esquema Não tão rı́gido Estrutura regular Estrutura Irregular Estrutura prescritiva Estrutura descritiva Esquema definido a priori em tempo de projeto Esquema pode ser definido depois do conhecimento dos dados Dados e estrutura são separados claramente Dados e estrutura se confundem, estrutura embutida nos dados A busca por mecanismos que auxiliam o entendimento das informações (antes, durante e depois da manipulação dos dados) tanto por aplicações quanto pelo homem está se tornando frequente, possibilitando o intercâmbio de dados. E é neste cenário que padrões e meios de representar a informação semi-estruturada da melhor forma possı́vel surgem. As linguagens de marcação surgem com o intuito de melhor representar um dado semi-estruturado, tentando minimizar o problema de transferência de um formato de representação de um documento para outro. No Capı́tulo anterior, foi falado sobre as linguagens de marcação e seu contexto histórico, enfatizando seus pontos fortes e fracos. Dentro deste seguimento, na próxima seção será abordada a XML, linguagem de marcação criada com o objetivo especı́fico de representar uma informação e facilitar seu manuseio por aplicações web que lidam com armazenamento de dados. 40 4.2 A estrutura de um documento XML A XML é uma linguagem de marcação criada com o propósito de estabelecer uma estrutura não tão rı́gida, mas passı́vel de ser usada para intercâmbio de dados via web [W3C, 1996]. Faz-se então necessário entender e visualizar sua estrutura para então captar o motivo pelo qual a XML têm-se consolidado por tais caracterı́sticas. Sintaxe Básica XML é uma representação textual de dados. O componente básico em XML é o elemento, ou seja, um texto delimitado por tags (marcas), como na Figura 4.2: Figura 4.2: Exemplo de um documento XML Essa representação textual de dados segue uma sintaxe, onde o documento deve obedecer as seguintes regras [Martins, 2001]: • A primeira linha do documento, que é opcional, consiste em uma instrução de processamento que define a versão da linguagem XML e a codificação usada no documento; Conforme Figura 4.2 onde a primeira linha corresponde a: <?xml version=”1.0”encoding=”ISO -8859-1”?> A versão aqui citada é a versão 1.0 sobre a codificação das normas da ISO -8859-1. 41 • Cada documento XML deve possuir apenas um elemento raı́z; Em 4.2 o elemento raiz é <cadastro>; • A cada elemento de abertura, deve haver outro de fechamento correspondente; Na figura 4.2 anteriormente citado, é possı́vel visualizar claramente, cada tag de abertura, possui sua respectiva tag de fechamento. Por exemplo: <nome> é uma tag de iniciação e é finalizada pela tag </nome>. Fazendo uma analogia a Banco de Dados, cada elemento poderia ser visto como uma coluna da tabela1 e os dados contidos entre tais tags podem ser comparados às linhas da tabela. • Deve-se respeitar a ordem de ocorrência dos elementos dentro do documento, ou seja, ter o cuidado de fechar a tag certa, no momento certo; • Os elementos de abertura e fechamento devem possuir o mesmo nome, inclusive respeitando letras maı́usculas e minúsculas; • Cada elemento pode ter um ou mais atributos, com seus respctivos valores entra aspas; • Cada elemento pode posssuir um ou mais sub-elementos; Sendo assim baseado nesta sintaxe é possı́vel obter o conceito de documento bem-formado, onde é um documento XML é considerado bemformado se atende à sintaxe XML usada dentro do documento. Por exemplo, se o programador não incluir marcas de fechamento ao inserir elementos no documento, se ele esquecer de incluir a declaração de documento XML no inı́cio do documento ou se o documento incluir caracteres que não possam ser analisados sintaticamente ou sejam inválidos, o programador não possuirá um documento XML bem formado [W3C, 1996]. Apesar do projetista ter muita liberdade ao descrever um documento XML, existe uma estrutura a ser modelada, não tão rı́gida como nos dados 1 Considerndo por exemplo Banco de Dados Relacionais 42 estruturados, como já falado neste trabalho, mas que merece ser discutida para que um documento XML seja validado [Abiteboul, 2003]. A seguir será tratado formas de padronizar a representação dos dados XML, validando-os e criando esquemas para tal fim. 4.3 DTD(Document Type Definition) O documento XML deve ser regido por uma gramática formal, ou seja, uma sintaxe. Uma das tecnologias relacionada a XML e que trabalha com tal designação é a DTD, ou Document Type Definition. A gramática especificadora DTD, estabelece regras que definem a composição do documento, informa quais elementos se relacionam com outros, indica para cada elemento todas as possı́veis marcações válidas, os elementos obrigatórios, seus atributos (se existem), etc [Pinto, ]. Sendo assim é possı́vel dizer que uma DTD permite especificar a estrutura básica de um documento XML para um determinado ramo, o que tornaria um padrão para aquele setor. Para exclarecer, a seguir um exemplo, Figura 4.3 Figura 4.3: Exemplo de uma DTD [Martins, 2001] O DTD da Figura 4.3 descreve um documento contendo o endereço de 43 alguém. O documento deve possuir um elemento <endereço> que contém <nome>, <logradouro>, <cidade>, <estado>, <cep>. Todos esses elementos devem existir, nessa ordem. O elemento <nome> contém um <titulo> opcional, seguido de <primeiro-nome> e <ultimo-nome>. Todos os outros elementos contêm texto (#PCDATA), [W3C, 1996]. É importante notar que a sintaxe do DTD é diferente da sintaxe da XML. Um DTD não é um documento XML. Para se construir um DTD é necessário que se conheçam as caracterı́sticas dos tipos de dados que os o documento XML vai conter, apesar de que é possı́vel fazer alterações no DTD quando necessário. Utilizando um DTD, os arquivos XML podem conter formatos próprios, podem ser utilizadas por um conjunto de pessoas. O DTD pode ser utilizado como padrão ate mesmo para verificar se os dados recebidos são válidos, apesar de que a sintaxe de um documento XML é diferente de um DTD. Os DTDs são opcionais dentro de uma estrutura XML, porém os dados enviados com um DTD são conhecidos como XML válidos, [W3C, 1996]. É necessário ainda salientar que na DTD não existe uma declaração distinta para dados do tipo string e dados numéricos, ou seja, são tratados da mesma forma. 4.4 XML Schema Definition Outra forma de formalização da estrutura dos dados é definida por meio do uso do XML Schema Definition - Definição de um Esquema para XML ou simplesmente XSD. XSD é uma recomendação da W3C lançada em 2001 e possui mais recursos para a especificação de esquemas em relação a um DTD, como o suporte a tipos de dados, a conceitos de orientação a objetos, como herança2 e polimorfismo3 , além de apresentar uma sı́ntaxe XML. 2 3 É possı́vel por meio de links que um documento XML herde caracterı́sticas de outro documento XML mudança nos dados, ou na estrututura dos mesmos [W3C, 1996] 44 Apesar de XSD ser mais expressivo que um DTD em termos de especificação de esquemas XML, DTDs ainda são amplamente utilizados e a grande maioria das ferramentas que realizam validação de documentos XML (chamadas parsers) operam sobre DTDs [Hunter et al., 2003]. Porém apesar da usabilidade dos DTSs, um esquema XML possui algumas vantagens vantagens em relação a um DTD, pois XML Schema utiliza sintaxe XML. Ou seja, um XML Schema é um documento XML. Isso significa que ele pode ser processado como qualquer outro XML. Com as mesmas ferramentas. Algumas caracterı́sticas são reforçadas a seguir: • XML Schema permite a definição de tipo de dado. Podemos definir elementos com tipo integer (inteiro), date (data), time (hora), string (caracteres), entre outros. Podemos ainda definir por meio do XDS os atributos autorizados, os elementos que são filhos, a ordem dos elementos filhos, se um elemento é vazio ou não • XML Schema é extensı́vel. Além dos tipos de dados definidos pela especificação do XML Schema, é possı́vel criar novos. Inclusive derivados de tipos de dados já definidos (herança). • XML Schema possui um poder de expressão maior. Por exemplo, elementos podem ser validados através de expressões regulares.[Graves, 2003] A seguir um Exemplo (Figura 4.4) explicitando melhor as caracterı́sticas de um XML Schema: 45 Figura 4.4: Exemplo de um XML Schema [Pinto, ] Como é possı́vel verificar no exemplo que possui a estrutura XML Schema (Figura 4.4), o código XML Schema é maior que o código DTD. Ao considerar a Figura 4.5 e a XML Schema descrita, algumas conclusões serão obtidas: Figura 4.5: Documento XML Uma DTD para a Figura 4.5ficaria assim: 46 Figura 4.6: DTD para Documento XML Com XML Schema ficaria assim: Figura 4.7: XML Schema para Documento XML Existem 2 tipos de schemas internos ou externos. Isto é, se o schema é interno vem incorporado num documento XML, e se é externo vem referenciado no documento XML, sendo que neste último caso, o mesmo documento XML pode referenciar vários schemas e o mesmo Schema pode ser referenciado por vários documentos. Após serem abordadas as definições de DTD e XML SChema, é importante citar o conceito de Documentos XML Válidos, onde um documento XML é considerado válido se ele contém um DTD ou XML Schema apropriada. É preciso seguir uma gramática, seja ela por meio da DTD ou XSD. Erros em documentos XML param um programa. A especificação XML proposta pela W3C diz que um programa escrito para processar XML deve parar caso encontre erros de sintaxe no documento. A razão é que um programa escrito para processar XML, será compatı́vel para qualquer documento XML [Heuser et al., 2005]. Isto também permite que um documento XML possa servir de base à troca de informação entre várias entidades uma 47 vez que desta forma será interpretado sempre da mesma forma por todas as aplicações envolvidas. O DTD e o XSD neste contexto podem ser utilizados por programas que precisem efetuar validações na estrutura do documento [Pinto, ], geralmente programas que envolvem a inserção ou atualização de informação num BD, ou ainda ser utilizado como documento de referência a outras aplicações que queiram utilizar a mesma estrutura para partilha de informação. 4.4.1 Representação - Árvores XML Documentos bem-formados podem ser representados como uma árvore, onde elementos e atributos correspondem aos nós da árvore [Abiteboul, 2003]. Assim, é comum usar o termo ”nó”como sinônimo para elementos e atributos, sendo que os nós-texto ou nós-folha são aqueles que não possuem descendentes e correspondem aos valores associados aos elementos e atributos. Existem Analisadores Sintáticos, também conhecidos como processadores XML, que têm o papel de verificar se um documento é bemformado, transformando-o em árvore para isso [W3C, 1996]. Os processadores XML são responsáveis pela interpretação de um documento XML, ou seja, disponibilizar o conteúdo do mesmo para um aplicativo. Ele é capaz de detectar problemas como formato de arquivos que o aplicativo não pode processar ou URL’s que apontam para recursos não válidos. Os processadores XML são dividos em duas partes [Mello, 2003a]: o manipulador de entidades e o parser. • Manipulador de entidades - O manipulador de entidades é a parte do processador XML responsável por localizar pedaços ou partes de documentos e manipular a substituição das referências. Esses pedações de documentos podem ser declarações de entidades ou outros arquivos de dados. • Parser - O Parser é a parte do processador XML responsável por ve48 rificar a integridade dos dados XML. O Parser pode ser executado de dois modos: sem validação e com validação. Um parser sem validação verifica a sintaxe do documento, ou seja, verifica se o documento é ”bem formado”. No Parser com validação, além da verificação da sintaxe, os dados são comparados com uma DTD. Deste modo, um Parser com validação é capaz de verificar se um documento é ”válido”. 4.5 Documentos Centrados em Dados e Documentos Centrados em Documentos Segundo [Srisvastana, 2004], um documento é Centrado nos dados (datacentric) quando a ordem dos nós e a estrutura do documento não é importante. Eles são designados para serem usados por alguma aplicação, é um documento composto por valores que não se relacionam entre si precisamente. Figura 4.8: Exemplo de um documento Centrado em Dados Segundo [Srisvastana, 2004] Documentos centrados em documentos (documentcentric) são usualmente escritos para consumo humano. Esses documentos são caracterizados por possuirem uma estrutura menos regular ou irregular, sendo que neste caso a ordem em que os nós ocorrem na árvore XML é importante. 49 Figura 4.9: Exemplo de um documento Centrado em Documentos No modelo centrado nos dados inserem-se documentos que utilizam o XML como forma de transporte de informação [Bourret, 2007], sendo destinados predominantemente a consumo por parte de computadores e não a uso por parte de humanos. Neste modelo, os documentos são caracterizados por possuı́rem uma estrutura regular e normalmente a ordem pela qual os vários elementos com o mesmo nı́vel na estrutura são representados é irrelevante. Outra caracterı́stica deste tipo de documentos é também o fato de apresentarem uma pequena granulosidade na informação [Bourret, 2007], isto é, as unidades mais elementares de informação estão ao nı́vel de elementos que suportam apenas dados ou de atributos, não existindo elementos com conteúdo misto de informação e sub-elementos. Documentos deste tipo são obtidos por exemplo quando se extrai informação de um BD e cuja informação é convertida para XML. Exemplos deste tipo de documentos podem ser ordens de compra, ficha pessoal de um paciente num hospital, registos de informação cientı́fica de vários tipos, etc. 4.6 Banco de Dados para documentos XML Como já citado em Capı́tulos anteriores, existem duas formas de armazenamento em se tratadando de documentos XML: ou se armazena os dados com esta caracterı́stica em BD’s nativos (criado com o propósito de receber somente dados semi-estruturados, XML), ou se armazena em BD’s habilitados (XML-enabled, ou também chamados de Bancos de 50 Dados Habilitados para receber documentos XML). Dentre os BD’s habilitados para receber documentos XML, o principal deles e usado neste trabalho como objeto de estudo é o Banco de Dados Relacional. 4.6.1 Banco de Dados Relacional habilitado para receber dados XML Segundo [Date, 2004] existem basicamente duas maneiras de armazenar um documento XML em um BD Relacional: 1. Armazenar o documento inteiro como o valor de algum atributo dentro de alguma tupla. 2. Dividir o documento e representar suas diversas partes como diversos valores de atributos dentro de diversas tuplas dentro de diversas relações. No primeiro itém descrito anteriormente, é definido um novo tipo de dados e o documento XML é armazenado inteiro em uma respectiva coluna do banco de dados, fato que faz com que informalmente, tal tipo de armazenamento seja chamado de coluna XML [Date, 2004]. Para armazenar documentos XML nessa abordagem é utilizado os tipos CLOBs (character large objects) onde todo o documento é tratado como texto tirando partido das funcionalidades de manipulação de texto disponı́veis no BD [Novais, 2006] e ainda se forem necessárias manipulações de partes do texto, o documento terá que ser lido como um todo pelo Banco de dados e posteriormente tratado. Alguns dos fatores que poderiam tornar essa abordagem uma opção apropriada são: • Dados usados em sua totalidade e não aos poucos. • Não são atualizados com frequência relevante. • Os documentos precisam ser armazenados de forma intácta. 51 Esta abordagem é apropriada para aplicações que visam o consumo humano final e consistem principalmente de texto em linguagem natural, [Moraes, 2001]. Considerando ainda a segunda forma de armazenar dados em Banco de dados Relacionais, o processo de armazamento não envolve quaisquer tipos de dados novos [Date, 2004], em vez disso, os documentos XML são divididos em partes - elementos e atributos, por exemplo - essas partes são então armazenadas como valores de diversos atributos relacionais. Sendo assim faz-se interessante dizer que neste caso o Banco de Dados não contém documentos XML. Porém nessa abordagem, é possı́vel visualizar alguns problemas. Um documento XML possui uma dada sequência, enquanto que não existe uma ordenação nos bancos de dados relacionais, como próprio nome diz, existe uma relação entre as tuplas. Como foi referido anteriormente, o modelo relacional é constituı́do por três partes: a BD é um conjunto de tabelas, que são conjuntos de registos, os quais são constituı́dos por campos que deverão ser atômicos (não podem ser eles próprios coleções de outros subelementos). Os documentos XML apresentam um conceito diferente, no qual a informação pode ser encarada como árvore de nós, [Novais, 2006]. Outro problema com relação a segunda abordagem citada é que alguma informação pode ser perdida quando um documento é particionado e se isso acontecer, se for necessário reconstituir esse documento apartir do Banco de dados Relacional, o documento gerado não possuirá as mesmas caracterı́sticas do documento original [Date, 2004]. Visando minimizar os problemas enfrentados com o particionamento ou o mapeamento do documento XML para as tabelas de um banco de dados relacional são propostas na literatura dois enfoques: grafos e nı́veis de granularidade [Graves, 2003]. 1. Grafos Na abordagem Grafo [Florescu e Kossamann, 1999], um documento XML é visto como um grafo orientado rotulado cujas arestas 52 são ordenadas e representam relacionamentos hierárquicos entre elementos, entre elemento e atributo, ou entre elemento/atributo e conteúdo. Diversas alternativas são propostas para o armazenamento deste grafo em um BD relacional. As duas alternativas mais viáveis em termos de desempenho são as seguintes: • Analisando a Figura 4.11, é possı́vel ver que todas as arestas são mantidas em uma única tabela com colunas que informam o nodo pai, o nome do rótulo, a ordem da aresta dentre todos os nodos filhos e uma referência a um nodo filho e ao valor (se houver) do nodo destino; Para exemplificar essa alternativa do uso de grafos, será analisado a figura 4.10 a seguir, e a tabela contento as informações que possibilitariam a sua ordenação segundo o conceito de grafos na figura 4.11: Figura 4.10: Representação do documento XML com o uso de grafos 53 Figura 4.11: Abordagem em Grafo • arestas com o mesmo rótulo são mantidas em tabelas separadas, equivalendo a uma tabela para cada tipo de elemento ou atributo. Colunas que informam o nodo pai, a ordem da aresta e uma referência ao nodo (com um possı́vel valor) são necessárias; Para visualizarmos este caso na prática, consideremos ainda a Figura 4.10, onde as arestas em rótulo frutos desse gráfo serão exibidas a seguir: Figura 4.12: Tabela de rótulo Surgem então alguns questionamentos sobre qual a abordagem com relação à grafos seria a mais eficiente, considerar uma unica tabela (tabela de arestas) ou várias (tabela de rótulos) para o armazenamento dos documentos, na tabela a seguir é possı́vel distinguir e relacionar 54 os pontos fracos e pontos fortes dessas duas representações em grafos: Tabela 4.2: abordagem grafo [Heuser et al., 2005] Tabela de arestas Tabela para rótulos Uma única tabela Várias tabelas Bom desempenho para buscas na hier- Desempenho ruim para buscas na hierarquia arquia do documento do documento, pois exigem junções Armazena espaços nulos Não há desperdı́cio de espaço Desempenho ruim para buscas por um Bom desempenho para buscas por um deterdeterminado tipo de elemento ou atrib- minado tipo de elemento ou atributo uto - Em ambos os casos o desempenho é ruim na reconstrução do documento XML - Não há distinção entre elemento e atributo 2. Nı́veis de Granularidade Outro enfoque de armazenamento baseia-se em nı́veis de granularidade (ou de detalhamento) que podem ser definidos para um documento XML [Graves, 2003]. Em função destes nı́veis, um esquema de armazenamento relacional é definido. Três nı́veis de granularidade podem ser definidos: • Granularidade grande: Conforme a figura define uma única tabela para armazenar todos os documentos XML. As colunas desta tabela descrevem basicamente o identificador do documento, seu nome e um campo para o seu conteúdo. Este é o nı́vel com menor detalhamento de dados XML; 55 Figura 4.13: Granularidade Grande • Granularidade pequena: define uma tabela para cada tipo de elemento ou atributo existente em um documento XML, exigindo colunas adicionais para manter os relacionamentos hierárquicos entre elementos e a ordem de subelementos ou atributos de um elemento. Este é o nı́vel de maior detalhamento de dados XML; Figura 4.14: Granularidade pequena 56 • Granularidade média: define um meio termo entre os nı́veis de granularidade grande e pequena, ou seja, parte do esquema do documento é definida de forma estruturada (em geral os elementos de nı́vel superior no documento) e parte é armazenada na forma de um campo longo. A decisão pelos pontos exatos de divisão na árvore do documento depende basicamente do nı́vel de detalhe das consultas desejadas (e conseqüentemente, das colunas que necessitam ser indexadas) e do tamanho de buffer para transmissão de dados, que pode ser equivalente ao tamanho dos campos longos. Figura 4.15: Granularidade Média Sendo assim é possı́vel observar que o nı́vel de granularidade influencia diretamente no desempenho das consultas e na performance do banco de dados relacional como um todo, observemos então a figura, onde 57 é enfatisado algumas caracterı́sticas que se tornam mais evidentes segundo o nı́vel de granularidade: Figura 4.16: Nı́veis de Granularidade Quanto maior o nı́vel de granularidade, mais simples é a definição do esquema relacional e menos detalhes do documento XML são passı́veis de consulta. No nı́vel de granularidade grande não é possı́vel definir consultas declarativas com base em valores de elementos e atributos, por outro lado, não existe um custo associado à reconstrução do documento XML. Estes prós e contras devem ser considerados quando do projeto do BD relacional. Sendo assim, ainda faz-se necessário lembrar que o acesso a dados através de um SGBD deve considerar a estrutura lógica do modelo do BD para a definição de expressões de consulta. No caso de um BD relacional, a linguagem SQL é o protocolo padrão para acesso a tabelas. Caso um mapeamento de granulação pequena ou média atributos e elementos estão em tabelas e podem ser consultados via SQL. 58 4.6.2 XML Native Databases ou (Sistemas de Banco de Dados Nativos em XML) O termo ”SBGD XML nativo”surgiu pela primeira vez durante a campanha de lançamento do SGBD Tamino, que foi o primeiro banco de dados XML a ser desenvolvido. Devido ao sucesso da campanha, o termo passou a ser usado, desde então [Tamino, 2007]. Bancos de dados XML são um conjunto de documentos orientados ao processamento de dados, ou seja possuem a capacidade de tratar os dados Semi-Estruturados, preservando as caracterı́sticas nativas dos mesmos. Possui um gerenciador de dados que é capaz de armazenar e extrair dados no formato XML sem a necessidade de programação [Martins, 2003]. Não há uma definição formal do que é um SGBD XML nativo, entretanto uma possı́vel definição, a qual é bastante aceita, é a que diz que um SGBD XML nativo [Moraes, 2001]: • Define um modelo lógico para um documento XML e armazena e recupera documentos de acordo com esse modelo. No mı́nimo, o modelo deve incluir atributos, elementos, e ordem de documentos. Essa definição é bastante similar a de outros tipos de SGBD, obviamente baseada no modelo usado para cada um dos outros tipos de SGBD. • Tem um documento XML como unidade fundamental (lógica) de armazenamento, assim como um SGBD relacional tem uma linha como unidade fundamental (lógica) de armazenamento, por exemplo. • Não necessariamente tem um documento XML como modelo fundamental de armazenamento fı́sico. Ele pode, por exemplo, ser construı́do sobre um banco relacional, hierárquico, objeto-relacional. Banco de dados XML, também conhecidos como Banco de dados Nativos, possuem uma estrutura própria onde é possı́vel armazenar os dados XML na forma Nativa, não sendo necessários mapeamentos como no armazenamento em Banco de Dados Relacionais, pois nos Banco de Dados 59 Nativos XML possuem um modelo lógico especı́fico para tratar documentos XML, SGBD XML fornece acesso direto aos documentos XML e também a trechos dele, em banco de dados XML nativos é possı́vel armazenar recuperar e modificar os dados, porém para que isto aconteça um documento XML deve ter no mı́nimo uma Definição de elementos como DTD, por exemplo, e a ordem dos dados deve ser mantida no documento. SGBDs XML nativos são, geralmente, mais úteis para armazenar documentos do tipo ”centrado em documentos”porque esses tipos de SGBDs preservarem caracterı́sticas como ordem, comentários, sessões entre outras, enquanto que os SGBDs que suportam XML não preservam, uma forma de tentar manter a ”linguagem natural”e consequêntemente fazer com textos e informações conservem seu sentido. Além disso, os SGBDs XML nativos suportam linguagens de consulta XML, o que torna possı́vel uma consulta do tipo ”Retornar todos os documentos cujo primeiro parágrafo começa com uma palavra em itálico”. Obviamente que este tipo de consulta não é muito trivial em outro tipo de SGBD. 4.6.3 Caracterı́sticas de SGBDs XML Nativos A seguir algumas caracterı́sticas acerca dos SGBDs XML Nativos: Coleções de documentos Muitos SGBDs suportam a noção de coleção. Elas têm papel similar às tabelas em bancos relacionais ou diretórios em um sistema de arquivos. Um exemplo claro disso é quando se deseja armazenar todos os filmes de uma locadora. Para isso, pode-se usar uma coleção para armazenar os filmes e dentro dessa coleção uma coleção de atores de cada filme [Bourret, 2007]. Linguagens de consulta Quase todos os SGBDs suportam uma ou mais linguagens de consulta, sendo que as mais populares são a XPath e a XQuery, porém estaremos 60 apresentando também outras linguagens das quais a XPath e a XQuery aproveitaram algumas caracterı́sticas. No entanto, deve-se levar em conta na hora da escolha de um SGBD XML nativo a linguagem de consulta que mais se adequar às necessidades do sistema a ser desenvolvido [Bourret, 2007]. Lorel Um dos primeiros SGBDs criados para armazenar e gerenciar dados XML e outros tipos de dados semi-estruturados foi o Lightweight Object Repository (Lore) (citado no Capı́tulo 2), Sua linguagem de consulta nativa é a Lorel (Lore Language), cujas principais caracterı́sticas de acordo com [Pinto, 2003], são: • É projetada para ser utilizada sob um contexto de um SGBD, a Lorel suporta, além de consultas, operações de atualização e exclusão; • É possı́vel ser utilizada a cláusula WITH para reestruturar os dados resultantes da consulta, ou seja, criar um novo documento XML com estrutura diferente; • A sintaxe das consultas é do tipo SELECT-FROM-WHERE, sendo bastante semelhante à da SQL. XQL (XML Query Language) A XQL(XML Query Language) foi projetada por desenvolvida pela XSL Working Group em 1998 apresenta as seguintes caracterı́sticas principais, [Schuenck, 2004]: • Os resultados das consultas não retornam documentos com estrutura diferente do documento original; • Não permite a consulta a várias fontes; • As consultas formuladas em XQL são baseadas em contextos, que nada mais são que expressões de caminho com recursos adicionais. Elas aceitam comparações entre elementos e atributos, e o uso de funções nativas do XQL. 61 A XQL suporta apenas funções de agregação e operações de conjuntos, como funções auxiliares às consultas. Além disso, ela não suporta operações de inserção, exclusão, atualização, criação de esquemas e visões. XPATH e XQUERY É por meio da Linguagem XPATH (XML Path Language) que são explorados o conteúdo sequencial e hierárquico do documento XML, ou seja, por meio de expressões da linguagem XPath, é possı́vel identificar ı́tens pela sua localização na estrutura hierárquica do documento. Path em Inglês significa caminho, ou seja por meio de tal padrão é possı́vel encontrar uma possı́vel estrutura para o documento XML e dinâmizar uma consulta a esse documento. Um path é uma série de passos, ou um caminho para uma localização do seu alvo [W3C, 1996]. Sendo assim, a sintaxe adotada pelo XPath é bastante intuitiva, já que ela baseia-se em caminhos, como os caminhos de um sistema de arquivos. Considere para efeitos de exemplificação o documento XML a seguir, que caracteriza um pedido de compra fictı́cio de uma empresa filial para ser enviado a sua matriz. 62 Figura 4.17: Trecho de um documento XML [W3C, 1996] Considerando a figura 4.17 uma expressão válida para pesquisar todos os pedidos realizados é apresentada a seguir, onde todos os elementos ”Pedidos”que são filhos do elemento ”PedidosItens”(No caso do exemplo citado seria somente um pedido) serão listados: Figura 4.18: Consulta Xpath [W3C, 1996] Na Figura a seguir é possı́vel ver como uma expressão Xpath gera o seu resultado, observe que a pesquisa feita pelo padrão de consulta Xpath é feita hierárquicamente: 63 Figura 4.19: A consulta XPath representada no Grafo [W3C, 1996] O XQuery ou XML Query é linguagem funcional de consulta à Documentos XML assim como SQL é uma linguagem de consulta para Bancos de Dados Relacionais. XQuery é baseada numa linguagem chamada Quilt (uma das primeiras linguagens de pesquisa a Dados XML) e implementa as facilidades oferecidas pelo XPath e tipo de dados do XML Schema descritas anteriormente. Uma consulta XQuery é uma expressão que: • Lê um documento XML, ou valores atômicos4 ; • Retorna um documento XML, ou valores atômicos; • XQuery é suportada por todas os grandes desenvolvedores de Banco de dados (IBM, Oracle, Microsoft, etc); • o Xquery se encontra na versão 1.0, e é uma recomendação do W3C desde 23 de janeiro de 2007. [W3C, 1996]. 4 conceito herdado do padrão XPath 64 Índices Um ı́ndice é uma estratégia de otimização de consulta para implementações de Bancos de Dados. Assim como em qualquer banco de dados, os ı́ndices (links ou ponteiros que interligam dados, atributos ou elementos) são usados para aumentar a performance em consultas [Santiago, 2004]. Existem 3 tipos de ı́ndices (árvore, hash e binário), e serão descritos a seguir [Moraes, 2001]: • Um indice em árvore ordena os dados e permite buscas razoavelmente rápidas para elementos especı́ficos. O ı́ndice em árvore é geralmente baseado na idéia da Árvore Binária, onde cada nó pode ser particionado em dois nós filhos; • Um ı́ndice em hash organiza os dados codificando-os e mapeando-os em posições de array 5 . São uma forma extremamente rápida de encontrar elementos especı́ficos, mas praticamente inúteis para responder um intervalo de valores. • Um ı́ndice binário é indicado quando o campo indexado tem um pequeno número de valores que indicam a categoria do registro do documento, por exemplo o campo sexo (M,F), que é constantemente usada em consultas. Nesse caso, é criada uma lista dos elementos de cada tipo. Quase todos os SGBDs XML nativos suportam a indexação ou interligação de elementos e atributos. Normalização A normalização é um processo de eliminar redundâncias e inconsistências em um Banco de dados, com reorganização mı́nima dos dados. Dentro deste contexto, a normalização de dados em um banco XML nativo é basicamente idêntica a normalização de um banco relacional, ou outro banco. 5 também conhecido como vetor ou lista 65 Uma boa modelagem dos documentos deve garantir que nenhum dado seja repetido, causando inconsistências. Uma vantagem da normalização em bancos XML nativos é que eles suportam propriedades multivaloradas, enquanto que a maioria dos relacionais não suporta. Isso torna possı́vel normalizar os dados de uma forma mais simples e intuitiva [W3C, 1996]. Integridade referencial Assim como para normalização, a integridade referencial também é semelhante a bancos relacionais em banco XML nativos. Em resumo, serve para garantir a validade de ponteiros entre dados de diferentes tabelas. Em bancos relacionais, a integridade referencial garante que chaves estrangeiras apontem para chaves primárias válidas. Em bancos XML nativos, a integridade referencial garante que mecanismos de ”linkagem”apontem para documentos ou fragmentos de documentos válidos. Tal caracterı́stica esta diretamente relacionada com a caracterı́stica de Índices [Santiago, 2004]. Escalabilidade Escalabilidade é a capacidade de manter a alta performance mesmo com um aumento significativo do tamanho ou carga do banco. Assim como bancos hierárquicos e relacionais, os XML nativos usam ı́ndices para procurar dados. Isto significa que localizar documentos e fragmentos de documentos está relacionado com o tamanho do ı́ndice e não com tamanho ou quantidade de documentos [Abiteboul, 2003]. Dado isso, a performance dos bancos XML nativos é a mesma comparada a outros tipos de bancos. Conseqüentemente, a escalabilidade desses bancos é semelhante a dos outros. Os bancos XML nativos usam largamente ı́ndices, algumas vezes até indexando todos os elementos e atributos. Isto pode ser uma solução para bancos que são mais usados para consultas, mas quando muitas atualizações são feitas, essa performance cai drasticamente. Quando um banco XML nativo faz consultas por dados não indexados, 66 a performance cai um pouco, principalmente devido à normalização não tão boa. Então, devem-se levar em conta esses fatores antes de se decidir por um banco XML nativo. Se a aplicação vai recuperar os dados na ordem que eles foram armazenados, ele deverá escalar bem. Esse é o caso de documentos ”centrados em documento”. Caso contrário escalabilidade pode ser um problema, [Bourret, 2007]. 4.6.4 Principais Vantagens em trabalhar com bancos de dados relacionais Uma grande vantagem de se utilizar o Banco de dados relacional para armazenar documentos XML, além da economia que se terá em não ter de implementar um novo banco, é que é possı́vel fazer consultas, inclusive consultas complexas utilizando a linguagem padrão de consultas em SGBDs relacionais, a SQL. Isto é muito útil quando é necessário apresentar varias visões em diferentes aplicativos 6 . Outra vantagem é a fácil integração com outros bancos de dados relacionais, dentre outras vantagens que são fornecidas pelos SGBD relacionais, como controle de Integridade (Impedir que aplicações ou acessos por meio de interfaces possam comprometer a integridade dos dados armazenados no banco de dados), Controle de Redundância, escalabilidade, dentre outras caraterı́sticas já estudadas e mantidas nos Bancos de dados relacionais que estão no mercado. SGBDs XML Nativos ainda estão em fase de pesquisa e desenvolvimento, apresentando ainda algumas limitações, ou seja se comparados aos SGBDs relacionais, que são mais robustos e maduros, os SGBDs nativos ainda deixam a desejar. Outra vantagem é a maioria das grandes empresas de banco de dados relacionais possuem ferramentas para trabalhar com XML. Banco de Dados Relacionais, tem a vantagem de possibilitar a coexistência de dados XML e dados estruturados, tornando viável a construção de 6 Formas diferentes, de mostrar as informações aos usuários de acordo com as permissões de acesso [Silva, 2001] 67 aplicações que envolvam dados de diferentes naturezas com algum esforço adicional no desenvolvimento dessas aplicações. Os dados, sendo mantidos em um banco de dados relacional facilitam a integração entre sistemas. Existem várias ferramentas, bibliotecas para a geração e visualização dos dados a partir de um banco de dados relacional, facilitando assim o uso da informação para outros fins além de aplicações Web. O esforço necessário para a exportação de dados de um banco relacional para XML é muito pequeno, geralmente demandando apenas uma cláusula ou comando a mais em SQL. O que às vezes é necessário é a definição de um arquivo XSL, ou XML schema, para que o XML gerado esteja em um determinado formato, diferente do padrão gerado pelo SGBD e recuperação após falha. 4.6.5 Principais Desvantagens em trabalhar com bancos de dados relacionais A representação dos dados é limitada aos relacionamentos, o que pode ser um problema para algumas áreas. Ou seja, existe uma incompatibilidade entre o que o relacionamento e o elemento XML podem representar, pois o elemento definido em XML possui mais flexibilidade natural do que o relacionamento, ou seja, um relacionamento (a linha de uma tabela por exemplo), é composto de uma quantidade fixa de caracteres (colunas) e cada uma contém um item dos dados(registros), enquanto um elemento XML pode armazenar uma quantidade aleatória em caracterı́sticas (como os subelementos ou atributos) e cada subelemento pode conter mais de um item dos dados. Neste caso o relacionamento pode ser facilmente expresso em XML, mas carregar dados de um documento XML arbitrário em um banco de dados, na maioria das vezes é difı́cil. Outra desvantagem é a dificuldade de se importar dados XML de um banco de dados e fazer mudanças em esquemas (schemas dos documentos). 68 4.6.6 Principais Vantagens em trabalhar com Banco de Dados XML Uma das vantagens da XML é que sua estrutura é mais expressiva do que os relacionamentos usados em banco de dados relacionais. O relacionamento é um conjunto desordenado de registros, em que cada um possui um conjunto fixo de caracteres (ou atributos em documentos XML). A Estrutura de um elemento XML é muito mais expressiva que a do relacionamento, porque ela pode conter outros elementos, variar a ordem e a quantidade de atributos, podendo ter vários elementos do mesmo tipo, tornando mais fácil representar dados muito complexos. 4.6.7 Principais Desvantagens em trabalhar com Banco de Dados XML Hoje não existe uma linguagem padrão para recuperação dos dados XML, ao se implantar um banco de dados XML em uma empresa por exemplo, pode ser que seja necessário um treinamento para pessoas que trabalharam com este sistema. Mesmo existindo algumas linguagens que são padrão da W3C ainda assim existem algumas limitações como modificação dos dados, hoje são poucos os banco de dados que fornecem suporte para atualizar dados, na maioria das vezes é necessário recuperar o dado, alterar e em seguida inserilo no banco novamente. A seguir é apresentado uma tabela com diferenças relevantes entre os Bancos de dados Relacionais com Suporte a dados XML e Bancos de Dados especı́ficos para dados XML: 69 Tabela 4.3: Comparação entre Banco de Dados Relacional e Banco Dados XML [Heuser et al., 2005] Banco Dados Relacional Banco Dados XML Banco relacional contém tabelas Banco XML contém coleções Tabela relacional contém registros com Coleção contém documentos XML com mesmo esquema mesmo DTD Registro relacional é lista de valores Documento XML é uma árvore de nós As consultas são feitas em SQL, uma As consultas são feitas em uma linguagem linguagem de consulta padrão de Banco desenvolvida especialmente para a consulta de Dados Relacionais ou orientados a de dados XML. objeto, que usa tabelas como um modelo básico. O resultado de uma consulta é uma O resultado de uma consulta é um conjunto tabela contendo um conjunto de linhas. de nós de um ou mais documentos XML que podem ser empacotados em um nó raiz, criando um documento XML bem formado. SQL query retorna conjunto não orde- XML Query retorna uma seqüência não ornado de registros denada de nós 70 Capı́tulo 5 Benchmark em Bancos de Dados XML Este trabalho se propôs avaliar Bancos de Dados escolhidos para exemplificar as duas formas de armazenamento de Dados XML: Banco de Dados XML Nativo e Banco de Dados Relacional habilitado para receber tais dados. Sendo assim, este capı́tulo estará apresentando os benchmarks para BDs XML, softwares que realizam por meio de métricas estabelecidas uma comparação ou mesmo uma avaliação entre as funcionalidades de um ou mais Sistemas Gerenciadores de Bancos de Dados, e dentro de um certo contexto, seja ele uma aplicação fictı́cia ou uma aplicação de natureza real demonstrar qual BD se faz melhor. Este estudo tem como objetivo validar as comparações já feitas entre os bancos de dados e orientar o leitor na escolha entre um Banco de Dados XML Nativo e um Banco de Dados Relacional para o armazenamento de dados XML, além de demonstrar como um Benchmark funciona e como pode ser implementado. 5.1 Benchmark Um benchmark é um programa utilizado para testar a performance de um software, hardware ou um sistema [Collin, 2002], os quais proporcionam padrões na avaliação de desempenho de sistemas. Sendo assim, um benchmark para BDs pode ser visto como um conjunto de instruções utilizadas 71 para medir e comparar o desempenho de dois ou mais sistemas de gestão de base de dados. Isto é feito recorrendo à execução de experiências bem definidas cujas medidas de desempenho serão usadas para prever o desempenho do sistema [Seng, 2005]. Para isso é necessário que este software possua caracterı́sticas que garantam a sua credibilidade. Segundo Vieira [Vieira, 2005], benchmarks de confiabilidade precisam contêr os seguintes parâmetros, que o compõe: • Medidas: é o componente responsável por quantificar os resultados obtidos durante as avaliações. Elas podem ser subdivididas em duas classes: condicionais ou incondicionais. As medidas condicionais demonstram o funcionamento do sistema e são utilizadas para realizar comparações entre os ambientes. São obtidas através dos resultados das experiências. As medidas incondicionais vão representar a confiabilidade global do sistema, como por exemplo, disponibilidade, integridade, entre outros. • Workload: é o responsável por medir o trabalho do sistema transacional, ou seja, é um sistema que interage com o SGBD para analisar seu desempenho de trabalho. • Faultload: componente utilizado quando o benchmark é voltado para confiabilidade de sistemas. • Procedimentos e regras: são variáveis dependentes da finalidade do benchmark, algumas podem ser utilizadas de forma geral, como as regras para divulgação de resultados finais, construção e aplicação dos benchmarks de acordo com as especificações. • Ambiente experimental: é a descrição completa do ambiente e plataforma necessária para se executar o benchmark. Desta forma, na especificação de um benchmark são considerados pelo menos três componentes dos citados anteriormente, [Rahm, 2004]: o sis72 tema a ser testado (SUT - System under Test), a carga de trabalho submetida ao SUT (workload ) que consiste nas operações de teste e, uma ou mais métricas que são resultantes da monitorização e avaliação do desempenho do SUT o qual inclui o BD de teste. Assim a Figura 5.1 representa a especificação de um benchmark, onde o trabalho a executar ou o Workload propõe as consultas, as atualizações ou seja, as operações de teste a realizarem sobre o sistema a ser testado (SUT), a monitoração desse processo se dá pelo próprio benchmark, o qual identifica problemas ou não durante a fase de execução. Exemplos de métricas são throughput ou processamento, tempo de resposta, tamanho do Banco de Dados e relação performance e custos de manutenção. Figura 5.1: Estrutura de um Benchmark [Seng, 2005] Desta forma Gray em [Gray, 1993] defende o uso de benchmarks levando em consideração os seguintes princı́pios básicos: • Relevância: deverá obter as caracterı́sticas do sistema a ser medido, executando operações comuns no respectivo domı́nio e não repetitivas. • Portabilidade: deverá facilmente ser implementado em diferentes sistemas, com diferentes arquiteturas, devem ser portáveis para diferentes plataformas, proporcionando assim, comparativos de desempenhos entre diversos distribuidores de sistemas; 73 • Repetibilidade: quando um benchmark é aplicado no mesmo ambiente, mais de uma vez, ele deve produzir resultados semelhantes; • Escalabilidade: deverá ser aplicável a sistemas de tamanhos variáveis, de pequenos a grandes dimensões. Essa caracterı́stica prevê que os benchmarks realizem avaliações em ambientes com diferentes capacidades. • Não Intrusividade: na necessidade de avaliar outro ambiente devese realizar o mı́nimo ou nenhuma alteração nesse novo ambiente. Os benchmarks podem classificar-se como sintéticos, empı́ricos ou uma mistura entre ambos [Collin, 2002]. Benchmarks sintéticos simulam aplicações tı́picas de um determinado domı́nio, tanto a nı́vel de operações como de BDs de teste, ao passo que os empı́ricos utilizam operações de testes e informação reais. Para sistemas baseados em modelos mais comuns como o relacional, foram desenvolvidos ao longo do tempo diversos testes de performance que estimularam a comparação e consequentemente o aperfeiçoamento dos sistemas. Com o aparecimento de sistemas capazes de lidar com XML, foi necessário criar testes, levando em consideração novos desafios colocados por este modelo. Para avaliar BDs voltados a documentos XML, o benchmark precisa evidenciar algumas caracterı́sticas [Rahm, 2004]: • Preservação de ordem textual das várias estruturas que compõem os documentos manipulados. • Utilização de strings como tipo de dados básicos, cujo armazenamento e manipulação podem levantar problemas aos sistemas e entrar em conflito com a forma como os tipos de dados são tratados pelas linguagens de busca. 74 • Queries ou consultas ao banco de dados que envolvem a manipulação de estruturas hierárquicas complexas e, a preservação de ordem requerem a execução de operações dispendiosas, principalmente quando o XML está armazenado numa estrutura relacional. Em [Demurjian, 1985] é apresentado uma metodologia para avaliar sistemas gerenciadores de banco de dados, na qual é enfatizada uma maneira de obter o tempo gasto entre a requisição de uma consulta e o retorno da sua resposta. Nessa metodologia, o autor utiliza o conceito de check-point, que consiste em criar pontos de coletas de tempo nas requisições de consultas ao banco de dados através de uma linguagem de programação. Os pontos de coletas de tempo são gravações do relógio do sistema em uma variável. São utilizados dois pontos de coleta de tempo, sendo um no momento em que se faz a requisição e o outro quando se obtém a resposta. Com os dois pontos de tempos coletados, calcula-se a diferença entre eles e como resultado tem-se o tempo gasto na realização da consulta. Para BDs XML existem dois tipos de benchmarks: micro-benchmarks e aplicacionais. Todos eles consistem num conjunto de informação (Banco de Dados Teste) que pode ter várias versões com tamanhos diferentes e sobre o qual serão executados um conjunto pré - definido de queries (consultas) [Seng, 2005] Os micro-benchmarks, são propostos de forma a testarem componentes especı́ficos do sistema com o objetivo de corrigir certos problemas. Pretendem explorar o impacto na performance do sistema e das caracterı́sticas mais importantes do XML, dispondo de um Banco de Dados de teste heterogêneo, não inspirado em qualquer aplicação real, sobre o qual são especificados queries especialmente propostas para testar componentes elementares da linguagem de query (como seleção, joins 1 , etc). Com um benchmark deste tipo torna-se possı́vel aperfeiçoar as operações 1 consultas que geram como resultado alguma junção 75 mais básicas ao nı́vel do SGBD [Seng, 2005]. Os benchmarks classificados dessa forma são usados principalmente por projetistas de banco de dados, ou seja na fase de concepção do mesmo, para detectar erros e possı́veis pontos de melhora. Os benchmarks aplicacionais, por outro lado funcionam a um nı́vel mais elevado, pretendendo medir a performance do sistema como um todo e não questões especı́ficas. Ele dispõe de um BD de teste, que pode ser ou não inspirado numa aplicação real, sobre o qual são definidas consultas que pretendem abranger o maior número possı́vel de caracterı́sticas da linguagem. Esse tipo de benchmark é utilizado por responsáveis e gestores da área de tecnologia de informação, na escolha e definição de qual tipo de BD será usado pela área. Nas seções seguintes serão apresentados alguns benchmarks já utilizados pelo mercado para avaliar Bancos de Dados XML: 5.1.1 XOO7 O XOO7 é um benchmark aplicacional desenvolvido na Universidade de Singapura National University of Singapore. Tal benchmark é baseado no OO7 que foi concebido para testar a performance de SGBD Orientado a Objetos. A justificativa para o XOO7 se basear no OO7 advém das semelhanças entre o modelo de dados XML e o Orientado a Objeto (OO) [Li, 2001]. Também as consultas foram importados e convertidos do modelo OO para linguagem de consulta a dados XML, sendo no entanto adicionados novas queries para melhor explorar as caracterı́sticas do XML, tentando abranger o máximo das funcionalidades que as linguagens de query deveriam suportar [Li, 2001]. Outro ponto é com relação às consultas do OO7 que abordam uma perspectiva da informação centrada nos dados, foi necessário expandir as queries do XOO7 de forma a abordarem uma visão centrada no documento 76 (Ver seção 4.3.4 do Capı́tulo anterior). Estas queries (18 no total) foram divididos conforme as caracterı́sticas relativas ao banco de dados que está sendo usado como teste [Li, 2001]: • Queries relacionais, para testar funcionalidades mais comuns e já testadas em outros benchmarks; • Queries de navegação para explorar funcionalidades de navegação na árvore XML; • Queries de documento, para explorar o suporte à abordagem centrada nos documentos da informação e ordenação da informação; Os testes são realizados em um único documento de tamanho fı́xo 4 MB, ou seja este benchmark não provê a escalabilidade do sistema. Este benchmark é bastante usado, mas como mostrou esta seção, possui ainda algumas limitações, o que torna necessário estudos para aprimorá-lo ou o surgimento de outros como é mostrado em seções seguintes. 5.1.2 XMach-1 Desenvolvida pela University of Leipzig [Bohme, 2000], na Germânia, o XMach-1 (XML Data Management Benchmark ) vêm caracterizar-se como outra ferramenta de avaliação de banco de dados para armazenamento de Dados XML, um benchmark do tipo aplicacional [Bohme, 2000]. Tal ferramenta tem como meta avaliar a performance de sistemas individualmente. Esta performance do Sistema de Banco de Dados é mensurada aplicando consultas a este banco de dados e medindo o tempo de resposta. Tal métrica é chamada de Xqps (XML queries per second ) ou Consultas XML por segundo. Também é possı́vel considerar a escalabilidade do Banco de Dados ou seja, considerar relevante o tamanho do banco de dados, que no caso do XMach-1 pode ter 10.000, 100.000, 1.000.000 e 10.000.000 documentos, 77 onde esta escalabilidade é indicada pelo operador do sistema ao gerador de documentos XML [Collin, 2002]. O gerador de dados XML é disponibilizado gratuitamente pelo desenvolvedor do sistema e é open source [Bohme, 2000], tendo os dados gerados conforme a estrutura da Figura 5.2. Tal estrutura obedece os parâmetros informados na DTD da Figura 5.3. Figura 5.2: Estrutura hierárquica do documento de teste gerado pelo gerador de dados XML - [Rahm, 2000]. 78 Figura 5.3: DTD de controle de documentos para XMarch-01, [Bohme, 2000] Como visualizado na Figura 5.2, o gerador de documentos XML trabalha com um algoritmo de geração de documentos seguindo o modelo em árvore. Os dados são gerados em cima da estrutura de um documento XML (documentXX) que possui elementos filhos autor, código, tı́tulo e capı́tulos, sendo que cada capı́tulo possui um autor, cabeçalho e seções, tais seções podem possuir outras seções filhas. A geração do documento é controlado por parâmetros de acordo com a tabela a seguir: 79 Tabela 5.1: Parâmetros de geração de Parâmetro Número de seções por documento Número de parágrafos por seções Número de sentenças por paragrafo Número de palavras por sentença Probabilidade de ter um autor que é elemento e atributo Número de palavras por cabeçalho ou tı́tulo do elemento. Probabilidade de ter uma frase sem uma sentença Probabilidade de ter um link de um elemento sem um parágrafo Número de documentos por DTD documentos Valor 5-150 1-15 2-30 3-30 0.5 2-12 0.01 0.05 2-100 O benchmark XMach-1 é baseado em uma aplicação web e sua arquitetura mostrada na Figura 5.4 consiste em quatro partes: O banco de Dados XML, servidor de aplicações, carregador (Loader) e o browser client 2 . Tal software é um Sistema de Testes para tempo de resposta e performance do processamento. Ele usa dos servidores de aplicação, uma vez que são essenciais para melhorar o processamento, escalabilidade e memória cache. O número de bancos de dados e servidores de aplicação não é pré-determinado, mas pode ser escolhido de acordo com o objetivo do processamento [Rahm, 2004]. Figura 5.4: Componentes da Arquitetura Benchmark XMach [Rahm, 2004] 2 Máquina que acessa o BD Servidor 80 São realizadas 11 operações padrões de acesso ao banco de dados, sendo elas 8 consultas (Q) e 3 atualizações (A), conforme descritas a seguir [Collin, 2002]: • Q1: Retorna um documento dada a sua URL, ou seja, retorna um documento completo preservando a sua hierarquia e a ordem. • Q2: Retorna o código de identificação3 e uma URL de um documento que contém um dado nó, ou seja um dado elemento. • Q3: Simulando a navegação em uma árvore usando operadores sequenciais, a consulta retorna os nós folha em uma estrutura de árvore de um documento dado pelo código de identificação daquele documento seguindo o primeiro filho apartir do nó raiz. • Q4: Retorna uma lista de elemento,s os quais são nós filhos e são iniciados com elemento seção, conforme Figura 5.2. Tal consulta precisa apenas do código do documento. • Q5: Retorna o nome do documento de todos os documentos que pertencem a URL dada. • Q6: Encontra os capı́tulos de um dado autor , tendo a chave do documento XML, (ver estrutura da árvore indicada na Figura 5.2). • Q7: Retornar o último código de um documento o qual foi referenciado pelos últimos quatro outros documentos. • Q8: Retorna a chave dos últimos 100 documentos atualizados tendo em vista o atributo autor. • A1: Inserir documentos tendo uma dada URL. • A2: Deletar documentos tendo uma dada chave (doc id). • A3: Atualizar a URL e o tempo para uma dada chave (doc id). 3 Um código único que cada documento tem, uma espécie de chave 81 Em cima destas operações são calculados os tempos de resposta e consequentemente a sua performance. 5.1.3 XBench O XBench é uma famı́lia de benchmarks que pretende abranger vários tipos de aplicações de BD, sendo caracterizado como um Benchmark aplicacional, onde a análise elaborada pelo software se faz considerando todas as operações que o BD realiza [Khandelwal, 2004]. Este benchmark também leva em consideração análises estatı́sticas detalhadas de vários conjuntos de informação XML, onde os estudiosos classificam as aplicações de BDs segundo duas vertentes [Novais, 2006] [Khandelwal, 2004]. A primeira refere-se às caracterı́sticas da aplicação, ou seja tipo de informação do BD, como: (a) datacentric - (centradas nos dados) ou (b) document-centric - (centrado no documento). Já a segunda vertente refere-se à forma do BD:(1) Se ele é um single document (único documento ), onde toda a informação do BD está armazenada num único documento ou ainda se o BD possui (2) multiple document (documentos múltiplos), onde o BD é constituı́do por vários documentos [Novais, 2006]. Apartir dessas caracterı́sticas, surgem então algumas classes de dados (fato que começou a ser implementado no XBench, outros benchmarks não possuiam esta caracterı́stica): a1(Centrados nos dados e único documento armazenado), a2(Centrado nos dados e vários documentos armazenados), b1(Centrado no documento e formado por um único documento), b2(Centrado no documento e formado por múltiplos documentos). Tendo em vista tais classificações é importante salientar que a classe armazenada tem impacto direto na performance do banco de dados. A avaliação, assim como os benchmarks anteriores apresentados neste trabalho, é feita tendo em consideração o tempo de retorno das consultas estabelecidas pelo próprio benchmark. Sendo que neste caso consistem em 82 20 queries que cobrem todas as funcionalidades da linguagem de consulta XQuery apresentada anteriormente neste trabalho. Os BDs de teste utilizados têm o tamanho de 10MB (pequeno), 100MB (normal), 1GB (grande) e 10GB (enorme), ou seja este benchmark provê a caraterı́stica de escalabilidade [Khandelwal, 2004]. 5.1.4 XMark O XMark foi desenvolvido no Instituto de Pesquisa em Matemática e Ciência da Computação na Holanda (National Research Institute for Mathematics and Computer Science). Ao contrário do XOO7, do XMach-1 e do XBench, este benchmark baseia o seu modelo de dados numa aplicação real, mais propriamente numa aplicação onde ocorre leilões de produtos na Internet [Busse, 2003]. É um benchmark aplicacional e apresenta na sua maioria caracterı́sticas centradas nos dados, mas também possui algumas centradas no documento, com a introdução de descrições textuais associadas a objetos representados no modelo de dados. Com base neste modelo, é gerado um BD de teste que consiste num único documento XML recorrendo a uma ferramenta desenvolvida pelos autores. O documento gerado pode variar entre 10MB a 10GB [Busse, 2003]. Este benchmark oferece um conjunto de 20 consultas para avaliar a capacidade de processamento de queries por parte do sistema. 5.1.5 MBench Outro benchmark desenvolvido para Bancos de dados XML foi o Michigan Benchmark ou MBench desenvolvido na Universidade de Michigan [Runapongsa, 2003]. Em contraste com seus antecessores ele é projetado como um micro-benchmark tendo em vista a avaliação de custo de partes individuais da funcionalidade de um banco de dados. Seu objetivo não é escolher um ou outro banco de dados em particular e, sim avaliar partes da 83 estrutura e apontar deficiências de acordo com as consultas feitas. Sendo assim, o conjunto de dados do benchmark é uma estrutura criada para simular diferentes caracterı́sticas nos dados XML e permitir a predição de custos com tais operações. Como o XMark e no XOO7, um documento contém todos os dados possuindo ainda a caracterı́stica de avaliar somente dados centrados em dados [Runapongsa, 2003]. O benchmark Mbench define 56 operações as quais são definidas e agrupadas de acordo com categorias: consultas de seleção, consultas join (junção) baseada em valores, consultas join baseadas em ponteiros, operações de agregação e atualização. Dentro de cada grupo, geralmente as consultas diferem somente com respeito a caracterı́stica especı́fica como a seletividade para medir a influência na performance das consultas [Runapongsa, 2003]. Outro ponto que merece destaque nesse benchmark é a questão da escalabilidade do BD, inicialmente ele começa com um tamanho de 50 MB e cresce de acordo com a fórmula [Runapongsa, 2003]: 50 MB *10n, onde n = 1,2,3,4... O Mbench é referência em se tratando de micro-benchmarks, porém estudiosos continuam a busca por aprimorar as técnicas de avaliação realizadas pelo Mbench. 5.1.6 XCheck O XCheck é um software benchmark aplicacional para avaliação de armazenamento de dados XML por meio da análise de consultas XPath e XQuery, [XCheck, 2006]. O XCheck trabalha em duas fases, [XCheck, 2006]: Executando consultas e/ou analisando os dados armazenados nos bancos de dados que o mesmo suporta. Na fase em que está executando o benchmark na avaliação do armazena84 mento em BD XML, o software XCheck contabiliza o tempo de retorno decorrente entre uma consulta e uma resposta a um BD. Opcionalmente, ele também armazena os resultados das consultas realizadas. E na fase de análise dos dados, o XCheck elabora uma avaliação fruto do armazenamento dos dados guardados na fase anterior, retornando estatı́sticas de tempo de execução. Como resultado, é gerado relatórios e gráficos. XCheck é licenciado pela GNU (General Public License)licença para software livre e desenvolvido pelo Instituto de Informática da Universidade de Amsterdam [XCheck, 2006]. As entradas do benchmark XCheck são arquivos XML e as saı́das podem ser arquivos XML, HTML, PostScript4 e Gnuplot5 Antes de rodar o XCheck existem algumas caracterı́sticas importantes a ser consideradas [XCheck, 2006]: 1. Hardware e Software: Mensurar o quanto a execução do benchmark é confiável não é tão fácil quanto parece. O hardware e os softwares usados no cenário de avaliação influênciam na execução do programa. A velocidade da CPU, a quantidade de memória principal, a memória cache, o sistema operacional e tudo que interfere na compilação são pontos importantes a serem considerados na execução do benchmark. Para Bancos de dados desenvolvidos em Java, a máquina virtual java impoem uma camada de software entre o programa e o sistema operacional que pode alterar o tempo de execução e, portanto a avaliação do experimento. Para evitar resultados não confiáveis, XCheck roda o mesmo experimento n+1 vezes e retorna a média desses valores. 2. No XCheck existem métricas de tempo como se seguem para calcular 4 é uma linguagem de programação especializada para visualização de informações, ou uma linguagem de descrição de páginas [Wikimedia, 2001] 5 O gnuplot é um software que facilita a criação de graficos 2D e 3D para ambientes UNIX, IBM OS/2, MS Windows, DOS, Macintosh, VMS, Atari [Gnuplot, 2004] 85 a performance [XCheck, 2006]: • Tempo de processamento do documento: É o tempo que um BD leva para receber o documento XML de entrada e criar uma representação interna desse documento no Banco de Dados. • Tempo de compilar a consulta: É o tempo que uma banco de dados recebe a consulta e traduz para a estrutura formal interna do banco de dados, considerando a existência das estruturas de otimização dessa consulta ou não. • Tempo de execução da consulta: É o tempo que o banco de dados leva para executar a consulta. Este tempo inclui somente o tempo para localizar os resultados da consulta sem retornar a saı́da. Usualmente, esta é a métrica de tempo mais importante numa avaliação de um banco de dados. • Tempo de serialização ou retorno de resultados: É o tempo que um Banco de Dados leva para representar e retornar os resultados da consulta. • Tempo total: É o tempo total que um banco de dados leva para avaliar uma consulta, começando com uma invocação de uma consulta até as saı́das e resultados válidos. Este tempo é calculado de acordo com o tempo de processamento, sendo assim, a atuação da CPU influencia diretamente neste resultado. 3. Bancos de Dados suportados pelo XCheck de forma padrão: XCheck é designado para comunicar facilmente com os bancos de dados em XML com uma interface de linhas de comando. Para cada banco de dados XCheck usa um adaptador (um arquivo XML de configuração) que contém instruções de execução. A versão 0.1.5, usada neste trabalho, inclui adapatadores para nove bancos de dados, conforme mostra a tabela a seguir: 86 Tabela 5.2: Banco de dados suportados pelo XCheck de forma padrão BD Versão Métricas de tempo SaxonB 8.7 D, QC, QE, T Galax 0.5.0 T MonetDB 0.10.3 D, QC, QE, S, T eXist 1.0 T Qizx 1.0 QE, S, T Qexo 1.8.1 alpha T Blixem 16 de junho de 2005 T Xml Task Force 30 de Setembro de T 2004 Arb 15 de agosto de 2005 D, QE, T Onde D = Tempo de processamento do documento, QC = Tempo de compilar a consulta, QE = Tempo de execução da consulta, S = tempo de serialização ou retorno de resultados e T = tempo total. Tendo ainda a opção de criar um novo adaptador para o seu banco de dados escolhido, editando um script, [XCheck, 2006]. 4. Requerimento de Sistema: O XCheck trabalha com o Sistema Operacional GNU/Linux. Em teoria é possı́vel usar o XCheck com outros sistemas operacionais, mas só foi testado em diferentes versões do GNU/Linux. XCheck é escrito na linguagem Perl e necessita de um interpretador Perl, na versão 5.8.5 ou superior. Há também alguns Módulos CPAN Peal que necessitam estar instalados. Para gerar os gráficos do benchmark é necessário que tenha também instalado o Software Gnuplot na versão 4.0 ou superior. 5. Licença de uso: XCheck é licenciado pela General Public License (GPL) a qual permite que seja copiado e distribuı́das cópias do software de forma gratuita. 5.1.7 Um comparativo entre os Benchmarks apresentados Na tabela a seguir é apresentado um resumo acerca das seções anteriores onde foi descrito caracterı́sticas particulares de cada Benchmark. 87 Tabela 5.3: Resumo de Benchmarks para XOO7 XBench XMach-1 Tipo de Centrado Centrado Centrado Dados do nos dados nos dados/ no docuBD teste Centrado mento (Data nos docuset) mentos Centrado no documento ou em dados Tipo BD de Único Documento Número 18 de Consultas (Queries) Tamanho 4 MB do BD Unico documento/ Múltiplos documentos 20 10MB 10GB Múltiplos documentos 8 consultas + 3 de atualizações Bancos de Dados XML XMark Mbench Centrado centrado nos da- nos dados dos, mas também com algumas caracterı́sticas de centrado no documento Único Doc- Único documento umento 20 - 10MB - 10MB 10GB de 10GB documentos ClassificaçãoAplicacional Aplicacional Aplicacional Aplicacional XCheck centrado nos dados Múltiplos documentos 56 20 50 MB∗10n onde n=1,2,3,4 Microbenchmark 10MB 10GB Aplicacional A diferença fundamental entre os benchmarks apresentados aqui estão no escopo, ou seja, com a concepção de avaliação imposta pelo benchmark, todo o sistema de banco de dados em modo multi-usuário, por exemplo no caso do XMach-1 é avaliada. Todos os componentes do sistema de banco de dados como processamento de consulta, armazenamento, etc são incluidas na avaliação. Os outros benchmarks restringem eles mesmos a avaliação do processo de consulta em modo usuário único para determinar a performance para consultas especı́ficas. XMark e XOO7 avaliam consultas complexas. Enquanto que o Mbench possui um número grande de consultas para avaliar sistematicamente as principais funções da parte de processamento de consultas de xml em BDs, [Runapongsa, 2003]. 88 - Se faz necessário estabelecer então, em qual contexto está a aplicação a ser avaliada, para posteriormente definir qual o benchmark vai avaliar de forma correta o banco de dados. 5.2 Bancos de Dados escolhidos para o Estudo de Caso Existem vários bancos de dados no mercado para acomodar dados XML, dada a demanda e necessidade. São bancos de dados open source 6 , comerciais, de grande porte, muito conhecidos ou não. Sendo assim, para demonstrar a aplicação de benchmarks, na escolha dos BDs de teste, foram considerados algumas caracterı́sticas: • Boa documentação. É fundamental a existência de documentos (artigos, livros, entre outros) que exponham claramente as caracterı́sticas do BD bem como forneçam exemplos de utilização, em especial para utilizadores com pouca ou nenhuma experiência; • Suporte eficiente. No decorrer da utilização do BD é extremamente importante existirem fontes de informação adicionais, além da documentação, a qual seja possı́vel recorrer em caso do surgimento de problemas. Estas fontes podem ser grupos de usuários, fóruns de discussão ou mesmo, no caso de BDs comerciais, um sistema eficiente de resolução de problemas e apoio ao utilizador eficiente; • Provas dadas na área. É importante que o BD seja reconhecido como sendo uma referência na área. Este aspecto leva consequentemente a uma maior utilização e à criação de uma grande comunidade de usuários, o que poderá favorecer os dois pontos anteriores; • Possibilidade de funcionar na plataforma previamente escolhida, uma vez que foi definido um benchmark que só é possı́vel rodar em Linux, 6 de código livre, free ou gratuitos [Wikimedia, 2001] 89 o banco de dados escolhido tem que ter suporte para execução em plataforma Linux. • Facilidade na obtenção de licenças do respectivo software. No âmbito deste trabalho, como trata de apresentar a tecnologia de armazenamento de dados semi-estruturado com foco em XML e ainda mostrar formas de analisar a performance dos bancos de dados em vista, usando para fins de exemplificação um benchmark favorável a comparações e dois bancos de dados escolhidos por atenderem às caracterı́ticas citadas anteriormente e pelo fato da comunidade de Banco de dados citá-los como referência em se tratando de armazenamento a documentos XML. Sendo assim para fins de conhecimento, na tabela 5.4 são apresentados resumidamente alguns Bancos de Dados XML nativos existentes no mercado, seus respectivos desenvolvedores e sua Licença. 90 Tabela 5.4: Alguns Bancos de dados XML nativos existentes [Srisvastana, 2004] Produto Desenvolvedor Licença 4Suite, 4Suite Server Four Thought Open Source Berkely DB XML Sleepycat Software Open Source Birdstep RDM XML Birdstep Comercial Centor Interaction Server Centor Software Corp. Comercial DBDOM K. Ari Krupnikov Open Source DBXML DBXML Group Open Source DOMSafeXML Ellipsis Comercial eXist Wolfgang Meier Open Source Tamino Software AG Comercial eXtc M/Gateway Developments Comercial Ltd. GoXML DB XML Global Comercial Infonyte DB Infonyte Comercial Ipedo Ipedo Comercial Lore Stanford University Open Source Mark Logic Content Inter- Mark Logic Corp. Comercial action Server Natix Data ex machine Comercial NaX Base Naxoft Comercial Neocore XML Xpriori Comercial Ozone Ozone Db org. Open Source Sedna XML DBMS ISP RAS MODIS Open Source XDBM Matthew Parry, Paul Open Source Sokolovsky XIndice Apache Software Founda- Open Source tion Após conhecidos alguns BDs nativos, faz-se interessante apresentar também alguns BD’s com suporte a dados XML. De acordo com a tabela apresentada por [Bourret, 2007], ou seja a tabela 5.5, é possı́vel ver que existem no mercado muitos bancos de dados com suporte a dados XML e que na grande maioria são softwares comerciais 91 Produto Access 2002 Cache DB2 eXtremeDB FileMaker Informix Matisse MySQL Objectivity/DB OpenInsight Oracle PostgreSQL SQL Server Sybase ASE UniData UniVerse Versant enJin View500 5.2.1 Tabela 5.5: Bancos de dados com suporte a XML [Bourret, 2007] Desenvolvedor Licença Microsoft comercial InterSystems Corp. comercial IBM comercial McObject Comercial FileMaker Comercial IBM Comercial Matisse Software Comercial MySQL Open Source Objectivity Comercial Revelation Software Comercial Oracle Corporation comercial PostgreSQL Global Devel- Open Source opment Group Microsoft comercial Sybase comercial IBM Comercial IBM Comercial Versant Corp Comercial eB2Bcom Comercial BD nativo escolhido: eXist O eXist foi um Banco de dados que atendeu as caracterı́sticas necessárias aos testes que serão feitos pelo benchmark escolhido, ou seja, existe boa documentação, um número relativamente grande de usuários ativos, suporte à plataforma Linux e facilidade de obtenção de licenças. O eXist é um banco de dados open source nativo XML, licenciado sob a LGPL (Lesser General Public License), desenvolvido em Java com suporte para todos os padrões colocados pela W3C [Meier, 2004] advindos da XML. Detalhes da instalação e da manipulação de operações relacionadas ao BD são mostrados no Apêndice B deste trabalho. Foi escolhido por ser um dos primeiros BDs nativos XML, portanto consolidado nesse meio e por ser de código livre, o que facilita sua obtenção e de materiais para estudo do mesmo. 92 5.2.2 BD com suporte a XML escolhido: Oracle 9i O Oracle é um Sistema Gerenciador de Banco de dados idealizado por Larry Ellison em parceria com Bob Miner e Ed Oates no final dos anos 70 [Oracle, 2005]. O projeto do banco de dados oracle veio a se tornar lı́der no mercado e alavancar a empresa Oracle Corporation. Ao longo dos anos foram sendo introduzidas inovações e em 1999 foi lançada o primeiro BD com suporte para XML (versão 8i ). Dispõe de uma vasta documentação, existindo, por exemplo, dezenas de livros escritos sobre o tema, e é usada por um grande número de usuários permitindo assim um intercâmbio de experiências. Existem inúmeras versões deste BD para diversas plataformas como Microsoft Windows, Unix e Linux, e é possı́vel a sua utilização com várias linguagens de programação como Java, PHP, .NET entre outras. É um software comercial, e para este trabalho foi usado uma versão trial disponı́vel em [Oracle, 2005]. Foi usado a versão para plataforma Linux, uma vez que o benchmark usado foi instalado nesse Sistema Operacional. Detalhes relativos a instalação e algumas operações de manipulação dos dados estão disponı́veis no Apêndice C. 5.2.3 XCheck - o benchmark escolhido Para a obtenção da performance dos BDs usados foi escolhido o Benchmark XCheck, pela facilidade das licenças, por se adequar aos Bds que seriam usados e por proporcinar materiais que sanariam as dúvidas que viessem surgindo no decorrer do trabalho. Outro ponto forte oferecido pelo XCheck é o fato de ser um BD aplicacional, o que proporciona a análise do BD como um todo, operações de consulta, atualização, tempo de processamento de um documento, compilação, etc. O XCheck usou como documento XML de entrada dados fictı́cios gerados por um Data Generator ou gerador de dados XML [XCheck, 2006]. O Gerador de Dados utilizado para os testes é denominado xmlgen e 93 pertence ao pacote de instalação do XCheck. O xmlgen gera dados bem formados, válidos, centrados em documentos, proporcionando escalabilidade, e gera arquivos de até gigas. O arquivo é gerado apartir de textos de ShakespeareAutor de romances. O único parâmetro que é necessário informar ao xmlgen para a geração do documento XML é o tamanho que terá o documento. No anexo 1 é apresentado o relatório que foi obtido com os testes realizados pelo XCheck. 5.2.4 Conclusões A seguir é apresentado algumas das caraterı́sticas que extraimos dos resultados obtidos do benchmark e ainda da vivência com os estudos e experiências realizadas. 1. Quando e Por que Utilizar? Oracle - Quando possui um documento XML mais voltado a dados (sem muito texto). O oracle possui a caracterı́stica de ser um Banco Relacional e como tal, contém tabelas que contém registros com o mesmo esquema. Nesse sentido um registro retorna por meio da linguagem SQL um conjunto não ordenado de registros. eXist - O eXist é indicado quando o documento XML é mais voltado para textos, quando não existe a necessidade de se relacionar os elementos do documento xml com outros elementos. No apendice B vimos que um banco eXist contém coleções, que por sua vez contém documentos XML com mesma DTD. O documento XML é uma árvore de nós e a linguagem usada pelo eXist, é a XML Query que retorna uma seqüência ordenada de nós. Outra caracterı́stica que diferencia do oracle é que o eXist foi desenvolvido para trabalhar especificamente com Dados XML. 2. Esquemas Utilizados 94 Oracle - O Oracle possui como linguagem de suporte para XML, a linguagem XML Schema. Com isto, é possı́vel determinar a estrutura do documento XML e seu mapeamento para o esquema do Banco de Dados. eXist - O eXist possui uma linguagem de esquema chamada XML Schema. 3. Armazenamento Oracle - Para armazenar documentos é utilizado o tipo de dado XMLType, que oferece suporte nativo para XML, este tipo de dado pode ser tratado de 3 formas: • O tipo de dados CLOB, para o armazenamento do documento inteiro; • O mapeamento objeto relacional baseado no esquema do documento; • O armazenamento hı́brido. Pode existir ou não uma validação, ou seja, não é obrigatório o uso de um esquema antes do armazenamento dos documentos. eXist - O próprio documento é a unidade de armazenamento, os documentos são armazenados em coleções, documentos de esquemas diferentes podem estar armazenados na mesma coleção, sendo assim, é possı́vel fazer o armazenamento de documentos em massa no eXist. É possı́vel também armazenar um documento sem validá-lo, porém, existem alguns parâmetros que dirão se este armazenamento poderá ser realizado ou não, por regras de se um documento é válido ou não. 4. Linguagem de Consulta Oracle - Para recuperação de registros armazenados no oracle é utilizada a linguagem padrão de consulta SQL, quando são armazenados dados de um documento XML no oracle também é utilizado a 95 linguagem SQL para recuperação dos registros, independente da complexidade da consulta, é possı́vel sempre utilizar SQL, inclusive quando se quer recuperar dados de documentos XML com dados relacionais do banco. As consultas, baseadas na linguagem XPATH, são feitas através das APIs Java7 e PL/SQL8 do tipo XMLType. eXist - Uma extensão da linguagem XPATH, chamada XQuery, é utilizada, permitindo o acesso a múltiplos documentos. O resultado da consulta é um documento XML cuja raiz contém os elementos encontrados na consulta. A consulta aos dados contidos nos documentos armazenados no eXist é feita usando a XQuery. 5. Linguagem de Atualização Oracle - Para atualizar documentos XML armazenados no Oracle, é feito através da instrução de comando UPDATE. eXist - São poucos os bancos XML, que oferecem suporte a atualização de documentos XML, para atualizar um documento XML no eXist, deve-se primeiro recuperar o documento atualizar e em seguida armazenar novamente. 6. Formas de Indexação Oracle - Para se criar um ı́ndice para um elemento XML armazenado no Oracle, deve se levar em consideração o objetivo da consulta que vai ser realizado sobre o elemento, podendo ser aplicado no nı́vel de coluna XMLType, sobre o resultado de uma consulta XPATH ou sobre recursos organizados de forma hierárquica. eXist - Para criar ı́ndice, deve-se escolher um elemento ou um atributo, sendo aplicável de forma prática e direta. 7 Application Programming Interface ou Interface de Programação de Aplicativos Java é um conjunto de rotinas e padrões estabelecidos por um software para utilização de suas funcionalidades por programas aplicativos, ou seja meios para manipular ou validar documentos XML [Federizzi, 2006] 8 Procedural Language/Structured Query Language, ou linguagem procedural de consultas, é uma extensão da SQL [Takai et al., 2005] 96 7. Interfaces de Acesso Oracle - Para se consultar os documentos XML armazenados no Oracle, são utilizadas interfaces padrões, como SQL Navigator, SQL Plus. O Repositório XML DB permite visualizar hierarquicamente os objetos XMLType armazenados Isto é feito através dos protocolos HTTP, WebBanco de Dados e FTP, além da API JDBC; eXist - Pode ser feita diretamente via banco, como mostrado no Apendice B, ou ainda via navegação Web, onde se faz a consulta via url, e o resultado é retornado a página que se fez a consulta. 8. Descrição e análise de desempenho de acordo com o benchmark Foram realizadas 8 consultas das 20 possı́veis pelo XCheck. Não foram usadas todas as 20 em função do tempo necessário para rodá-las, exigiria uma máquina exclusiva para tal fim. As consultas foram feitas em cima de um documento de tamanho 9.40 KB. O relatório emitido demonstra os tempos de processamento do documento, o tempo de compilação da consulta, o tempo de execução da consulta, o tempo de retorno da consulta e ainda o tempo total. É possı́vel observar de acordo com os resultados obtidos no relatório anexo a este trabalho, que o Oracle obteve tempos menores em relação ao eXist. O gráfico a seguir é um gráfico do Tempo médio de execução de todas as operações realizadas pelo XCheck e emitido pelo mesmo: 97 Figura 5.5: Tempo médio gasto pela CPU para execução das Consultas Neste trabalho como citado anteriormente não foi considerado a escalabilidade ou seja, o fato de ser acrescentados mais informações no banco de dados. Mas caso isso fosse considerada ainda existiria os gráficos com média de tempo para cada documento ou (Average Execution Time for each Document) e o gráfico para média de tempo gasto em cada consulta (Average Execution Time for each Query). 5.2.5 Trabalhos Futuros Com a execução deste trabalho, são deixadas em aberto algumas possibilidades de trabalho futuro: • Para um maior detalhamento e alcance de resultados mais confiáveis, a execução de testes com diferentes tipos de informação se mostra bastante interessante. • Considerar a escalabilidade do Banco de Dados também viabiliza a quantificação dos resultados, o que proporciona ao usuário prever como o Banco de Dados se comportaria diante do armazenamento 98 de documentos maiores. Poderá ser interesse modificar este valor de acordo com critérios baseados em estudos sobre BDs de médias e grandes dimensões utilizados em aplicações reais. • Abordar aspectos quanto a normalização em BDs XML, confiabilidade, integridade referencial, escalabilidade, dentre outras caraterı́sticas não consideradas neste trabalho. 99 Capı́tulo 6 Conclusão A Internet vem favorecendo o tráfego e a troca de informações a cada dia com mais intensidade e em proporções maiores. Por ela, transitam dados de diversos formatos, com naturezas não pré-determinadas e sem uma rigidez em seu esquema. É nesse cenário que surge a XML, um formato que caminha para ser um padrão nesse meio e ainda vêm fortemente sendo utilizado por aplicações diversas, como intercâmbio e integração de dados. Sendo assim, este trabalho se propôs de forma cientı́fica, realizar um estudo sobre dados semi-estruturados e focado ao dado XML, abordar suas aplicações, exemplos práticos e armazenamento. No contexto de armazenamento, foi realizado um comparativo entre as duas principais formas de armazenamento, ou seja, bancos de dados com Suporte a dados XML e Bancos de Dados Nativos XML. As comparações quanto a suas funcionalidades também foram feitas e apresentadas. Foi observado no decorrer deste trabalho que pelo fato dos Bancos de Dados Modelo Relacional serem ainda os mais utilizados pelo mundo todo, eles acabam ganhando um destaque maior. Tais bancos de dados são consolidados no mercado e por isso investi-se mais no estudo de técnicas de adaptação e suporte a dados XML. É interessante notar que ao longo dos últimos anos todos os grandes fabricantes de BDs (como Oracle, IBM ou Microsoft) têm incluı́do nos seus produtos suporte a XML, o qual vem sendo sempre melhorado nas sucessivas versões dos seus produtos. Mas, tais investimentos não desmerecem os 100 BDs nativos para dados XML, o que é mostrado no decorrer deste trabalho. Estes dois cenários tecnológicos, utilização do modelo relacional e utilização de XML, justificam pela sua relevância um estudo comparativo de desempenho, muito embora isso deve ser feito com bastante cautela, visto que são modelos diferentes, com grandes particularidades. E isto foi feito recorrendo a um sistema de testes cuja arquitetura foi baseada em testes de performance (benchmark ) e ainda a estudos e experiências vividas durante a implementação deste trabalho. Para a realização deste trabalho tiveram de ser superados alguns obstáculos. Sendo que o maior de todos foi a familiarização e posterior utilização de dois BDs completamente distintos, o Oracle e o eXist, cada um com as suas particularidades, modo de funcionamento e acesso próprios. Além da tarefa de conhecer o bechmark XCheck, que é um software poderosı́ssimo, porém de complexo entendimento. Outro ponto que merece ser mencinado é o fato da escolha dos dois bancos de dados Oracle e eXist. Não é de interesse deste trabalho optar pelo melhor entre os dois BDs escolhidos, mas sim apresentar ao leitor uma ferramenta que o auxilie nesse sentido. De acordo com os resultados dos testes que foram realizados, demonstram dois nı́veis de desempenho claros: alto para o modelo relacional e baixo para o modelo XML. Isto não deixaria qualquer dúvida no momento de selecionar o BD, isto é, um BD relacional seria a escolha imediata. No entanto, esta decisão não deve ser tomada com base na medida de desempenho pura e simples. É necessário ainda contextualizar a situação e analisar a viabilidade do BD mesmo após o resultado do benchmark. É importante estar ciente da linguagem de consulta que o banco de dados utiliza, os meios de atualização que ele proporciona, se existem e como trabalham os tipos de indexação que favorecem muito o desempenho das consultas, além das interfaces de acesso e dos meios de manipulação dos dados. 101 Desta forma, chega-se a conclusão de que além do uso dos benchmarks, faz-se necessário um estudo das funcionalidades do BD em questão e do contexto em que será inserido. Para trabalhos futuros, é recomendado o aprofundamento e uma possı́vel implementação de benchmarks que proporcionem uma análise mais detalhada, uma vez que por meio do uso do relógio do sistema é possı́vel calcular o tempo de resposta entre uma consulta e outra, além de informações como inserção de dados e atualizações possı́veis. Além disso, seria interessante considerar documentos XML maiores, levando em consideração também a escalabilidade do sistema, aumentando o tamanho do documento em proporções pré estabelecidas. 102 Referências Abiteboul, S. (2003). Gerenciando Dados na Web. Editora Campus Ltda. Azevedo, A. L. d. (2006). Os primórdios do controle numérico. http: //www.mundocnc.com.br/historico.htm. Bohme, T. (2000). agement. Xmach-1: A benchmark for xml data man- http://dbs.uni-leipzig.de/de/projekte/XML/paper/ XMach-1.html Último acesso em 24/10/2007. Bourret, R. (2007). Xml and databases. http://www.rpbourret.com/ xml/XMLAndDatabases.htm Último acesso em 20/10/2007. Busse, R. (2003). Xmark an xml benchmark project. http://monetdb. cwi.nl/xml/ Último acesso em 30/10/2007. Carabajal, M. (2006). Sı́ntese histórica do surgimento e evolução da escrita. html://www.academialetrasbrasil.org.br/histescrita.htm, Último acesso em 10/10/2007. Collin, P. (2002). Dictionary of Information Technology. Peter Collin Publishing. Date, C. (2004). Introdução a Sistemas de Banco de Dados. Campus. Demurjian, A. S. (1985). Performance measurement methodologies for database systems. ACM. Federizzi, G. L. (2006). Apis java para xml. http://www.inf.ufrgs.br/ procpar/disc/inf01008/trabalhos/sem01-1/t2/apis xml java/, Último acesso em 17/11/2007. Figueiredo, F. J. V. (2003). Xml e banco de dados. Dissertação (Monografia em Ciência da Computação) - Instituto de Informática, Curso de Ciência da Computação Universidade Presbiteriana Mackenzie. 103 Florescu, D. e Kossamann, D. (1999). Storing and querying xml data using an rdmbs. IEEE Data Engineering Bulletin. Garber, R. (2004). Business-to-business. http://nasrvzope01.sebrae. com.br/revsb14/temasdecapa/ecommerce/businesstobusiness Último acesso em 25/09/2007. Gnuplot (2004). Gnuplot homepage. http://www.gnuplot.info/, Último acesso em 30/10/2007. Graves, M. (2003). Projeto de Banco de Dados com XML. Makron Books. Gray, J. (1993). Database and transaction processing performance handbook. the benchmark handbook. Morgan Kaufmann Publishers, Inc. Heuser, C. A., Carina, D., e Vanessa, B. (2005). Xml: Teoria e aplicações. 20o Simpósio Brasileiro de Banco de Dados. Hunter, D., Cagle, K., e et al., C. D. (2003). Beginning xml, 2nd edition: Xml schemas, soap, xslt, dom, and sax 2.0. Wiley Publishing, Inc. Iso (1986). International standards organization.iso/iec is 8879. information processing - text and office systems - standard generalized markup language. International Standards Organization. Jackson, M. (1999). Thirty years (and more of) databases. Elsevier. Junior, E. H. (2006). Sı́ntese histórica do surgimento dos computadores. http://www.tay.com.br/fip/microprocessadores, Último acesso em 10/09/2007. Khandelwal, N. (2004). xml dbmss. Xbench - a family of benchmarks for http://se.uwaterloo.ca/∼ddbms/projects/xbench/ Publications.html Último acesso em 30/10/2007. 104 Li, Y. G. (2001). Xoo7: Applying oo7 benchmark to xml query processing tools. http://www.comp.nus.edu.sg/∼leeml/papers/CIKM v11.pdf Último acesso em 20/10/2007. Martins, A. E. (2003). Análise comparativa de armazenamento,indexação e manipulação de documentos xml em sgbds nativo e habilitado. Monografia - Universidade Federal do Rio De Janeiro - UFRJ, Instituto de Matemática – IM,Departamento de Ciência da Computação. Martins, W. R. (2001). Servidor de documentos xml usando java. Dissertação apresentada ao Instituto de Ciências Matemáticas e de Computação, da Universidade de São Paulo - USP, como parte dos requisitos para obtenção do tı́tulo de Mestre em Ciências - Área de Ciências de Computação e Matemática Computacional. Meier, W. (2004). Open source native xml database. http://exist. sourceforge.net Último acesso em 01/10/2007. Meirelles, F. d. S. (2002). Informática - novas aplicações com microcomputadores. Makron Books. Mello, R. d. S. (2003a). Dados semi-estruturados. http://www. dcc.ufrj.br/∼braganholo/artigos/tutorial.pdf Último acesso em 05/05/2007. Mello, R. d. S. (2003b). Gerenciamento de dados xml. http: //www.ulbra-to.br/ensino/43020/artigos/anais2003/anais/ ein/minicursoEIN-1.pdf Último acesso em 26/05/2007. Moraes, C. R. (2001). Estrutura de Dados e Algoritmos. Berkeley. Navathe, S. e Elmasri, R. (2000). Sistemas de banco de dados - fundamentos e aplicações. LTC. Novais, J. L. P. (2006). Benchmark de bases de dados de suporte a serviços de informação. Dissertação apresentada à Escola de Engenharia da Uni105 versidade do Minho como parte dos requisitos para obtenção do tı́tulo de Mestre em Sistemas de Informação. Oliveira, M. B. (2000). História do computador. http:// www.novomilenio.inf.br/ano97/97hist01.htm Último acesso em 05/08/2007. Oracle (2005). Oracle technology network. http://www.oracle. com/technology/software/products/oracle9i/index.html, Último acesso em 10/11/2007. Pinto, M. B. Um estudo sobre esquemas para documentos xml. Anais do V Encontro de Estudantes de Informática do Tocantins. Palmas, TO. pp. 211-220. Pinto, M. B. (2003). Uma proposta para integração de es- quemas para documentos xml. www.ulbra-to.br/ensino/43020/ artigos/relatorios2003-2/TCC/Esquemas XML.pdf Último acesso em 25/09/2007. Rahm, E. (2000). Multi-user evaluation of xml data management systems with xmach-1. http://dbs.uni-leipzig.de Último acesso em 25/10/2007. Rahm, E. (2004). Benchmarking xml database systems - first experiences. http://dbs.uni-leipzig.de Último acesso em 10/10/2007. Runapongsa, xml query K. (2003). performance The michigan benchmark: diagnostics. Towards citeseer.ist.psu.edu/ runapongsa03michigan.html, Último acesso em 26/10/2007. Santiago, P. C. (2004). Uma estratégia de indexação para dados xml. Dissertação apresentada ao Instituto de Ciências Matemáticas e de Computação da Universidade Federal do Ceará. 106 Schuenck, M. (2004). Linguagem de consulta para documentos xml. http: //www.inf.ufrgs.br/∼deise/linguagemConsulta.doc, Último acesso em 29/10/2007. Seng, H. (2005). Requirements-driven database systems benchmark method. Berkeley. Silberschatz, A. K. (1999). Sistema de Banco de Dados. Makron Books. Silva, E. K. O. D. (2001). Um estudo sobre sistemas de banco de dados cliente/servidor. http://www.sebraepb.com.br:8080/bte/download/ Inform%C3%A1tica/190 1 arquivo bdados.pdf, Último acesso em 20/09/2007. Srisvastana, A. V. (2004). Comparison and benchmarking of native xml databases. http://www.cse.iitk.ac.in/report-repository/2004/ Y1043.pdf Último acesso em 05/10/2007. Stanley, Y. W. S. A methodology of application program analysis and conversion based on database semantics. Takai, O. K., Italiano, I. C., e Ferreira, J. E. (2005). Introdução a banco de dados. http://www.ime.usp.br/∼jef/apostila.pdf Último acesso em 22/09/2007. Tamino (2007). Native xml management. http://www.softwareag.com/ corporate/products/tamino/ Último acesso em 22/08/2007. Vieira, M. (2005). Especificação e validação de benchmarks de confiabilidade para sistemas transaccionais. http://ieeexplore.ieee.org/ iel5/9907/31504/01468665.pdf?tp=&isnumber=&arnumber=1468665, Último acesso em 28/10/2007. W3C (1996). World wide web consortium. extensible markup language (xml)1.1 w3c recommendation 04 february 2005. http://www.w3.or/ TR/xml11/ Último acesso em 04/04/2007. 107 Wikimedia (2001). Wikimedia: A enciclopedia livre. http://pt. wikipedia.org/wiki/PostScript, Último acesso em 26/10/2007. XCheck (2006). A benchmark checker for xml query processors. http://ilps.science.uva.nl/Resources/XCheck/, Último acesso em 17/11/2007. 108 Apêndice A XCheck A.1 Descrição do processo de instalação Foi usado para instalação do XCheck, o sistema operacional Linux na distribuição Ubuntu1 e as instruções aqui dadas são válidas para este Sistema Operacional. Para instalação do XCheck, como já foi falado anteriormente é necessário que se tenha o interpretador Perl. Para verificar se este interpretador já existe na sua máquina e em qual versão ele existe, use o comando: perl -v. No caso de não existir visite a página oficial http://www.cpan.org e então instale o mesmo. Nesta mesma página para proceguirmos com o processo de instalação do XCheck é necessário também obter os módulos CPAN Perl: • XML::Parser (na versão 2.34 ou superior) • XML::Checker (na versão 0.13 ou superior) O processo de instalação desses módulos pode ser dado de duas formas: • Se o usuário possuir privilégio de root 2 , ele pode instalar o módulo CPAN usando o seguinte comando: $ perl -MCPAN -e ’nome do módulo a ser instalado’, onde nome do módulo a ser instalado é substituindo inicialmente pelo XML::Parser e depois pelo XML::Checker. 1 Um sistema operacional completo free baseado em Linux Permissão para acesso total ao sistema operacional (instalação, remoção, alteração nos softwares e dados existentes na máquina) 2 109 • Caso o usuário não possua privilégios de root na máquina, é necessário para a instalação que os módulos sejam baixados diretamente no site, e que os seguintes comandos sejam dados: $ tar -xzvf XML-Parser-2.34.tar.gz $ tar -xzvf XML-Checker-0.13.tar.gz Sendo que os comandos anterios descompactam os arquivos, uma vez que eles estão num formato compacto. Após isto os seguintes comandos se fazem necessários: $ cd XML-Parser-2.34 $ perl Makefile.PL LIB=/mylib PREFIX=/mylib $ make $make test $ make install onde /mylib é o caminho do diretório onde você deseja instalar o módulo. É necessário repetir a sequência de comandos para o diretório XML-Checker0.13. Após isto é necessário modificar a biblioteca do Perl para o novo caminho dado /mylib, usando o seguinte comandos no bash shell 3 : $ PERL5LIB=/mylib/lib/perl/x.y.z:/mylib/share/perl/x.y.z $ export PERL5LIB Para continuar atualizando o caminho para /mylib é necessário que o usuário entre agora no editor de comandos tcsh shell, digitando: $ tcsh Já na tela do shell tcsh, é necessário entrar com os seguintes comandos: $setenv PERL5LIB /mylib/lib/perl/x.y.z:/mylib/share/perl/x.y.z Onde x.y.z é a versão do interpretador Perl, que o usuário já descobriu digitando perl -v no prompt de comandos padrão. 3 Prompt de comando padrão do linux. Quando o usuário tecla alt+ F7 no Ubuntu ele já cai no bash shell, ou editor de comandos 110 Após a instalação dos módulos citados anteriormente é necessário baixar o XCheck na página ofical no mesmo diretório onde já estão os módulos CPAN instalados. E na sequência descompactar o mesmo usando o seguinte comando: $ tar -xzvf XCheck.tqz Observe que após descompactados os seguintes arquivos estarão presentes: • Adapters - Diretório Adaptadores para bancos de dados o qual contém arquivos com a configuração dos Bds em um conjunto XML; • experiments - Diretório experimentos, contém todas as entradas de dados e os arquivos de saı́da que serão gravados nessa pasta (tanto os arquivos gerados na fase de execução quanto os dados gerados a fase de análise). Cada experimeno é gravado numa subpasta nesse diretório chamada experiment; • dtd - Diretório que contém as dtds para os arquivos XML de teste. O XCheck usa estes arquivos para validar as entradas; • repository - Diretório repository contém dois subdiretórios: docs e queries. Neles você pode armazenar os documentos XML e as consultas; • XML - Diretório que contém módulos usados pelo XCheck; • XCheck.pl - Parte principal do software; • CLAdapter.pl - é o script que processa os adaptadores; • Utility.pm - Módulo usado pelo XCheck; • Analysis.pm - Módulo usado pelo XCheck; • engines.xml - Arquivo de configuração que contém informações sobre os Bancos de dados; 111 • README (Arquivo em formato txt, com instruções de uso e instalação); • License (Arquivo com a licença GNU de uso); Para executar XCheck é necessário usar o seguinte comando no bash shell : $ ./XCheck.pl, e a tela, conforme figura A.1, é mostrada: Figura A.1: Instalação do XCheck Configuração do XCheck Para configurar o XCheck é necessário que o(s) Banco(s) de Dados esteja(m) instalado(s) no computador em que se encontra o XCheck. Tendo isto feito, a configuração inicia-se editando o arquivo engines.xml que está no diretório XCheck. Este arquivo tem uma estrutura como esta: 112 Figura A.2: Estrutura arquivo engines.xml Para cada banco de dados é necessário indicar o <path>, ou seja, o caminho completo de instalação do BD. Teste de configuração Depois da fase de configuração é possı́vel testar a funcionalidade do XCheck pela execução de um exemplo que vem com o pacote de instalação. O exemplo padrão que acompanha o XCheck é apropriado para o BD SaxonB. Em ordem para executar o exemplo com outro banco de dados é necessário editar o arquivo experiment.xml que se encontra no diretório experiments/example/ e modificar o elemento <engines> que contém o id de um banco de dados presente no arquivo de configuração engines.xml. Para o momento se o usuário quisesse usar o BD Galax é necessário modificar o arquivo experiment.xml conforme indicado na figura a seguir: 113 Figura A.3: Arquivo experiment Para testar a execução do XCheck com um exemplo é necessário estar no diretório principal do XCheck e executar o seguinte comando: $./XCheck.pl - run example Então aparecerá uma saı́da como esta: Figura A.4: Status que o programa dá após o comando $./XCheck.pl - run example Não havendo nenhum problema com a execução do XCheck, os resultados estarão na pasta experiments/example/output. Neste diretório estará dois arquivos, com o nome de outcome.xml e outcome.html contendo os 114 tempos de execução e outras informações, como os tamanhos dos resultados das consultas, detalhes técnicos do computador e sistema operacional usados, etc. Fase de execução - descrição dos experimentos Um experimento consiste em entrar com os documentos XML em um ou mais bancos de dados. O usuário pode especificar qual BD, as consultas e os documentos que irão participar dos testes no arquivo experiment.xml. XCheck executa o experimento lendo este arquivo XML e rodando as consultas definidas em todos os documentos. Todos os testes são armazenados em um diretório comum chamado experiments. É criado um diretório para cada experimento feito, que tem o nome sujestivo do BD o qual é usado para os testes. Sendo assim, para criar um novo experimento é necessário criar uma pasta dentro de experiments e salvar o arquivo experiment.xml. A seguir o arquivo experiment.xml : 115 Figura A.5: Alterando o arquivo experiment Um experimento é especificado pelos elementos name contendo o nome do experimento, description, contendo a descrição do experimento, engines, contendo uma lista de banco de dados representados pela palavra engine no documento, documents, que representa os documentos XML para teste e as consultas representadas no documento de configuração por queries. Os documentos XML são descritos pelo elemento document no arquivo de configuração citado anteriormente na figura. Para cada documento é necessário especificar o atributo id, que é um código de identificação daquele documento, a descrição do documento que é opcional e o nome do documento (todos os documentos XML devem estar armazenados na pasta repository/docs no diretório XCheck). 116 O usuário ainda tem a opção de conectar o benchmark a um gerador de documentos XML, ou seja o gerador cria os documentos de acordo com os tamanhos especificados pelo operador e isso pode ser útil ao avaliar a escalabilidade de um Sistema Gerenciador de Banco de dados. Neste trabalho não iremos abordar a escalabilidade no XCheck. Para rodar nosso experimento, use o comando .XCheck.pl - run teste nadia onde teste nadia foi o diretório criado dentro da pasta experiments e dentro de teste nadia já está o arquivo configurado com as especificações do BD eXist e o Oracle já definidas anteriormente como objeto de estudo. O Xcheck realiza então as seguintes interações para a realização dos testes: Figura A.6: Interações realizadas pelo Xcheck para chegar ao resultado Na figura ENGINES, DOCUMENTS e QUERIES são os elementos especificados no experiment.xml. É no documento de configuração experiment que o usuário direciona o caminho onde estão armazenados todos estes elementos. Durante a fase de execução o XCheck imprime algumas informações de saı́da informando o status sobre a execução do experimento. Para cada consulta o XCheck usa a palavra ok para indicar se a execução aconteceu sem nenhum erro ou a string ”!?” para indicar um erro na execução. No final da execução o XCheck produz 2 arquivos, chamados outcome.xml e outcome.html e estes arquivos são armazenados no diretório /experiments/teste nadia/output/ dentro da pasta XCheck. Por opção padrão o Xcheck executa cada consulta 4 vezes e retorna a média das 3 últimas consultas. Quando uma consulta retorna um erro no seu resultado, o próprio Xcheck avança para a próxima consulta. O 117 operador do sistema tem a opção de mudar o número de execuções com o uso do comando -n num, onde as consultas serão executadas num+1 vezes, sendo assim o comando: $ .XCheck.pl -run teste nadia - n 1 diz que as consultas serão realizadas 1+1 vezes, ou seja 2 vezes, visto que num=1. É possı́vel também gerar gráficos e o XCheck gera, após a realização da fase de execução, 5 gráficos: • plots queries.html • plots docs.html • plots 3d.html • plots engines queries.html • plots engines docs.html Outro ponto a ser citado é que o XCheck não armazena os resultados das consultas que ele faz ao Banco. É armazenado somente o tamanho dos resultados em bytes no arquivo outcome.html. Caso o usuário queira armazenar o resultado das consultas deve usar o comando: $ .XCheck.pl -run teste nadia -s Sendo que os resultados das consultas serão armazenados em experiments/teste nadia/output. Para facilitar é possı́vel usar todos os comandos de uma só vez assim, como por exemplo: $ .XCheck.pl -run teste nadia -n 2 -p -s, ou seja execute o experimento teste nadia 3 vezes cada consulta, gerando gráficos (-p) e armazenando o resultado das consultas (-s). 118 A.1.1 Fase de análise dos dados Depois da fase de execução de um experimento, o Xcheck pode auxiliar ao usuário na análise dos resultados obtidos com análises de estatı́sticas e gráficos. Sendo que, neste ponto a saı́da da fase de execução passa a ser a entrada da fase de análise dos dados, ou seja o arquivo outcome.xml da fase anterior passa a ser a entrada da fase de análise dos dados. Sendo que para executar a fase de análise é usado o comando -data no XCheck, como se segue: $ .XCheck.pl -data teste nadia XCheck lê o arquivo outcome.xml e os resultados da fase de análise são armazenados no arquivo outcome analysis.html no diretorio experiments/teste nadia/output e os gráficos são arquivados no diretório img A.2 Como adaptar o XCheck para receber outros BD’s É possı́vel adaptar o XCheck para trabalhar com outros Bancos de Dados, além dos Bds que já existem por defaut 4 . Muitos dos BD’s XML possui uma interface que executa consultas por meio de linhas de comando. O arquivo adaptador do XCheck para um BD XML deve conter instruções de execução e uma formal descrição de suas saı́das (resultado de consultas, mensagens de erro, etc). Xcheck interpreta este arquivo XML por um interpretador Perl, chamado CLAdapter.pl e executa o BD usando as intruções dadas e suas respectivas entradas. Neste trabalho foi usado então esta funcionalidade do XCheck para adaptá-lo ao uso do Oracle 9i e então poder testá-lo. Para conectá-lo ao XCheck os seguintes passos foram seguidos: 1. Copiar um arquivo de um BD já suportado pelo XCheck e renomeálo para oracle9i.xml, armazenando-o na pasta adapters, no XCheck 4 padrão 119 (mesmo lugar onde estão os adaptadores por defaut); 2. Inserir no arquivo engines.xml, o novo banco de dados. O arquivo engines.xml se encontra no diretório principal do XCheck. Figura A.7: Arquivo experiment adaptado ao Oracle 120 Apêndice B eXist B.1 Descrição do processo de Instalação A instalação do banco de dados Exist é bem intuitiva sendo necessário a JVM, ou Java Virtual Machine que é um programa que carrega e executa os aplicativos java, visto que como já dito no parágrafo anterior o BD Exist é desenvolvido em Java. Figura B.1: Instalação BD Exist Basta para sua instalação o usuário vá clicando em next e direcione o local da instalação. B.2 Alguns conceitos sobre eXist O Exist utiliza o conceito de esquemas lógicos baseados em coleções (Collection). Collection é utilizado para se referenciar um diretório de 121 armazenamento de documentos XML. As coleções poderão conter outras coleções como filhas e não define restrições a qualquer esquema particular ou tipo de documento XML. O eXist pode também fornecer um armazenamento de documentos XML sem esquema em coleções hierárquicas. Usando uma extensão da sintaxe XPath, usuários podem consultar uma parte distinta da coleção hierárquica ou mesmo todos os documentos contidos em um BD. Apesar de ser de pouco peso, a engenharia de pesquisa do eXist implementa um eficiente processo de consulta em ı́ndices. Um esquema de ı́ndices suporta a identificação rápida de relacionamentos estruturais entre os nós, tais como pai-filho, antecessor-descendente ou anterior/próximo. O alcance aos nós reais que estão armazenados em um documento XML central, não é requerido para esse tipo de expressão. Os estudiosos da área citam esse BD, com atualmente o melhor conjunto para aplicações que tratam desde pequenas até grandes coleções de documentos XML que são pouco atualizadas. eXist fornece um número de extensões ao padrão XPath para eficientemente processar consultas fulltext, ou seja em documentos centrados no documento, é possı́vel realizar buscas por palavras-chave, por proximidade de termos ou através de expressões regulares. Toda procura fulltext usa um arquivo de ı́ndice works.dbx, que mapeia palavras-chave para uma lista ordenada do documento e identificadores de nós únicos. Assim, quando são efetuadas requisições XPath, o eXist monta uma varredura completa sobre os ı́ndices de cada nó retornando os dados com maior eficiência. 122 Figura B.2: Organização Hierárquica das coleções A seguir são criadas as coleções e armazenamento dos documentos XML. Figura B.3: Tela de criação de coleções no Banco de Dados XML eXist. Foi criada uma coleção TCC e entro desta coleção uma sub coleção chamada Exemplos, onde serão armazenados os documentos aluno.xml e curso.xml, confome a seguir: 123 Figura B.4: Armazenamento dos documentos aluno.xml e curso.xml no Banco de Dados eXist A seguir é possı́vel observar o documento curso.xml após seu armazenamento: 124 Figura B.5: Documento curso.xml após armazenado no banco de dados 125 Apêndice C Oracle XML A partir da versão 9i, o oracle apresenta um novo tipo de objeto, que é o ”XMLType”, que oferece mecanismos para criar, extrair e indexar dados XML. Com o XMLType, desenvolvedores podem utilizar todo o poder de um Banco de Dados Relacional e simultaneamente trabalhar em um contexto XML, enquanto que desenvolvedores XML podem usar todo o poder de XML e trabalhar simultaneamente no contexto de um Banco de Dados Relacional [ORACLE, 2004]. A seguir na figura é apresentado a arquitetura do Oracle XML DB, seus componentes e serviços oferecidos: 126 Figura C.1: Arquitetura do Oracle XML DB [Oracle, 2005] C.1 Descrição do Processo de Instalação Para este trabalho usamos o Oracle na versão 9i, e para facilitar o entendimento do leitor deste, a seguir são apresentados algumas telas do momento da instalação. A instalação do oracle se dá de maneira bastante intuitiva, por meio de um instalador que o orienta o usuário, como pode ser observado na figura C.2 127 Figura C.2: Instalador Oracle Após o usuário clicar em próximo, aparece uma tela, figura C.3, que pede para indicar o local de instalação e na sequência indicar o produto para instalação, como é mostrado na figura C.3 a seguir: Figura C.3: Produto a escolher para a instalação Após isto opta-se por uma instalação personalizada e o usuário faz as escolhas de acordo com a Figura C.4 128 Figura C.4: opções para a instalação Estabelece-se o local a ser instalado os componentes e no momento de instalação é possı́vel criar-se o banco de dados para armazenamento, aproveitando esta funcionalidade já é feito isso como pode ser visualizado na figura C.5, na sequência os componentes listados são instalados conforme tela da figura C.6 Figura C.5: Criação do BD 129 Figura C.6: Instalação do Componente XML Após isto aparece para o usuário conforme figura C.7, uma forma de dar um status das funcionalidades acrescentadas, um resumo do que foi instalado conforme opção do usuário dos produtos oracle, conforme tela a seguir: Figura C.7: Resumo da instalação As operações seguintes acontecem por defaut, bastando que o usuário vá clicando em próximo. Uma das últimas telas que aparecem para o usuário 130 dá o status da configuração do Banco de dados e é dada a seguir, na figura C.8 Figura C.8: Tela de status de configuração C.2 Alguns conceitos sobre Oracle Para inserir os documentos XML no Banco de Dados Relacional Oracle foi utilizado o tipo XMLType. Os dados são armazenados em um tipo CLOB, um tipo de dados binário, mas espera-se que futuramente poderão ser armazenados de outras formas. Entre os muitos benefı́cios do XMLType, os principais são: • A junção dos dois mundos XML e SQL, pois torna possı́vel: - Operações SQL em contexto XML - Operações XML em contexto SQL. • Possui funções pré-definidas para indexação e navegação, entre outras; • XMLType usa um parser e um processador XML embutidos para obter melhor performance e escalabilidade; • O XMLType pode ser usado em conjunto com o comando SQL e combinado com outros tipos de dados. Por exemplo, pode-se fazer uma consulta a colunas XMLType e juntar com o resultado de uma consulta a uma coluna do tipo varchar; 131 Para exemplificar seu uso na prática foram criadas duas tabelas, uma chamada Aluno (figura C.9) e uma chamada curso (figura C.10). Figura C.9: Criação da Tabela Aluno no Oracle Figura C.10: Criação da Tabela Curso no Oracle Para ambos os casos primeira coluna é do tipo NUMBER e vai identificar o código de identificação do documento XML que será armazenado. A segunda coluna é do tipo XMLType onde serão armazenados os dados que estão no documentos XML. A inserção dos dados nas tabelas criadas se dá da seguinte maneira: Figura C.11: Inserir dados na tabela aluno 132 O oracle proporciona aos dados XML as mesmas operações que proporciona a dados com caracterı́stica relacional. Por exemplo, através do comando Update é possı́vel fazer atualizações em qualquer elemento, os elementos também podem ser removidos utilizando o comando delete. Foram testados também controle de integridade e controle de transação, da mesma forma que um Banco de Dados Relacional tratam os dados relacionais, tratam também os dados de um documento XML, ou seja, as modificações só são efetivadas após um comando commit, ou são descartadas após um comando rollback. No oracle é possı́vel armazenar o documento sem qualquer schema associado. Para fazer a validação de um documento XML após serem armazenados no Banco de Dados esquemas que devem ser do tipo XML Schema, devem ser previamente registrados no Oracle. Os documento que são baseados em um esquema são mapeados em tabelas e podem ser acessados através do Repositório XML DB. Utilizando tabelas ou visões do tipo XMLType é possı́vel indexar os dados, ou seja, a utilização de ı́ndices. 133 ANEXO A 134