FACULDADE DE TECNOLOGIA DE SÃO JOSÉ DOS CAMPOS EDUAN LENINE DOS SANTOS NEVES VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB SÃO JOSÉ DOS CAMPOS 2009 ii EDUAN LENINE DOS SANTOS NEVES VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB Trabalho de graduação apresentado à Faculdade de Tecnologia de São José dos Campos, como parte dos requisitos necessários para a obtenção do título de Tecnólogo em Informática Orientador: Giuliano Araujo Bertoti, Msc SÃO JOSÉ DOS CAMPOS 2009 iii EDUAN LENINE DOS SANTOS NEVES VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB Trabalho de graduação apresentado à Faculdade de Tecnologia de São José dos Campos, como parte dos requisitos necessários para a obtenção do título de Tecnólogo em Informática _____________________________________________________________ ÉRICA FERREIRA DE SOUZA, Graduada _____________________________________________________________ EDUARDO SAKAUE, Msc _____________________________________________________________ GIULIANO ARAUJO BERTOTI, Msc ___/___/___ DATA DE APROVAÇÃO iv Dedico esta obra primeiramente a Deus, que me iluminou em todos os momentos. E aos meus amigos David Ribeiro, José Teles e William Antônio, que me serviram como fonte de inspiração. v “O acaso é talvez, o pseudônimo que Deus usa quando não quer assinar suas obras.” T. Gauther vi RESUMO Este trabalho tem por objetivo o desenvolvimento de uma ferramenta visual para criação, manipulação e administração de banco de dados como serviço web. Discute-se primeiro a crescente demanda por armazenamento de dados e o surgimento das dificuldades de se implementar uma base de dados que comporte tal necessidade. Apresentam-se em seguida os conceitos de banco de dados como serviço web e as vantagens de se utilizar esta solução. E por fim é desenvolvido um protótipo da aplicação Visual DAAS, uma IDE para banco de dados como serviço web. Conclui-se que com esta ferramenta será possível aproveitar todas as vantagens e possibilidades que o banco de dados como serviço web pode prover. Palavras-Chave: Banco de Dados, Software como serviço Web, Ambiente de desenvolvimento integrado. vii ABSTRACT This work aims to create a visual tool for designing, manipulating and management database as a service. Descute first to the growing demand for data storage and the emergence of the difficulty of implementing a database comprising such a need. Apresent then the concepts of database as a service and the advantages of using this solution. And finally it developed a prototype of the Visual DAAS, an IDE for database as a service. Conclude that with this tool will be possible to enjoy all the benefits and possibilities that the database as a service can provide. Keywords: Database, Software as a Service, Integrated Development Environment. viii SUMÁRIO 1 INTRODUÇÃO ...................................................................................................... 10 1.1 Motivação ................................................................................................................. 10 1.2 Objetivos................................................................................................................... 10 1.2.1 Objetivo Geral .......................................................................................................... 11 1.2.2 Objetivos Específicos ............................................................................................... 11 1.3 Metodologia .............................................................................................................. 11 1.4 Organização do Trabalho.......................................................................................... 12 2 BANCO DE DADOS COMO SERVIÇO WEB ................................................... 13 2.1 Banco de Dados ........................................................................................................ 13 2.1.1 Banco de Dados Hierárquico .................................................................................... 14 2.1.2 Banco de Dados em Rede ......................................................................................... 15 2.1.3 Banco de Dados Relacional ...................................................................................... 16 2.2 Manipulação do Banco de Dados ............................................................................. 18 2.3 Sistemas Distribuídos ............................................................................................... 19 2.3.1 Arquitetura de um sistema distribuído ..................................................................... 19 2.4 Serviços Web (Web Services) ................................................................................... 20 2.4.1 Software como um serviço ....................................................................................... 20 2.4.2 Definição .................................................................................................................. 21 2.4.3 Objetivos................................................................................................................... 22 2.4.4 WSDL ....................................................................................................................... 22 2.4.5 XML ......................................................................................................................... 23 2.4.6 Arquitetura e Protocolos de Comunicação. .............................................................. 24 2.5 Banco de dados como Serviço Web ......................................................................... 27 2.5.1 Por que Banco de dados com Serviço web? ............................................................. 27 2.5.2 Desafios do DAAS ................................................................................................... 28 2.6 Considerações Finais ................................................................................................ 29 3 SOLUÇÕES EXISTENTES .................................................................................. 30 3.1 SimpleDB + AmazonS3 ........................................................................................... 30 9 3.1.1 Amazon S3 ............................................................................................................... 31 3.1.1.1 Funcionamento ......................................................................................................... 31 3.1.2 SimpleDB ................................................................................................................. 35 3.2 CouchDB .................................................................................................................. 37 3.2.1 Funcionamento ......................................................................................................... 39 3.3 Caso de Uso .............................................................................................................. 41 3.4 Considerações Finais ................................................................................................ 43 4 VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB .................................................................................................................................. 45 4.1 Arquitetura da Visual DAAS.................................................................................... 45 4.2 Funcionamento da BigTable como Serviço Web ..................................................... 47 4.3 Funcionalidades do Sistema ..................................................................................... 48 4.4 Requisitos do Sistema............................................................................................... 49 4.5 Dicionário de Dados ................................................................................................. 50 4.6 Arquitetura Orientada a Objetos ............................................................................... 52 4.7 Interface com o Usuário ........................................................................................... 56 4.8 Considerações finais ................................................................................................. 60 5 CONSIDERAÇÕES FINAIS ................................................................................. 61 5.1 Contribuições e Conclusões...................................................................................... 61 5.1.1 Publicação ................................................................................................................. 62 5.2 Trabalhos Futuros ..................................................................................................... 62 REFERÊNCIAS ........................................................................................................................ 63 APÊNDICE A - Artigo publicado no XI Simpósio de Iniciação Científica e Tecnológica ...... 67 10 1 INTRODUÇÃO 1.1 Motivação O aumento da demanda por recursos de armazenamentos de dados tornou-se comum em qualquer ambiente profissional, acadêmico ou científico. O uso deste recurso requer muito esforços e gastos na sua implementação, administração e manutenção (Hacigumus, 2009). Com o advento da Internet, o paradigma “Software como serviço” (Software as a Service, aplicações hospedadas em um servidor, que as disponibilizam via rede ou Internet) começaram a surgir, substituindo alguns paradigmas da utilização de Software (O'Reilly, 2005). Do mesmo modo o Banco de Dados como serviço Web (do inglês Database as a Service, DaaS) surgiu para sanar as dificuldades na utilização deste recurso fundamental (Hacigumus, 2009). Esta solução trás muitas vantagens em relação aos paradigmas de programação anteriores. Por exemplo, as organizações que adotam este tipo de serviço deixam de se preocupar com a compra de equipamentos para manter uma aplicação proprietária, economizam tempo no desenvolvimento da sua solução, tem todas as vantagens que um provedor de software como serviço web fornece como escalabilidade, segurança da informação, além de não ter de lidar com manutenção e um grande número de treinamentos necessários para o desenvolvimento de um software proprietário (Finch, 2006). Com isso, concentram-se esforços na solução do negócio, pagando apenas pela demanda de uso da solução (Ravi et al, 2004). 1.2 Objetivos A seguir serão apresentados os objetivos gerais e específicos deste trabalho. 11 1.2.1 Objetivo Geral O objetivo deste trabalho é desenvolver uma IDE, Ambiente de Desenvolvimento Integrado (do inglês Integrated Development Environment) para criação, manipulação e administração de banco de dados como serviço web, aproveitando algumas tecnologias existentes. 1.2.2 Objetivos Específicos Os objetivos específicos deste trabalho são: a) Definir uma arquitetura para um ambiente integrador de desenvolvimento para banco de dados como serviço web. b) Desenvolver uma engine para simplificar, administrar e controlar um repositório de dados na web. c) Desenvolver uma interface gráfica para simplificar o uso da ferramenta final. 1.3 Metodologia A metodologia aplicada aqui consiste na pesquisa por formas de desenvolvimento que se apliquem a um ambiente de desenvolvimento integrado e adapte-se as necessidades deste novo paradigma. Esta ferramenta deverá sanar as falhas dos sistemas atuais e disponibilizar de forma clara a tecnologia do banco de dados como serviço web, para desenvolvedores que não se adaptaram ainda a este paradigma. 12 1.4 Organização do Trabalho Os capítulos deste trabalho estão divididos da seguinte forma: a) Capítulo 2 – Apresenta todos os fundamentos e conceitos que compõe a tecnologia do banco de dados como serviço web. b) Capítulo 3 – Apresenta as soluções de banco de dados como serviço web disponibilizadas pela Apache e a Amazon, com exemplos de utilização. c) Capítulo 4 – Apresenta o desenvolvimento do ambiente de desenvolvimento integrado Visual DAAS. d) Capítulo 5 – Apresenta as conclusões deste trabalho. 13 2 BANCO DE DADOS COMO SERVIÇO WEB O objetivo deste capítulo é apresentar os conceitos de Banco de Dados, Serviços Web e o conceito de Banco de Dados como Serviço Web. As seções estão organizadas da seguinte forma: a seção 2.1 apresenta o que é Banco de Dados, como funciona e quais os tipos de Bancos de Dados existentes e sua principal linguagem de manipulação, a seção 2.2 explica o que é um Web Service e por último a seção 2.3 apresenta uma explicação dos conceitos de Banco de Dados como Serviço Web. 2.1 Banco de Dados O conceito de banco de dados surgiu, junto com a idéia do armazenamento de dados de forma organizada, para que os dados armazenados em uma base pudessem ser recuperados e manipulados de forma fácil e ágil. Nada mais é do que uma coleção de dados arranjados em uma estrutura lógica, na qual usa-se uma linguagem de pesquisa para se manipular os dados. A partir disto o banco de dados tem revolucionado a maneira como temos acesso à informação. A cada dia que passa nos tornamos cada vez mais dependentes desta tecnologia, que está presente em todos os tipos de situações (Ravi et al, 2004). É utilizado por aplicações ou por pessoas, que necessitam de um armazenamento de informações e que as disponibilize para futuras consultas em sua base de dados. Geralmente um banco de dados possui um gerenciador, o SGDB ( Sistema Gerenciador de Banco de Dados ) que auxilia na tarefa de administração deste recurso e seu conteúdo. Este software tem muitos objetivos, desde controle de acesso à base de dados até a consistência dos dados mantidos nela (Date, 2004). 14 A consistência dos dados mantidos em uma base é extremamente importante. Só assim é que o objetivo principal de um banco de dados torna-se possível, logo é preciso que seu gerenciador seja capaz de controlar os acessos dos usuários, que retiram e inserem dados, à base, para que esta transação não gere conflitos e inutilize os registros do banco. Para um melhor entendimento as próximas subseções irão abordar os tipos de bancos de dados e suas características de funcionamento. 2.1.1 Banco de Dados Hierárquico O modelo hierárquico utiliza-se da estrutura de dados Árvore para organizar seus registros internos, onde cada dado só tem um registro pai, formando assim uma hierarquia, podendo ter dentro dele várias hierarquias definindo os dados quem contém o banco. Este modelo atualmente está em desuso, pois possui uma grande desvantagem em sua estrutura relacionada à extração e inserção de dados. Em primeiro lugar ele é somente rápido quando se faz uma pesquisa em somente uma hierarquia, para fazer uma pesquisa que relacione mais de uma hierarquia ele deve percorrer a atual até o dado solicitado e voltar até a raiz e começar do zero na outra hierarquia relacionada (Silberschatz, A. 2006). Resumindo, apresenta problemas quando representa relacionamentos nãohierárquicos. Para ilustrar o banco e sua desvantagem vamos ao seguinte exemplo ilustrado na Figura 2.1. Supõe-se a seguinte situação: o usuário faz uma consulta esperando obter o endereço do SUPERVISOR de determinado DEPARTAMENTO. O sistema gerenciador do banco de dados deverá percorrer o seguinte caminho, primeiro ele irá da raiz à entidade DEPARTAMENTOS buscará pelo departamento solicitado, buscará na entidade abaixo SUPERVISÃO armazenará o EMP_ID (identificação do empregado), voltará à raiz, irá à tabela EMPREGADOS, buscará o empregado com o EMP_ID solicitado e irá, enfim, mais abaixo na entidade endereço que está relacionado a aquele registro de empregado (Silberschatz, A. 2006). 15 Ainda que seja visível sua restrição, este modelo de banco de dado fora muito utilizado nos primeiros sistemas de gestão de base de dados em mainframe. Figura 2.1: Exemplo de um modelo de banco de dados hierárquico (Silberschatz, A. 2006). 2.1.2 Banco de Dados em Rede No banco de dados em redes os registros são armazenados como uma coleção de dados conectados uns ao outros por meio de um link e cada registro é uma coleção de atributos com um valor único. Cada link liga somente dois registros. Isto significa que o modelo de dados em rede somente fornece relacionamento binário entre os seus dados. Portanto o índice de duplicação de dados, para suprir outros tipos de relacionamentos, neste modelo, é muito alto (Silberschatz, A. 2006). A Figura 2.2 mostra um modelo de banco de dados em rede. 16 Figura 2.2: Modelo de Dados em redes e seus relacionamentos (Silberschatz, A. 2006). 2.1.3 Banco de Dados Relacional A estrutura do banco de dados relacional é atualmente o modelo mais utilizado de banco de dados, seus dados são estruturados em tabelas simples, contendo linhas e colunas que representam seus registros, essas tabelas devem satisfazer o conceito de integridade especificado pelo criador do modelo Edgar F. Codd. A manipulação dessas tabelas é feita por operadores originários de outras tabelas e dentro destes operadores são destacadas as três mais importantes operações possíveis com eles: a) Restrição: capaz de extrair linhas de uma tabela dado uma especificação; b) Projeção: com a mesma função, mas em sentido diferente, esta operação especifica uma coluna a ser extraída de uma tabela; c) Junção: como o próprio nome indica esta operação une dois conteúdos de uma tabela com base em valores comuns de uma coluna em ambas as tabelas. 17 A Figura 2.3 um exemplo de funcionamento destas operações: Figura 2.3: Exemplo de tabelas de um modelo de banco de dados relacional (Date, C.J. 2004) O modelo relacional é baseado na teoria de conjuntos e lógica de predicados em matemática, assumindo assim algumas características destes conceitos. O termo relação é a designação de uma tabela de um tipo específico em matemática, assim, seguindo o exemplo da Figura 2.3, pode-se concluir que no banco de dados de produtos e tipos de produtos têm-se duas relações (Date, 2004). O modelo foi desenvolvido em 1969-70 com E. F. Codd, pela IBM em San Jose EUA. Desde a implantação do SGBDR (Sistema de Gerenciamento de Banco de Dados Relacionais) até hoje o modelo tem sido melhorado (Date, 2004). 18 2.2 Manipulação do Banco de Dados A manipulação de um Banco e de seus dados é feita por uma linguagem. As requisições feitas por esta linguagem podem ser realizadas por um software intermediário ou diretamente pelo usuário no SGDB. A mais comum é a SQL Linguagem de Consulta Estruturada (do inglês Structured Query Language). Softwares intermediários possuem comandos em SQL pré-programados, portanto o usuário final não tem conhecimento destes, mas se é um usuário que deseja atingir diretamente a base necessita de um conhecimento da linguagem. Uma linguagem de programação possui diversas características e uma delas é a proximidade que ela tem com a linguagem humana, que é classificada de duas maneiras, de Baixo Nível: Linguagem complexa muito próxima da linguagem de computador. Alto Nível linguagem com uma grande semelhança à da escrita humana. A Sql é classificada como de Alto nível, pois seus comandos são muitos parecidos com a escrita humana e bem distante do que realmente as máquinas interpretam. Alguns exemplos de comandos: a) Select: operador de consulta, com ele pode-se iniciar uma pesquisa que retorne n-colunas de n-tabelas; b) From: indica onde a pesquisa será feita, quais tabelas serão usadas, seguido dos nomes das tabelas; c) Where: filtrar uma consulta, em número de linhas, aplica-se condições de pesquisa com esta cláusula, seguida das condições a serem aplicadas; Assim como o modelo relacional de banco de dados, a linguagem SQL foi desenvolvida tendo como base de apoio a IBM Research no início da década de 70 e foi 19 implementado em um banco experimental chamado System R e posteriormente implementada em muitos outros bancos. Por ser muito utilizada esta linguagem sofreu atualizações e melhorias. Foi padronizada pela ANSI (American National Standards Institute), portanto a forma de se programar nela pode variar dependendo do padrão adotado pelo banco utilizado (Date, 2004). 2.3 Sistemas Distribuídos Como o próprio nome indica é um sistema dividido em pequenos softwares que juntos podem completar uma tarefa complexa. Esta opção de sistema é muito utilizada quando uma parte da aplicação a ser desenvolvida já existe como um serviço web, assim pode-se utilizar os recursos fornecidos por estes serviços e eliminar uma grande quantidade de tempo perdida para desenvolver uma parte do sistema que já existia. (Tanenbaum, A, 2002) Há um problema neste tipo de aplicação, como os sistemas não rodam em uma mesma máquina e se comunicam pela Internet ou rede, significa que estará muito suscetível à falhas e lentidão em seu funcionamento, dependendo muito do tipo de qualidade em que o serviço é fornecido. (Tanenbaum, A, 2002) 2.3.1 Arquitetura de um sistema distribuído Um sistema distribuído requer uma arquitetura que seja capaz de suprir essas dificuldades que surgem ao implantar um sistema distribuído, como latência e desconfiança do transporte das informações, a concorrência de acesso a recursos do sistema, a dificuldade de atualização de sistemas por motivo de incompatibilidade entre os softwares distribuídos, entre outros. 20 Para isso foi desenvolvido um paradigma arquitetural: SOA (Service Oriented Architecture) Arquitetura orientada a serviço muito utilizada para aplicações distribuídas por dar suporte a algumas dessas dificuldades encontradas ao se aplicar um sistema distribuído. Esta arquitetura padroniza a forma como um sistema distribuído deve funcionar, dividindo esta interação em basicamente em três processos, o da busca pelos recursos disponibilizados, a consolidação e confirmação do recurso requisitado, e por fim a execução do recurso disponibilizado por um Web Service (Erl, T 2005) 2.4 Serviços Web (Web Services) A seguir a definição de Web Service, sua arquitetura, características e vantagens desta solução. 2.4.1 Software como um serviço Software como um serviço (Software as a Service – SaaS), é um novo paradigma na utilização de software. Nesta solução em alguns casos você paga pelo o que usa e não pela propriedade, em outros casos este modelo é utilizado internamente em grandes corporações onde há uma diversidade de softwares desenvolvidos em linguagens diferentes, mas necessitam de um mesmo recurso. É um modelo de distribuição de software, o qual as aplicações ficam hospedadas em um servidor e são disponibilizadas pela rede. Esta tecnologia de serviço tem muitas vantagens, algumas delas são: a) Escalabilidade, capacidade de atender a todos os requisitantes; 21 b) Evita gastos com personalização e implementação; c) Economia de tempo; d) Dispensa a compra de equipamentos para manter a aplicação (Hardware, InfraEstrutura); e) Não ter de lidar com manutenção; f) Diminuir o número de treinamentos, necessários para o desenvolvimento de um software proprietário. Sendo necessário apenas a personalizar o serviço fornecido de acordo com a necessidade do contratante e ter o treinamento básico para lidar com a aplicação (Miller, 2009). 2.4.2 Definição Um Web Service (ou Serviço Web) é um software, hospedado em um servidor, que provê alguma funcionalidade útil para algum outro software, independente de em que linguagem fora desenvolvido este outro software e o próprio Web Service (En. W3C 2009). A comunicação entre o Web Service e softwares que o utilizam é feita através de uma rede, na maioria das vezes a Internet. Para que haja a capacidade de comunicação, necessitase de um conhecimento em comum entre estes dois softwares, no caso um protocolo de comunicação é admitido e padronizado para que isso seja possível. Um arquivo WSDL (Web Service Definition Language) define exatamente as funcionalidades de dado Web Service. Normalmente este arquivo é escrito em XML (Extensible Markup Language), um padrão de linguagem escolhido pela W3C (World Wide Web 22 Consortium, comunidade internacional, a qual suas organizações membros são dedicadas ao desenvolvimento de normas e padrões Web) para realizar esta interpretação universal (W3C, 2001). 2.4.3 Objetivos O objetivo desta tecnologia é possibilitar a interoperabilidade entre sistema de base programática diferente. Um software feito com uma linguagem que tenha suporte às tecnologias utilizadas por Web Service pode facilmente passar a utilizar os recursos de um ou até mesmo passar a prover Web Services. Com exemplo uma empresa que faz suas vendas via comércio eletrônico, pode facilmente solicitar um serviço web completo, que suporte este tipo de aplicação, sendo necessário apenas ter os conhecimentos de como utilizar esta tecnologia e usufruir dos seus benefícios. Evitando assim gastos com desenvolvimento de aplicações próprias refazendo aquilo que já está feito com qualidade, segurança, agilidade e competência, que são umas das características de empresas que fornecem este tipo de serviço, pois afinal de contas o negócio principal desses fornecedores de serviços web são os negócios de seus próprios clientes . 2.4.4 WSDL Linguagem de descrição de um Serviço Web (do inglês Web Services Description Language) é um documento que descreve onde e como suas funcionalidades estão definidas. Este recurso é necessário para que um Web Service seja entendido tanto pela máquina, quanto pelo homem que necessita para programar um agente requisitante. É dividido de dois conceitos o abstrato e o concreto: Abstrato descreve o padrão em que as mensagens trocadas no Web Service devem estar. Este padrão de mensagens é descrito 23 em um documento, o mais usado para esta funcionalidade é o XML Schema (no formato de arquivo .xsd). No Concreto o WSDL descreve como será feita a transação destas mensagens, que meio e que endereço estão localizados certos componentes de um Web Service (W3C). 2.4.5 XML Esta é uma das razões da existência de Web Services e Sistemas Distribuídos, pois facilita a comunicação entre sistemas e sem ela essa interoperabilidade seria muito difícil e cara de ser implementada. XML (Extensible Markup Language) é a linguagem de marcação utilizada para troca de mensagens. Seu conteúdo é todo definido dentro de tags pré-definidas pelo autor do documento, a sintaxe desta linguagem é bem simples e a estrutura interna de um documento XML é baseada no conceito de árvore, a qual um elemento pode ter vários filhos e um filho possui somente um pai. É recomendado pela W3C. Um exemplo de Arquivo na Figura 2.5: Figura 2.4: Aparência de um documento XML (W3School) O arquivo xml utilizado em um Web Service pode conter a descrição, o armazenamento e o formato da transmissão utilizada na troca de dados (W3Schools). O Web Service é dividido em duas partes funcionais: 24 a) Agentes: parte concreta de um Web Service, que enquanto está funcionando, os agentes tem a tarefa básica de enviar e receber mensagens, que são trocadas na interação entre os softwares requisitantes e o Web Service; b) Serviços: é um recurso abstrato de um Web Service, pode-se resumir que um serviço é uma das funções que um Web Service provê (W3C). Para que um Web Service seja útil e faça algum sentido é necessário alguém que pratique alguma ação dentro e fora deste sistema e para isso tem-se dois atores: o Requisitante e o Provedor. a) Requisitante: este ator ou entidade é responsável por solicitar o serviço de um Provedor, geralmente é o requisitante que inicia a troca de mensagens que contém as solicitações e respostas; b) Provedor: é o agente que contém o serviço a ser disponibilizado, caracteriza-se por receber uma solicitação e enviar uma resposta ao requisitante (W3C). Um Web Service deve possuir uma semântica na descrição de suas funcionalidades. Para se obter uma semântica desejável utiliza-se uma linguagem de marcação que torne as funcionalidades de um Web Service legível por outra máquina, tornando possível assim a comunicação entre os requisitantes e provedores do serviço. 2.4.6 Arquitetura e Protocolos de Comunicação. Para que troca de mensagens, no contexto do Web Services seja possível, existe um padrão de comunicação o SOAP (Simple Object Access Protocol) (W3C, 2007). 25 Na prática um Web Service possui diversos métodos disponíveis para uma dada aplicação, para se utilizar estes recurso tem-se o auxílio deste protocolo. A invocação remota de um método é armazenada em um arquivo XML, que contém o endereço do Web Service, o nome do método a se utilizar e os argumentos necessários, caso a resposta deste método seja baseada nos parâmetros passados. Este arquivo é enviado via HTTP para o servidor do Web Service HTTP (Hypertext Transfer Protocol), outro protocolo padrão para quem utiliza a Internet, pois através dele as páginas de web são requisitadas e transportadas (W3C). Na Figura 2.5, uma breve descrição do funcionamento de um Web Service SOAP. Figura 2.5: Ciclo básico de funcionamento de um Web Service SOAP. Voltando ao SOAP, esta tecnologia não define nenhuma semântica, quer seja a aplicação em que se aplica ou modelo de programação. Esta característica torna-o uma ferramenta que pode ser utilizada em qualquer tipo de aplicação desenvolvida. Devida esta flexibilidade tornou-se uma das principais normas para troca de mensagens em Web Services. Além desta vantagem o SOAP é um protocolo de RPC (Remote Procedure Calls) que funciona sobre HTTP (ou SMTP, ou outro) isto significa que suas mensagens serão transportadas independentes de normas de seguranças impostas por firewalls que normalmente são utilizadas em sistemas de RPC. 26 Funciona da seguinte maneira, ao invés do protocolo HTTP requisitar uma página para ser visualizada em um navegador, o SOAP envia seus arquivos e recebe uma resposta, caso haja, através do mesmo caminho em que foi enviada solicitação (W3C). Outra alternativa é a utilização da arquitetura REST, Transferência de Estado Representacional (do inglês Representational State Transfer), esta técnica segue o mesmo princípio utilizado pelo SOAP, o qual há um requisitante e é esperado uma resposta, neste caso as solicitações são efetuadas através de url e é também por onde os parâmetros são enviados. A resposta pode retornar um arquivo contendo o resultado do processamento. Na Figura 2.6, o ciclo de funcionamento de um Web Service REST. Figura 2.6: Ciclo de um Web Service REST REST aproveita de forma simples a utilização dos métodos nativos do protocolo HTTP, são eles POST, GET, PUT ou DELETE, cada um com uma funcionalidade específica, sendo que GET é o mais comum ser utilizado pelo REST. 27 2.5 Banco de dados como Serviço Web Após a definição de Banco de dados e Software como serviço web, pode-se definir Banco de dados como Serviço Web (do inglês Database as a service, DaaS), resume-se na disponibilização de um banco de dados e todas suas funcionalidades por meio de um Web Service, assumindo as características de um sistema distribuido, o qual o banco de dados, que antes era parte integrada do sistema, passa a se caracterizar por um nó deste, independente do resto da aplicação. A comunicação com a base que antes era feita diretamente por comandos executados pela aplicação sobre o banco, passa a ser encapsulada em uma mensagem, que enviada através de um protocolo de comunicação, de um cliente à um web service, tendo como resposta outra mensagem encapsulada e enviada por este mesmo protoloco. Porém agora não é necessário lidar com a melhora do desempenho do banco, para atender uma grande demanda, pois uma das característica básica de um sistema como serviço web é prover as funcionalidades com a capacidade de atender qualquer demanda solicitada (Escalabilidade). Nem tampouco lidar com problemas que poderiam surgir caso a base de dados sofresse alguma atualização no seu software, pois a interface da aplicação com a base de dados será a mesma independente da versão do software que prove os serviço. 2.5.1 Por que Banco de dados com Serviço web? Como foi abordada na seção 1.1 a implementação de modelos de banco de dados tradicionais trás custos operacionais indesejáveis pelas organizações, os gastos vão de compra de equipamentos a contratação de profissionais do ramo destinado a realizar tarefas simples, mas de grande valia. 28 Mesmo com todo este aparato ainda surgem alguns problemas com este antigo paradigma, seria muito difícil com alguns profissionais manter a escalabilidade de um sistema de banco de dados e na atualização de um banco para uma versão mais atual poderiam surgir diversos problemas de incompatibilidade. Um serviço web de banco de dados costuma ter suporte a todas estas necessidades e serem capazes de solucionar estes problemas que encontramos ao nos depararmos com estes modelos antigos. Com um custo muito menor e podendo até ser de graça, caso grandes organizações como a Google adaptem suas ferramentas para uso público. 2.5.2 Desafios do DAAS O que todos se perguntam Após compreender o conceito de DAAS é “E a privacidade dos dados?”. Realmente é necessário segurança sobre os dados armazenados e durante uma transação de informações. Para solucionar estes problemas provedores de DAAS estão preparados com regras de segurança, como a encriptação de todos os dados sob seu controle e torna isso uma das questões mais importantes de seus sistemas, pois os dados de seus clientes são de extrema importância e valiosos. Os níveis de encriptação podem variar de um grupo de dados a um único registro de uma dada estrutura de dados. E esta encriptação pode ser realizada no software que disponibiliza a aplicação Web Service ou no hardware que a mantém. Na camada software a encriptação pode ficar a cargo de algoritmos de confiança como RSA e BlowFish, que foram testados por um banco de dados como serviço web da IBM, o NetDB2, para a aplicação o algoritmo BlowFish saiu-se melhor nestes testes levando em conta a sua velocidade, simplicidade e sua eficiência. 29 Para a utilização desta ferramenta é disponibilizada uma função de encriptação e é fornecida ao usuário uma chave para desencriptar seus dados. Esta função e chave podem ser usadas diretamente nas operações feitas pelo usuário em suas consultas (do inglês querys) (H. Hacigumus 2002, IBM). 2.6 Considerações Finais Neste capítulo introduzimos os conceitos base para o entendimento de uma aplicação Database as a Service. Foram abordados os conceitos de banco de dados, aplicação distribuídas, Web Services e finalmente a teoria de banco de dados como serviço web. No próximo capítulo serão apresentadas soluções existentes e suas características em comuns e as diferenças entre elas e um caso de uso de um banco de dados como serviço web utilizado pelo site de fotografias Twitpic. 30 3 SOLUÇÕES EXISTENTES Os DAAS são disponibilizados pela Internet. Como não existe muito Web Services deste tipo, a maioria dos que existem são pagos. Para utilizar um DAAS deve-se recordar toda base que foi explicada anteriormente mais uma linguagem de programação que fará todo o papel de cliente requisitante. As seções estão organizadas na seguinte forma: seção 3.1 Apresenta a solução proposta pela Amazon que soma as vantagens de dois Web Services robustos, SimpleDB+AmazonS3, para uma aplicação completa de banco de dados como serviço, a seção 3.2 que mostra uma opção gratuita desenvolvida pela Apache CouchDB e por ultimo 3.3 seção destinada a um caso de uso que utiliza uma solução existente, Twitpic. 3.1 SimpleDB + AmazonS3 A Amazon.com, corporação tradicional de e-commerce, viu na tecnologia “Software as a Service” um grande mercado e começou a investir fortemente no desenvolvimento deste tipo de aplicação. (Amazon.com, 2006) SimpleDB é um exemplo de Web Service, desenvolvido pela Amazon, que interage com o Amazon S3 e através de suas funções de indexação e consulta formam um provedor de DAAS. O Amazon S3 (Amazon Simple Storage Service) possui funções para armazenamento enquanto o SimpleDB lida com a manipulação dos dados. Este conjunto de ferramentas tem como foco a excelência em escalabilidade. Provê uma simples interface Web 31 Service, que pode ser utilizada para armazenar e retirar dados em qualquer quantidade, hora e lugar da web. 3.1.1 Amazon S3 Desenvolvido para escrever, ler e apagar objetos de um a 5 gigabytes cada. E o número de objetos que se pode armazenar é ilimitado. Cada objeto é armazenado em bucket, repositório de dados, e recuperado, via uma única chave de acesso. Um bucket pode estar alocado nos Estados Unidos ou na Europa. Todos os dados serão armazenados nesses bucket’s, mas poderão ser acessados de qualquer lugar. O mecanismo de autenticação garante a segurança dos dados de acessos não autorizados. Mas se desejar que o acesso a algum objeto seja público, basta especificar o objeto com modificadores de acesso. 3.1.1.1 Funcionamento Neste exemplo será abordada a API SOAP para utilizar alguns recursos do Amazon S3 como a criação de um bucket e a Inserção de um dado dentro dele. Para utilizar as funcionalidades do produto Amazon ele disponibiliza um arquivo Wsdl que as descreve, para uma máquina interpretar, acessível no endereço http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl. Para validar o conteúdo dos Xml 32 gerado pelo cliente ela disponibiliza um XSD no link http://doc.s3.amazonaws.com/2006-0301/AmazonS3.xsd. Existem dados comuns que serão trafegados em todas as transações, estes são: a) AWSAccessKeyId: A Chave de Acesso para uma requisição AWS; b) Timestamp: Tempo atual do Sistema; c) Signature: Assinatura para Requisição. Na Figura 3.1, segue um exemplo de solicitação: Figura 3.1: Exemplo de solicitação para criação de um Bucket Este exemplo é uma requisição para a criação de um bucket com os dados completos, nome do bucket 'repositorio', note que na terceira chave, 'Acl', do contexto o conteúdo 'private' especifica o acesso ao recurso sendo privado para acesso somente a quem o criador deste permitir acessar. Ao enviar esta requisição, é esperada a resposta ilustrada na Figura 3.2. Feito a criação de um local de armazenamento, o próximo passo é armazenar um dado utilizando este espaço. 33 Figura 3.2: Exemplo de solicitação para criação de um Bucket PutObjectInline - Esta operação adiciona um objeto em um dado bucket. Os dados deste objeto devem estar contidos no corpo de uma mensagem SOAP. Caso ocorra de o objeto já existir, o novo objeto irá sobrescrever o objeto antigo, isso porque o Amazon S3 armazena a ultima requisição de escrita. Como já visto, Amazon S3 é um sistema distribuído. Se receber muitas requisições ao mesmo tempo, para um mesmo objeto, irá escrever todos simultaneamente, todos serão armazenados, mas somente um ficará no final. Amazon S3 não prove lock por objeto; se você precisar deve desenvolver uma camada de aplicação para isto. Para ter certeza de que o objeto não foi corrompido em toda sua viajem, você pode calcular o MD5 (Message-Digest algorithm 5, algoritmo utilizados na verificação de arquivos) deste objeto, depositar o resultado no Amazon S3 e comparar com o MD5 do objeto a ser conferido armazenado no repositório. Este método é limitado a trabalhar com objetos de no máximo 1mb, se utilizá-lo para maiores fins, receberá uma resposta indicando o seguinte erro: InlineDataTooLargeError indicando que passou do limite proposto, para armazenar objetos maiores a API do Amazon S3 disponibiliza o método não-linear PutObject. No exemplo da Figura 3.3, tem-se a inserção de um texto e um meta-dado inserindo objeto 'Teste' dentro do bucket 'repositorio', dado um usuário e FULL_CONTROL (controle completo) para acesso ao objeto por requisições anônimas: a) Bucket: local onde será inserido o objeto; 34 b) Key: a chave da assinatura do objeto; c) Metadata: Podem-se atribuir valores que identificam o objeto no sistema para a fácil identificação daquele objeto futuramente; d) Data: Dado codificado na Base64; Figura 3.3: Exemplo de documento xml para inserção de um objeto em um Bucket e) ContentLength: Tamanho do dado em bytes; f) AccessControlList: Uma lista de controle de acesso para o recurso. É opcional se for omitido o valor associado ao controle será de FULL_CONTROL, acesso 35 completo ao objeto. Se o objeto já existe, o controle de acesso anterior é substituído pelo novo. 3.1.2 SimpleDB A utilização do Amazon S3 crua não traz muitos benefícios para o usuário, além da escalabilidade, pois os dados não são nada mais além do que armazenados e retirados de forma bruta para isso desenvolveram o SimpleDB, que contém diversas funcionalidades para manipular esses dados armazenados como indexação e consultas. Estes serviços em conjunto com o Amazon S3 possibilitam a escalabilidade web com mais custo benefício aos desenvolvedores. Diferente do modelo tradicional banco de dados relacional, que necessitavam de gastos consideráveis em relação à clusterização, desenvolvimento da base e posteriormente requeria um DBA para administrar e dar manutenção ao sistema. Amazon SimpleDB é muito simples não requer esquema, automaticamente indexa seus dados e provê uma API simples para o acesso armazenamento dos dados. Esta aplicação diminui gastos administrativos com modelagem, manutenção de index e melhora do desempenho. SimpleDB é um Web Service simples que provê as funcionalidades de criação de data sets, consulta a seus dados e retorno dos resultados Organizam-se os dados em estruturas dentro de domínios e podem-se executar consultas através de toda estrutura de dados armazenada em um domínio particular. Domínios são preenchidos por itens, e itens são descritos por valores e atributos. Para entender estes elementos, considere-os uma variação de uma tabela. Um domínio é como uma planilha, itens são como linhas de dados, atributos são como colunas e os valores são os dados inseridos em cada célula. 36 Mas diferente de uma tabela, vários valores podem ser associados a cada célula. Por exemplo, para um item “calça” pode conter ambos os valores “azul” e “branca” para o atributo cor. Resumindo cada item pode ter sua própria configuração de atributos, como no exemplo da Figura 3.4. Tabela 3.1: Exemplo de um domínio Criar um domínio para guardar sua estrutura de configuração única de dados. Métodos GET, PUT ou DELETE são utilizados para manipulação dos itens nos domínios criados, associando cada item a seus atributos e valores. Cada item pode ter até 256 atributos diferentes e para cada atributos valores de 1 a 1024 bytes. Para consulta aos dados usa-se as Apis Select e Query e simples operadores de condição : =, !=, <, > <=, >=, STARTS-WITH, AND, OR, NOT, INTERSECTION e UNION entre outros operadores de funções aleatórias como de organização. Um exemplo de consulta que se pode ser feita é a seguinte: select * from meuDominio where atribuo = 'valor' Nesta solução você só paga por aquilo que utiliza (Amazon SimpleDB). 37 3.2 CouchDB É um banco dados como serviço que foi desenvolvido pela Apache, orientado a documentos, suas funcionalidades são acessíveis via protocolos RESTful Http/JSON API. É caracterizado por ser um banco robusto, através de uma interface orientada à documentos pode-se fazer consultas e indexar seu conteúdo. Esta interface tem sua engine desenvolvida em JavaScript (linguagem de script, interpretada por navegadores, criada em 1995, para adicionar dinamicidade às páginas na web) que facilita diversas operações comuns a um banco de dados (CouchDB, 2009). Características do sistema: a) Software Gratuito; b) Código fonte aberto; c) Interface amigável com o Usuário; d) Somente disponível para Sistema Operacional Linux (Implementação). Na Figura 3.4 é apresentada a arquitetura do sistema. Sua base foi escrita em Erlang, linguagem desenvolvida pela Ericsson caracterizada por possibilitar a modificação de um software, feito nela, em Runtime, assim nunca uma aplicação desenvolvida em Erlang precisa ser parada para efetuar suas atualizações. Esta linguagem dá suporte à comunicação HTTP, portanto suas funcionalidades podem ser fornecidas com muita facilidade possibilitando a criação de um Database as a Service completo (Armstrong, 2003). 38 Figura 3.4 – Arquitetura do Sistema CouchDB Documentos consistem em um objeto com campos nomeados e com valores atribuídos a esses campos, podendo ser estes valores, textos (Strings), numéricos, datas e outros. Um exemplo de documento poderia ser um post de um blog, na Figura 3.5: Figura 3.5 Estrutura de um documento Percebe-se que cada campo possui um valor característico, Assunto assim como Corpo são Strings simples, já Tag é um campo que possui uma lista de valores. CouchDB nada mais é do que uma coleção destes documentos que são identificados unicamente por um ID. 39 Diferentemente do Sql, o CouchDB foi desenvolvido para armazenar e disponibilizar uma grande quantidade de semi-estruturas, dados orientados a documentos. CouchDB facilita o desenvolvimento de aplicações orientadas a documentos. Com o CouchDB, não é necessário a criação de um esquema, então novos tipos de documentos podem ser adicionados juntamente com os antigos. A ferramenta de visualização, usando JavaScript, é desenhada para manusear facilmente estes novos tipos de documentos. 3.2.1 Funcionamento Atualmente o CouchDB é disponibilizado apenas para plataformas Linux e Mac, é distribuído como pacote de instalação e código fonte para ser compilado e usado, as duas versões de instalações são disponibilizadas gratuitamente no site http://couchdb.apache.org/. Há uma sessão no site dedicado a notificações de bugs, que usuários encontram no decorrer das operações. Podendo ser corrigidos pelos próprios usuários e sua correção pode ser disponibilizada na próxima versão oficial do software (CouchDB, 2009) Após instalar o CouchDB os primeiros passos vão ser executados via linha de comando. Assim como a maioria dos bancos de dados como serviço, o CouchDB disponibiliza três métodos (REST) principais para manipulação dos seus dados, estes são: a) GET - Método utilizado para capturar algum dado do banco; b) PUT - Tem a função de inserir dados no banco; c) DELETE - Utilizado para apagar um dado específico do banco. 40 Para acessar os métodos utiliza-se comando curl no terminal do sistema Linux seguido a URL precedida do prefixo -X juntamente com o método a ser utilizado Como no exemplo: ( 1 ) curl -X GET http://127.0.0.1:5984/_all_dbs Neste exemplo capturamos uma lista dos bancos de dados existentes no sistema. Se for seu primeiro acesso não deverá existir nenhum banco então a resposta que teria seria "[]" que indica a não existência de conteúdo no registro procurado. Mas se antes o método PUT fosse acionado para criar um banco de dados como no exemplo abaixo: ( 2 ) curl -X PUT http://127.0.0.1:5984/novobanco Ele retornaria a seguinte resposta: {"ok":true} Em forma de um simples documento, contendo apenas a confirmação da criação. Se fosse solicitado novamente o código ( 1 ) uma lista semelhante a esta iria aparecer no visualizador do CouchDB: ["novobanco"] Todas estas funcionalidades são disponibilizadas também pelo Futon, a interface gráfica administrativa do CouchDB, Figura 3.6, para acessar esta ferramenta é necessário executá-la via um navegador web através do endereço: [ http://127.0.0.1:5984/_utils/ ] 41 Figura 3.6: Visualização da Ferramenta Futon 3.3 Caso de Uso Atualmente há algumas aplicações que optaram por esta tecnologia, sistemas em que o uso do armazenamento é extremo, tanto para leitura quanto para escrita. Esses sistemas adotaram fornecedores de Banco de Dados como Serviço Web pagos, o qual hoje é a melhor opção a se adotar. Twitpic é um serviço muito simples para publicação de fotos e divulgação através da sua conta Twitter microblogging e serviço de relacionamentos. Acesso pela url http://twitpic.com, seu serviço pode ser também utilizado independentemente do Twitter, similar ao mais popular site de compartilhamento fotos. (Twitpic.com, 2009) Os serviços do Twitpic são disponibilizados via REST e suas fotos São armazenadas no serviço de armazenamento Amazon S3 disponibilizados pela Amazon citada anteriormente. Abaixo, na Figura 3.7, a home page do Twitpic. 42 Figura 3.7 Página principal do TwitPic Ao cadastrar-se no sistema você tem a possibilidade de fazer uploads de fotos ilimitados de para o seu perfil. Na Figura 3.8, um exemplo de foto hospedada nos serviços da Amazon, note que a url de acesso a imagem é extensa, isso porque nela estão contidas as seguintes informações: a) O endereço do Web Service da Amazon: http://s3.amazonaws.com b) A conta do Usuário http://s3.amazonaws.com/twitpic c) O repositório Utilizado e uma subcategoria. http://s3.amazonaws.com/twitpic/photos/large d) O Nome do registro http://s3.amazonaws.com/twitpic/photos/large/31196922.jpg 43 Figura 3.8 Exemplo de imagem armazenada em um Banco de dados como serviço Web e) E mais três parâmetros provenientes da AmazonS3: Chave de Acesso público ao Registro AWSAccessKeyId=0ZRYP5X5F6FSMBCCSE82 Tempo de validade do Registro Expires=1257022857 Autenticação do Usuário Signature=waVZT9AF1aC91B1U29PxqUzBPio%3D 3.4 Considerações Finais Dados os sistemas anteriores nota-se que há diferenças entre o modo de se fazer, mas o conceito base da criação de um repositório e a inclusão de registros neles é idêntico. 44 Nota-se que há realmente a necessidade do uso da tecnologia, porém ainda não há o suporte para a parte de manipulação visual, o que daria maior controle da situação em que se encontram seus registros no banco de dados atual. No próximo capítulo serão apresentadas as desvantagens destes produtos e o desenvolvimento de uma nova aplicação que supra estas falhas e traga as vantagens do Database as a Service para usuários iniciantes. 45 4 VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB Este capítulo apresenta a Visual DaaS, uma IDE para banco de dados como serviço web. Será apresentada sua arquitetura, funcionamento, dicionário de dados, arquitetura orientada a objetos, e interface gráfica com o usuário. As seções estão organizadas da seguinte forma: a seção 4.1 desenvolvimento da arquitetura do projeto Visual DAAS, a seção 4.2 mostra o funcionamento da BigTable e como são estruturados seus registros, na seção 4.3 é apresentado um breve resumo do funcionamento do sistema Visual DAAS, a seção 4.4 explica o funcionamento da engine que age entre a interface gráfica e o repositório BigTable, a seção 4.5 apresenta o dicionário de dados que definirá a estrutura dos dados armazenados na BigTable e finalmente na seção 4.6 é apresentado a interface gráfica do usuário. 4.1 Arquitetura da Visual DAAS Analisando o atual cenário de servidores de banco de dados como serviço web nota-se algumas deficiências: a) SimpleDB & AmazomS3: possui uma API completa e bem documentada, porém seus serviços são pagos e não possui uma interface gráfica com o usuário; b) Usabilidade: os bancos de dados como serviços atuais são voltados para a comunidade de desenvolvedores avançados, isso requer que o usuário tenha além do conhecimento de programação, entenda também de banco de dados orientado a documentos; 46 c) Soluções gratuitas como CouchDB, são para implementação e não fornece o serviço completo, qual incluiria a infra-estrutura. O modelo que será desenvolvido vai atender a essas dificuldades encontradas nos projetos atuais de DAAS, trazendo de forma mais simples as vantagens do banco de dados como serviço para os usuários iniciantes. A BigTable é uma base de dados distribuída, extensa e escalável criada pela Google. Ela é usada em muitas de suas aplicações populares e está somente disponível internamente para funcionários da Google. Embora a BigTable não seja um DaaS, o desenvolvedor Andrew Hitchcock, disponibiliza-a como Web Service, para testes. Seu uso é limitado, está disponível no link http://bigtable.appspot.com, o limite de uso é cerca de 500mb de capacidade são disponibilizados, por usuário. Este Web Service disponibiliza somente os métodos de acesso e manipulação GET, PUT e DELETE, arquitetura RESTful (Hitchcock, 2009). O objetivo da arquitetura é aproveitar este recurso e desenvolver sobre ele uma interface amigável ao usuário, para que ele possa desenvolver aplicações que utilizem essa ferramenta como banco de dados. Aproveitar os benefícios que uma ferramenta da Google pode oferecer como escalabidade e o funcionamento ininterrupto da base. Ao criar seu banco pela Visual DAAS, automaticamente será criado um Web Service deste banco para ser utilizado em outras aplicações caso o usuários esteja desenvolvendo. A arquitetura da Visual DAAS é apresentada na Figura 4.1. A arquitetura está definida da seguinte forma: a) BigTable: localiza-se na primeira camada da aplicação, que funciona como um repositório de dados, sendo manipulada diretamente pela engine da IDE. b) Engine: um nível acima está localizado o núcleo da aplicação, que concentra a maior parte do processamento, agindo como intermediário entre a interface 47 gráfica com o usuário e a BigTable. Nesta etapa encontra-se, também, o gerenciamento dos Web Services criados pelos usuários da IDE. Figura 4.1. Arquitetura da Visual DAAS c) Interface Gráfica: ultima camada da aplicação, qual o usuário tem o acesso direto e controle total sobre a aplicação. 4.2 Funcionamento da BigTable como Serviço Web O repositório BigTable trabalha com armazenamento de dados codificados em Base64 como no exemplo da Figura 4.2. O sistema de codificação Base64 para transferência de dados pela Internet, é constituído por 64 caracteres que variam de 0 a 9, de A a Z e inclui os símbolos “/”, “+” e “=”. (Josefsson, S., 2009) 48 FIGURA 4.2 Exemplo de um dado codificado na Base64 Cada registro é estruturado no formato JSON (JavaScript Object Notation Notação de Objetos JavaScript), é um padrão de troca de mensagens entre sistemas, os dados são organizados em listas e seu conteúdo é legível pelo homem (Json.org, 1999). Cada registro é considerado uma célula e cada célula possui os seguintes atributos, apresentados na Figura 4.3: FIGURA 4.3 Atributos de uma Célula contida na BigTable O método GET de captura de dados permite somente a captura de uma célula por vez, portanto será necessário o desenvolvimento de meta-dados para facilitar a manipulação dos dados na BigTable e definir algumas constantes em relação à estrutura das tabelas criadas por este modelo. 4.3 Funcionalidades do Sistema O Visual DAAS, assim como nos banco de dados convencionais, deverá prover funcionalidades simples, como criação e manipulação de tabelas, e mais complexas, como indexação e backup dos dados gravados na base. 49 Haverá também um sistema de consultas que serão feitas por meio de comandos SQL ou por um sistema de associação visual, no qual o usuário acrescentará os filtros da busca até montar o resultado desejado passando assim por um sistema de consulta da Engine Java e retornará ao usuário os resultados em uma tabela. Esta consulta também poderá ser feita através do Web Service do sistema e o resultado será disponibilizado em JSON. Este tipo de resultado facilitará a associação com outros aplicativos que usufruem de Web Services como complementos para suas aplicações. 4.4 Requisitos do Sistema A seguir serão apresentados os requisitos funcionais e não-funcionais da Visual DAAS: a) Requisitos Funcionais – A engine deve prover as funcionalidades relacionadas ao processamento de dados do sistema, incluído nisso estaria o sistema de gerenciamento da base de dados BigTable, o controle de acesso para os usuários, um gerenciador de consultas e indexação do banco, e por fim um gerenciador de Web Services tanto dos gerados como os dos consumidos no caso da BigTable; b) Requisitos não funcionais - Uma característica indispensável em um sistema Web é a usabilidade, pois assim suas funcionalidades podem ser assimiladas sem ao menos que o usuário tenha a necessidade de ler um manual ou tutorial de como manipular o aplicativo em questão. Outro requisito é a Escalabilidade, além da provida pela Web Service da BigTable, o Visual DAAS também deverá atender a este requisito, que leva em conta tanto software como o hardware, utilizado no servidor que hospeda a aplicações, que passa a ter papel fundamental neste padrão de qualidade. 50 4.5 Dicionário de Dados Em um banco de dados convencional os arquivos de configurações definem a estrutura de um banco de dados, armazenam elementos que o compõe e os dados que estão contidos neles em datafiles. Como a BigTable não disponibiliza nenhum recurso similar, é necessário esquematizar esta base para que seja possível implementar o modelo. Baseado em um banco de dados relacional, os dados serão armazenados em tabelas e estas conterão linhas e colunas. Assim como as células também deve-se definir atributos para uma tabela, esses atributos serão armazenados em uma célula seu conteúdo estará estruturado no formato JSON, como no exemplo da Figura 4.4. Figura 4.4 Estrutura de uma tabela em JSON Todas as tabelas serão descritas pelos atributos, apresentados na Figura 4.5. 51 Figura 4.5 Atributos de uma tabela do sistema Visual DAAS A meta-célula da Figura 4.5, precisa ser armazenada em uma tabela, linha e coluna específica, com um padrão para ser seguido caso outra tabela seja criada. Primeiramente é necessário assim como os bancos convencionais criar tabelas de que armazenarão os objetos criados no sistema e seus usuários, essas tabelas também deverão seguir o padrão especificado anteriormente, exemplo na Figura 4.6: FIGURA 4.6 A Tabela de objetos armazenará as tabelas criadas pelos usuários do sistema Note que o primeiro registro da tabela de objetos refere-se a ela mesma, indicando a existência de um objeto no sistema. 52 Feito isso, é necessário armazenarmos os usuários do sistema, que terão poder sobre os objetos criados. Então se cria uma tabela para este fim, apresentada na Figura 4.7. Esta tabela também será referenciada nos registros de objeto e assim será com todos os outros criados. Ao criar-se uma tabela ou objeto, uma rotina do sistema criará automaticamente um registro na tabela de objetos relacionando diretamente ao usuário que a criou. FIGURA 4.7 Tabela de Usuários do sistema. Primeiramente será necessária a criação de um cadastro de usuário, para identificação do autor das futuras tabelas. Este dado inicial será gravado na tabela de usuários criada nas configurações do dicionário de dados. Ao entrar no sistema, após o login, o usuário terá acesso ao Menu de aplicações e visualização da área de trabalho do sistema. 4.6 Arquitetura Orientada a Objetos A Engine da IDE será desenvolvida em Java, linguagem que dá suporte a todos os requisitos levantados anteriormente (Sun Microsystem, 2005). 53 Abaixo as funcionalidades providas pelo sistema: a) Visualizador de Objetos: Menu principal do programa onde será possível visualizar os objetos criados pelo usuário; b) Criar Tabela: Disponibilizará um painel contendo os campos necessários para criação de uma tabela: nome da tabela, nº de colunas e seus nomes; c) Visualizar Tabela: Ao clicar aparecerá uma janela para digitar o nome da tabela e um botão para confirmação, caso exista o sistema exibe a tabela na área de tarefas; d) Editar Tabela: Também com o campo de entrada do nome da tabela esta opção retorna uma tabela de objetos com colunas referenciando aos atributos das tabelas como nome de colunas e tipo; e) Fazer Consulta: Com esta opção pode-se executar uma consulta através de uma string SQL e o resultado caso haja será uma tabela com os dados na área de trabalho do sistema; f) Gerar Web Service de uma Tabela: Esta opção gera uma Url para que uma tabela possa ser acessada via RESTful. Analisando estas informações e atendendo os requisitos funcionais é possível desenvolver o diagrama de classes do projeto, apresentado na Figura 4.8: 54 FIGURA 4.8 Diagrama de classes do sistema. Este diagrama ilustra o funcionamento do sistema, mas análise é necessária para o entendimento por completo. Primeiramente a classe Célula seria a base do sistema com suas simples características valor do tipo Object, podendo receber variados tipos de conteúdo, e a especificação do conteúdo no atributo tipo, classificado pelos atributos pertencentes ao Enum TipoDados podendo variar entre DATA, MOEDA, NUMERO e TEXTO. Acima encontra-se a classe Linha que é composta por Células, possui os atributos tabela, que recebe como valor o nome da tabela que está contida, o atributo número, que corresponde ao número da linha na tabela, o atributo colunas que é uma lista correspondente ao formato da linha e por fim o atributo célula, que é uma lista das células contidas naquela linha. 55 A classe Coluna possui os atributos tabela, qual ela pertence, nome da coluna e tipo define o dado que pode ser inserido no seu conteúdo. A classe está associada diretamente com uma Linha e juntas compõe a classe Tabela que além dessas características ainda possui os atributos: a) nome: nome dado à tabela; b) usuário: criador da tabela; c) dataCriacao: data da criação da tabela; d) colunas: lista de colunas que formam a tabela; e) linhas: lista das linhas com conteúdo que preenchem a tabela. Esta tabela já possui alguns métodos bem definidos, além de seus “getters” e “setters” como addLinha e addColuna, que adicionam respectivamente uma linha e uma coluna à tabela. TabelaToJSON e JSONToTable são responsáveis pela manipulação da tabela de acordo com a camada em que a tabela estiver sendo utilizada, para gravar a tabela na BigTable o método tabelaToJSON faz a tradução do um objeto Tabela para um arquivo JSON. Já para o caminho oposto utiliza-se o método JSONToTable. Para a camada Visual será desenvolvido um modelo de dados similar em JavaScript, que receberia como fonte de dados os objetos codificados em JSON, processo ilustrado na Figura 4.9. Para a utilização da BigTable foram adicionados recursos para se adaptar ao projeto ao arquivo BigTable.jar disponibilizado por este site http://bigtable.appspot.com, foi criada uma classe BigTableMelhorada para suprir com esta necessidade. Foram criados métodos para inserir, deletar, atualizar e selecionar uma tabela na BigTable de acordo com os padrões especificados pelo projeto. 56 A classe Configurações será a primeira a ser executada na implementação do projeto, pois é responsável pela configuração inicial do dicionário de dados e da manipulação do seu conteúdo. Web Browser Web Server HTML / JAVASCRIPT JAVA function eventManager() { AjaxService.getOptions(populateList()); } public class AjaxService { JSONreturn new String[] {“1”,”2”,”3”}; function populateList(data) { DWEUtil.addOption(“okoko”,data); } public String[] getOptions(){ } } REQUISIÇÃO Figura 4.9 Ilustração do processo de transição dos dados pelas camadas da aplicação. E por fim a classe Consulta que tratara das consultas em SQL feias pelo usuário, retornando o resultado, se existir, uma outra tabela no formato JSON. Este método também será acessível via Web Service, podendo ser acessado via RESTful. 4.7 Interface com o Usuário Foi utilizado como base para a construção da interface o conceito de aplicações RIA Aplicações de Internet Rica (da sigla em inglês RIA - Rich Internet Application), possuem 57 os aspectos visuais semelhantes a aplicativos desktop, adequando-se aos quesitos de usabilidade e maior aproveitamento da aplicação (Duhl, J, 2003). Uma das características das aplicações RIA é a de que todo o processamento destinado a interface fica a cargo do navegador e a maior parte dos dados ficam em um servidor de aplicações. Esta interface será desenvolvida em JavaScript com auxílio da biblioteca JQuery, que suporta vários plugins, para facilitar a criação de aplicações RIA . A seguir, na Figura 4.6, o design da aplicação Visual BigTable. Figura 4.6: Modelo de como seria a visualização do sistema. 58 Abaixo, Figura 4.7 a Tela de login do sistema com o botão para cadastro do usuário caso ainda não esteja cadastrado e um botão “OK” para confirmação do Login. Figura 4.7 a Tela de Login do sistema Abaixo, Figura 4.8, o Visualizador de Tabelas, caracteriza-se por uma tela simples, com um campo de texto para inclusão do nome da tabela desejada e um botão de “OK” para confirmação da busca. 59 Figura 4.8 Visualizador de Tabelas. Abaixo, Figura 4.9, o Editor de Tabelas, tela de edição tem o leiaute similar ao de uma tabela, contém colunas que representam os atributos da tabela como Nome, Tipo, Tamanho e Data da Criação, e suas linhas que representam os campos da tabela em edição. Figura 4.9 Editor de Tabelas. Abaixo, Figura 4.10, a Tela para consultas em SQL. Dado um comando SQL, o resultado será uma nova tela com a tabela resultante. 60 Figura 4.10 Tela de Consultas. 4.8 Considerações finais Este capítulo apresentou a Visual DAAS. Foi descrito a arquitetura do sistema, funcionamento, dicionário de dados, arquitetura orientada a objetos e interface gráfica. No próximo capítulo serão apresentadas as considerações finais deste Trabalho. 61 5 CONSIDERAÇÕES FINAIS Este trabalho apresentou a Visual DAAS, uma IDE para criação, administração e manipulação de Banco de Dados como Serviço Web. Este Capítulo está organizado como segue: a Seção 5.1 apresenta as contribuições e conclusões, enquanto a Seção 5.2 apresenta possíveis trabalhos futuros. 5.1 Contribuições e Conclusões As contribuições deste trabalho são: a) Definição de uma arquitetura de IDE’s para o desenvolvimento de Banco de Dados como Serviço Web b) Definição e implementação de uma engine Java para a administração e manipulação dos dados criados e dos Web Services disponibilizados pela aplicação. c) Definição e implementação de uma interface gráfica, utilizando tecnologias RIA. A partir destas contribuições pode-se concluir que: a) É possível facilitar a utilização de um banco de dados como serviço web, sem ao menos o usuário digitar uma linha de código para criação do banco. 62 b) Por ser um sistema bem encapsulado, pois a camada de visualização está desacoplada da engine da aplicação, é possível o uso posterior desta ferramenta que podem ser acoplada a diversas outras aplicações. 5.1.1 Publicação Artigo Publicado: “Visual DAAS: uma IDE para banco de dados como serviço web” artigo completo publicado no XI Simpósio de Iniciação Científica e Tecnológica (SICT 2009), promovido pela Faculdade de Tecnologia de São Paulo. Conforme apêndice A. 5.2 Trabalhos Futuros As contribuições alcançadas com este trabalho não encerram as pesquisas relacionadas ao sistema Visual DAAS, mas abrem oportunidades para alguns trabalhos futuros: a) Desenvolver um sistema Visual que se adapte a qualquer base de dados como serviço web, pois a Visual DAAS é destinada apenas a BigTable. b) Aprimorar os quesitos de segurança da informação, como criptografia e controle de concorrência. c) Aplicar testes com usuários finais, a fim de analisar os quesitos funcionais e não funcionais do sistema. 63 REFERÊNCIAS AMAZON – Simple Storage Service Disponível em: < http://aws.amazon.com/s3/>. Acesso 09 de junho 2009 AMAZON – SimpleDB Disponível em: <http://aws.amazon.com/simpledb/>. Acesso 20 de março 2009 AMAZON – What is AWS? Disponível em: <http://aws.amazon.com/what-is-aws/>. Acesso 08 de junho 2009 ARMSTRONG, J - Making reliable distributed systems in the presence of software errors. Disponível <http://ftp.sunet.se/pub/lang/erlang/download/armstrong_thesis_2003.pdf> em: Acesso 12 agosto de 2009. BENNETT, K- Service-based software: the future for flexible software, 2000 – Disponível em: <http://www.bds.ie/Pdf/ServiceOriented1.pdf>. Acesso 06 de abril de 2009. CHANG, F., DEAN, J., GHEMAWAT, S., WILSON, H., WALLACH, D., BURROWS, M., CHANDRA, T., FIKES, A., GRUBER, R. - Bigtable: A Distributed Storage System for Structured Data <http://labs.google.com/papers/bigtable.html>. Acesso 05 de março de 2009. COUCHDB - The CouchDB Project. Disponível em: <http://CouchDB.apache.org/>. Acesso 10 de abril de 2009 DATE, C. J. Introdução a Sistemas de Banco de Dados – Editora Campus – 2004 64 Duhl, J. - Rich Internet Applications, novembro de 2003. Disponível em: <http://www.adobe.com/platform/whitepapers/idc_impact_of_rias.pdf>. Acesso em 18 outubro de 2009 ERL, T., Service-Oriented Architecture: Concepts, Technology, and Design, Prentice Hall, 2005, ISBN 0-13-185858-0. FIELDING, DR - REST - Representational State Transfer. 2000, Disponível em <http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm>. Acesso 17 de agosto de 2009. FINCH, C. - The Benefits of the Software-as-a-Service Model, 2006 - Disponível em: <http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleI d=107276>. Acesso 06 de abril de 2009. HACIGUMUS, H., IYER, B., E MEHROTRA, S. Providing database as a service. Data Engineering, 2002. Proceedings. 18ª Conferencia Iternacional de (2002) IBM. - Working with jQuery, Part 3: Rich Internet applications with jQuery and Ajax : JQuery: Building tomorrow's Web apps today, 28 outubro 2008. Disponível em: <http://www.ibm.com/developerworks/web/library/wa-jquery3/>. Acesso em 21 outubro de 2009 JAVA – The Java Language Specification, Third Edition – Disponível em: <http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html>. Acesso em 05 de junho de 2009. JOSEFSSON, S., The Base16, Base32, and Base64 Data Encodings - Ed. Network Working Group – Disponível em: < http://tools.ietf.org/pdf/rfc3548.pdf >. Acesso em 3 de agosto de 2009. 65 JSON - JavaScript Object Notation. Disponível em: <www.json.org>. Acesso 21 de agosto de 2009. Miller, M - Cloud Computing Pros and Cons for End Users Disponível em: <http://www.informit.com/articles/article.aspx?p=1324280>. Acesso em 15 de setembro 2009. RAVI JAMMALAMADAKA ,JEHAN WICKRAMASURYA, MAHESH DATT YEMMANURU ,YONGHUA WU - Database As Service - Disponível em: <http://wwwdb.ics.uci.edu/pages/research/das>. Acesso em: 01 de abril de 2009. SILBERSCHATZ, A, HENRY F. KORTH, S. SUDARSHAN Sistema de Banco de Dados - Editora Campos – 2006 TANENBAUM, A, STEEN V, Distributed Systems: Principles and Paradigms, Prentice Hall, 2002, ISBN 0-13-088893-1. TIM O'REILLY - What Is Web 2.0. Publicado em 30/09/2005 - Disponível em <http://oreilly.com/web2/archive/what-is-web-20.html>. Acesso em 15 de abril de 2009. W3C - Hypertext Transfer Protocol - HTTP/1.1 Disponível em: <http://www.w3.org/Protocols/rfc2616/rfc2616.html>. Acesso 04 de abril de 2009. W3C - SOAP Version 1.2 Part 0: Primer (Second Edition) Recommendation 27 Abril de 2007 Diponível em:<http://www.w3.org/TR/2007/REC-soap12-part0-20070427>. Acesso em 03 de abril de 2009 W3C - Web Services Activity Disponível em: < http://www.w3.org/2002/ws/ >. Acesso em: 3 de abril de 2009. W3C - Web Services Architecture Disponível em: < http://www.w3.org/TR/ws-arch/>. Acesso em: 3 de abril de 2009. 66 W3C - Web Services Architecture Working Group Note 11 Fevereiro de 2004 Disponível em: <http://www.w3.org/TR/ws-arch/>. Acesso em: 20 de março de 2009. W3SCHOLLS – Xml what is this? Disponível <http://www.w3schools.com/XML/xml_whatis.asp>. Acesso em 04 de abril 2009 em: 67 APÊNDICE A - Artigo publicado no XI Simpósio de Iniciação Científica e Tecnológica VISUAL DAAS: UMA IDE PARA BANCO DE DADOS COMO SERVIÇO WEB Eduan Lenine dos Santos Neves¹, Giuliano Bertoti¹ ¹Facudade de Tecnologia do Estado de São Paulo(FATEC), São José dos Campos, Brasil [email protected], [email protected] 1. Introdução A utilização do banco de dados como recurso de armazenamento estruturado tornou-se muito comum na área acadêmica, científica e profissional[1]. A dificuldade de se implementar, manter e administrar um banco de dados é comum em todas essas situações. É necessária a contratação de mão de obra especializada e nem sempre é possível prover o recurso com a mesma escalabilidade de um serviço com grande demanda. Soluções de aplicações disponibilizadas pela web tornam-se mais comum com o aumento da utilização da internet banda larga, tendência que deu nome a uma nova fase da computação, Computação nas Nuvens (Clouding Computing)[2]. Algumas soluções que passaram para este plano e estão se destacando uma das outras, nisso se encaixa o Banco de Dados como Serviço Web, que é fornecer toda a infra-estrutura necessária para implementação e o banco de dados em si pela web. Esta solução trás muitas vantagens em relação aos paradigmas de programação anteriores. Por exemplo, as organizações que adotam este tipo de serviço deixam de se preocupar com a compra de equipamentos para manter uma aplicação proprietária, economizam tempo no desenvolvimento da sua solução, tem todas as vantagens que um provedor de serviços fornece como escalabilidade, segurança da informação, além de não ter de lidar com manutenção e um grande número de treinamentos, necessários para o desenvolvimento de um software proprietário. Concentrando seus esforços na solução do negócio. Este artigo tem como objetivo mostrar como é possível no cenário atual a implementação de uma IDE (Ambiente de Desenvolvimento Integrado) para Banco de dados como Serviço Web, utilizando recursos existentes e disponibilizando suas funcionalidades de forma simples e eficiente. 2. Bigtable: Armazenamento como serviço. Para a construção de uma aplicação desse tipo, é necessária uma grande capacidade de armazenamento. Esse tipo de necessidade também é sanado por serviços disponibilizados pela Internet, podendo ser aproveitado por diversos tipos de aplicações. Uma opção é a “Bigtable as a Service”, solução desenvolvida pela Google utilizada em diversas outras aplicações como ferramenta eficiente de armazenamento [3], será utilizada aqui como principal fonte e base de dados. 3. A IDE: Visual Daas A forma mais simples de se manipular uma ferramenta é quando esta possui uma interface gráfica, simples e usual. Para isso foi desenvolvido um protótipo do que seria possível visualizar no sistema desenvolvido para manipulação de um Daas (Database as a service), na Figura 1. Figura 1 - Interface gráfica da aplicação A IDE deve prover funcionalidades básicas existentes nos atuais sistemas de banco de dados e avançadas que seriam a disponibilização de suas funcionalidades e bases criadas pelos usuários, através de Web Services. 4. Conclusão Este artigo apresentou os conceitos deste novo paradigma na utilização de banco de dados e descreveu a possibilidade de se desenvolver uma IDE para manipulação e melhor aproveitamentos das vantagens oferecidas por esta nova tecnologia. 5. Referências [1] Database as a Service, Disponível em: <http://www-db.ics.uci.edu/pages/research/das>. [2] Wikipedia En, Disponível em <http://en.wikipedia.org/wiki/Cloud_computing> [3] Bigtable: A Distributed Storage System for Structured Data , Disponível em: <http://labs.google.com/papers/bigtable.html>