0 CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTÔNIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM INFORMÁTICA COM ÊNFASE EM BANCO DE DADOS CAMILA RIBEIRO DA SILVA NATHAN FELYPE DELGADO SANTOS ANÁLISE COMPARATIVA DE DESEMPENHO ENTRE OS BANCOS DE DADOS POSTGRESQL E MYSQL LINS/SP 2º SEMESTRE/2016 1 CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTÔNIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM INFORMÁTICA COM ÊNFASE EM BANCO DE DADOS CAMILA RIBEIRO DA SILVA NATHAN FELYPE DELGADO SANTOS ANÁLISE COMPARATIVA DE DESEMPENHO ENTRE OS BANCOS DE DADOS POSTGRESQL E MYSQL Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins “Prof. Antônio Seabra”, como parte dos requisitos necessários para obtenção do Título de Tecnólogo em Banco de Dados. Prof. Me. Adriano Bezerra LINS/SP 2º SEMESTRE/2016 2 CAMILA RIBEIRO DA SILVA NATHAN FELYPE DELGADO SANTOS ANÁLISE COMPARATIVA DE DESEMPENHO ENTRE OS BANCOS DE DADOS POSTGRESQL E MYSQL Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins “Prof. Antônio Seabra”, como parte dos requisitos necessários para obtenção do Título de Tecnólogo em Banco de Dados sob orientação do Prof. Me. Adriano Bezerra. Data de Aprovação: ____ / ____ / ______ _________________________________________________ Orientador Prof. Me. Adriano Bezerra _________________________________________________ Prof. Me. _________________________________________________ Prof. Me. 3 Dedico este trabalho, primeiramente, a Deus, pela sabedoria concedida e a oportunidade de estar realizando este estudo. Aos meus familiares e amigos pelo incentivo e apoio nos momentos difíceis. E a todos os professores qυе foram tão importantes na minha vida acadêmica е no desenvolvimento desta monografia. Camila Ribeiro da Silva 4 Dedico este trabalho primeiramente a Deus e a minha mãe que sempre me deu forças para acreditar em mim e na palavra Dele, aos amigos e a todos que me apoiaram neste trabalho. Nathan Felype Delgado Dos Santos 5 AGRADECIMENTOS Neste momento muito importante da minha vida, onde eu não achei que iria chegar, gostaria de agradecer a Deus onde esteve comigo a minha vida toda, protegendo e me dando sabedoria. Agradeço ao Prof. Adriano Bezerra por ser nosso orientador, nos ajudando e dando dicas sempre que precisamos. Agradeço ao Prof. Alciano, mesmo não dando aulas mais na Fatec foi o nosso primeiro orientador e o primeiro que acreditou neste trabalho. Agradeço a minha família, por me ensinar valores da amizade e nunca desistir. Em especial minha mãe e minha vó que eu não trocaria por nada nesse mundo. Agradeço as melhores pessoas que eu pude conhecer nesses anos de estudo Daiane Simião, Carolina Bicudo e Junior Barrionuevo, pessoas que mesmo distantes estão no meu coração para sempre. Agradeço ao Lucian Alves que sempre nos ajudou na parte de programação e agora já faz parte da minha vida, obrigado por todas as explicações. Agradeço a minha parceira Camila Ribeiro aonde vem comigo nessa batalha todos esses anos, obrigado por sua paciência comigo nos meus momentos de crise. Agradeço a todos que torceram para que esse dia chegasse muito obrigado. Nathan Felype Delgado Santos 6 AGRADECIMENTOS Neste momento tão especial agradeço primeiramente a Deus, pois ele é a base de tudo. Agradeço a minha família por ter acreditado e me apoiado do início ao fim. Agradeço ao prof. Adriano Bezerra, pela orientação e as dicas importantíssimas que nos deu para a elaboração desse estudo e ao longo do curso. Agradeço ao prof. Alciano Augusto, que no início deste estudo fez parte como uma peça importantíssima, por ter acreditado em nós para a realização do trabalho. Agradeço ao meu amigo Lucian Alves pelas ajudas para a realização do estudo. Agradeço a todos os professores que ao longo do curso tive o prazer de conhecer. Agradeço ao meu parceiro de projeto Nathan Delgado pela oportunidade de ter feito este trabalho com ele. Enfim, agradeço a todos os amigos que conheci ao longo do curso, que fizeram parte da minha formação diretamente ou indiretamente, o meu muito obrigada. Camila Ribeiro da Silva 7 RESUMO Este trabalho visa avaliar o desempenho de dois gerenciadores de banco de dados: MySQL e PostgreSQL, executando Avaliações de Desempenho de Insert, Update, Delete e Select para observar o tempo de resposta de cada um dos SGBDs utilizando o Apache JMeter. Baseado nestas Avaliações de Desempenho, este trabalho também demonstra qual dos dois SGBDs é mais eficiente levando em conta o ambiente e as condições definidas no cenário proposto. Palavras-Chaves: Banco de Dados. PostgreSQL. MySQL. Avaliação de Desempenho. 8 ABSTRACT This job aims to evaluate the performance of two database management systems: MySQL and PostgreSQL, running Insert, Update, Delete and Select tests to observe the response time of each DBMS using the Apache Jmeter. Based on these tests, this job also demonstrate which of the two DBMS is the most efficient in each CRUD category (Insert, Update, Delete e Select), considering the ambient and conditions defined in the scenario proposed in this job. Key-words: Database. PostgreSQL. MySQL. Performance evaluation. 9 LISTA DE ILUSTRAÇÕES FIGURA 1.1 – Representação simplificada de um sistema de banco de dados ....... 18 FIGURA 1.2 - Estrutura de um banco de dados ........................................................ 23 FIGURA 2.1- Tabela do usuário no MySQL .............................................................. 30 FIGURA 2.2 - Interface do pgAdmin4 ....................................................................... 32 FIGURA 3.1 - Modelo de Dados Relacional .............................................................. 34 FIGURA 3.2 – Tabela de Clientes ............................................................................ 35 FIGURA 3.3 – Tabela de Marcas ............................................................................. 36 FIGURA 3.4 – Tabela de Produtos ............................................................................ 36 FIGURA 3.5- Tabela de Vendas Orig ....................................................................... 37 FIGURA 3.6- Tabela de Vendas ............................................................................... 38 FIGURA 3.7 - Interface JMeter ................................................................................. 40 FIGURA 4.1 - Avaliação de desempenho com Select ............................................... 42 FIGURA 4.2 - Avaliação de desempenho com Select Join ....................................... 43 FIGURA 4.3 - Avaliação de desempenho com Select, Join e Where ........................ 44 FIGURA 4.4 - Avaliação de desempenho Select com Join, Where e Sum ............... 45 FIGURA 4.5 - Avaliação de desempenho com Insert ................................................ 46 FIGURA 4.6 - Avaliação de desempenho de Insert com Join .................................. 47 FIGURA 4.7 - Avaliação de desempenho Insert com Join e Where .......................... 49 FIGURA 4.8 - Avaliação de desempenho de Delete ................................................. 50 FIGURA 4.9 - Avaliação de desempenho de Delete com Where .............................. 51 FIGURA 4.10 - Avaliação de desempenho Update .................................................. 52 FIGURA 4.11 - Avaliação de desempenho Update com Where ............................... 53 10 LISTA DE TABELAS Tabela 1 - Avaliação de Desempenho com Selects ............................................... 54 Tabela 2 - Avaliação de Desempenho com Inserts ................................................ 55 Tabela 3 - Avaliação de Desempenho com Delete ................................................ 55 Tabela 4 - Avaliação de Desempenho com Update .............................................. 55 11 LISTA DE ABREVIATURAS E SIGLAS BD – Banco de Dados BDOO – Banco de Dados Orientados a Objeto BSD – Berkely Software Distribution CRUD – Creat, Read, Update, Delte DBA – Administrador de Banco de Dados IBM – International Business Machines JDBC – Java Database Connectivity MR – Modelo Relacional ODM – Object Query Language ODMG – Obejct Database Management Group SGDB – Sistema de Gerenciamento de Banco de Dados SQL- Structured Query Language 12 LISTA DE SÍMBOLOS @ - Arroba ® - Registrado ™- Trade Mark 13 SUMÁRIO INTRODUÇÃO ...................................................................................................... 15 1 CONCEITOS ...................................................................................................... 17 1.1 CONCEITOS DE BANCO DE DADOS ............................................17 1.1.1 História do Banco de Dados ............................................................................. 19 1.1.2 Por que usar Banco de Dados? ....................................................................... 20 1.1.3 Modelos de Banco de Dados ........................................................................... 20 1.2 MODELO RELACIONAL.............................................................................. 21 1.2.1 Bancos de Dados Orientados a Objeto ............................................................ 22 1.3 SISTEMAS DE GERENCIAMENTO DE BANCO DE DADOS ........... 24 1.3.1 SGBDs MAIS UTILIZADOS.............................................................................. 25 1.4 CONSULTAS .................................................................................................. 26 2 ANÁLISES DE BANCO DE DADOS ............................................................ 28 2.1 BANCO DE DADOS MYSQL ...................................................................... 28 2.1.1 Versão Utilizada no Projeto .............................................................................. 29 2.2 BANCO DE DADOS POSTGRESQL........................................................ 30 2.2.1 Interfaces Com Usuário .................................................................................... 31 2.2.2 Interfaces de Terminal Interativo ...................................................................... 32 2.2.3 Interfaces de Linguagem de Programação....................................................... 32 2.2.4 Tipos Nos PostgreSQL ..................................................................................... 33 3 DESENVOLVIMENTO DO TRABALHO ...................................................... 34 3.1 METODOLOGIA ............................................................................................ 34 3.2 GERAÇÃO DE DADOS ............................................................................... 35 3.3 HARDWARE UTILIZADO ............................................................................ 38 3.4 FERRAMENTA APACHE JMETER .......................................................... 39 3.4.1 Instalação do Apache JMeter ........................................................................... 39 3.5 INSTALAÇÃO E CONFIGURAÇÃO DOS BANCOS ............................. 40 4 AVALIAÇÃO DE DESEMPENHO E RESULTADOS ................................ 41 4.1 AVALIAÇÃO DE DESEMPENHO COM SELECT SIMPLES .............. 41 14 4.2 AVALIAÇÃO DE DESEMPENHO COM SELECT JOIN ....................... 42 4.3 AVALIAÇÃO DE DESEMPENHO COM SELECT, JOIN E WHERE . 43 4.4 AVALIAÇÃO DE DESEMPENHO COM SELECT, JOIN, WHERE E SUM ......................................................................................................................... 44 4.5 AVALIAÇÃO DE DESEMPENHO COM INSERT................................... 45 4.6 AVALIAÇÃO DE DESEMPENHO DE INSERT COM JOIN ................. 46 4.7 AVALIAÇÃO DE DESEMPENHO INSERT COM JOIN E WHERE ... 48 4.8 AVALIAÇÃO DE DESEMPENHO DE DELETE...................................... 49 4.9 AVALIAÇÃO DE DESEMPENHO DE DELETE COM WHERE .......... 50 4.10 AVALIAÇÃO DE DESEMPENHO UPDATE ........................................ 51 4.11 AVALIAÇÃO DE DESEMPENHO UPDATE COM WHERE .............. 52 CONSIDERAÇÕES FINAIS ............................................................................... 54 REFERÊNCIAS BIBLIOGRÁFICAS ................................................................. 56 ANEXO A................................................................................................................ 57 ANEXO B................................................................................................................ 60 ANEXO C ............................................................................................................... 62 ANEXO D ............................................................................................................... 64 15 INTRODUÇÃO Desde o fim do século passado a tecnologia vem sendo cada vez mais utilizada nas empresas. Neste novo século, a informação passou a ser imprescindível, a necessidade de empresas tomarem decisões cruciais, faz da informação seu bem mais precioso. O volume de dados é cada vez maior e se torna indispensável escolher um banco de dados que seja eficiente, robusto, e que atenda a todas as premissas de um banco de dados (BD), pois fatores como a segurança, velocidade e desempenho podem determinar o sucesso ou fracasso de uma empresa, segundo C.J Date (2008). Este trabalho destaca dois bancos de dados conhecidos, o PostgreSQL e o MySQL. Assim o presente trabalho tem como meta realizar uma análise comparativa escolhendo alguns critérios de análise baseados em operações create, read, update e delete (CRUD) que possam ser avaliados em ambos os bancos de dados escolhidos e após a realização das Avaliações de Desempenho em um sistema computacional comum a todos, demonstrar qual será mais eficiente levando-se em conta o ambiente e as condições definidas. O principal objetivo deste trabalho é apresentar uma comparação de algumas características que os definem e que possam permitir a cada empresa escolher um ou outro, ressaltando que esta análise não define qual é o melhor banco de dados e sim fornece informações que devem ser consideradas ao escolher um sistema gerenciador de banco de dados (SGBD). Vale lembrar, que no mercado de banco de dados, existem também outras opções de SGDB’s, como: Oracle, Firebird, DB2, MS SQL entre outros. Tem-se então como objetivo, demonstrar como estes dois SGBD’s (PostgreSQL e MySQL), tratam e manipulam suas informações, e também verificar o tempo de resposta em várias consultas com um grande volume de dados, para um melhor e imparcial resultado. A metodologia utilizada para o trabalho em questão consiste em inicialmente, definir qual a base de dados utilizada bem como as versões dos SGBD’s escolhidos. Para a base de dados, utilizamos a mesma base de dados com os mesmos registros para que discrepâncias não venham a ocorrer nas Avaliação de Desempenho realizadas. As versões utilizadas foram as últimas versões disponibilizadas no mercado que eram gratuitas. 16 Após estas definições foi realizado uma pesquisa bibliográfica com o objetivo de definir quais seriam as consultas a serem desenvolvidas. Foi realizada uma pesquisa com o intuído de encontrar e definir uma ferramenta de análise e avaliação de desempenho para banco de dados. Com essa pesquisa definimos por utilizar a ferramenta Apache Jmeter para a realização das análises de desempenho entre os bancos de dados. Para a realização das avaliações de desempenho, foi usado os mesmos critérios nos dois SGBDs. Após a realização dos testes, foi feita uma análise que permitiu definir qual o SGBD que apresentou melhor desempenho para o Banco de Dados em questão. Sendo esta apresentada como resultado final das avaliações de desempenho. 17 1 CONCEITOS Neste capítulo serão apresentados conceitos de banco de dados, suas definições e uma breve história sobre eles, da mesma forma mostrando o modelo relacional e seus tipos de SGDB’s, dando visão maior aos BD usados neste trabalho que são o MySQL e PostgreSQL. 1.1 CONCEITOS DE BANCO DE DADOS Segundo C.J Date (2008) um banco de dados (BD) é basicamente um sistema computadorizado de manutenção de registros. O BD por si só, pode ser considerado um armário de arquivamento eletrônico; ou seja, um recipiente para coleção de arquivos de dados computadorizados. Os usuários do sistema podem solicitar que o sistema realize diversas operações envolvendo tais arquivos – por exemplo: acrescentar novos arquivos ao bd; inserir dados em arquivos existentes; buscar dados de arquivos existentes; excluir dados de arquivos existentes; alterar dados em arquivos existentes; remover arquivos existentes do bd. A Figura .1 é uma imagem simplificada de um sistema de banco de dados, por meio dela é possível visualizar que tal sistema envolve quatro componentes principais: dados, hardware, software e usuários. 18 Figura 1.1 Representação simplificada de um sistema de banco de dados Fonte: DevMedia, 2015 Para C.J Date (2008) são expressões gerais que descrevem características das entidades sobre as quais operam os algoritmos. Neste caso, os dados por si só também não constituem informação, a menos que esta surja do adequado processamento de dados. Hardware É a parte física de um computador, é formada pelos componentes eletrônicos, como por exemplo, circuitos de fios e luz, placas, utensílios e qualquer outro material em estado físico, que seja necessário para fazer com o que o computador funcione. Software É uma sequência de instruções escritas para serem interpretadas por um computador com o objetivo de executar tarefas específicas. Também pode ser definido como os programas que comandam o funcionamento de um computador. Usuários Segundo C.J Date (2008) existem 3 classes gerais de usuários: 19 programadores de aplicações – Responsáveis pela escrita de programas de aplicações de dados em alguma linguagem de programação; usuários finais – Que acessam o banco de dados interativamente, podendo acessar o banco de dados por meio de uma das aplicações on-line ou, então, pode usar uma interface fornecida como parte integrante do software do sistema; administrador do banco de dados (DBA) – É a pessoa que toma decisões estratégicas e de normas com relação aos dados da empresa, responsável pelo controle geral. 1.1.1 HISTÓRIA DO BANCO DE DADOS Furtado (2013) afirma que antigamente as empresas armazenavam dados em fichas de papel que eram organizadas em arquivos físicos por meio de pastas. Extrair informações e manter esses arquivos organizados era uma tarefa muito custosa. Além disso, o acesso à informação dependia da localização geográfica dos arquivos. Enfim esses arquivos físicos evoluíram para arquivos digitais. No início, cada entidade (clientes, funcionários, produtos, etc.) era um arquivo de dados que eram acompanhados de um “software simples” para manipular os dados do arquivo, esses softwares permitiam realizar operações de cadastro, alteração, exclusão e consulta nos arquivos digitais. Segundo Furtado(2013), de fato melhorou bastante, principalmente a tarefa de consulta de informações, porém os arquivos digitais eram ainda uma versão melhorada dos arquivos físicos. Mas as entidades precisavam relacionar-se, por exemplo, um produto é fornecido por um fornecedor, e com os arquivos digitais relacioná-las não era uma tarefa muito trivial, os “softwares simples” para manipular os arquivos digitais começaram a ficar “complexos” para permitir os relacionamentos entre entidades. Então, na década de 60 a empresa IBM investiu fortemente em pesquisas para solucionar estes problemas dos bancos de dados digitais primitivos. Vários modelos de bancos de dados surgiram nesta época, dentre eles os modelos hierárquicos e rede. Em junho de 1970, o pesquisador Edgar Frank “Ted” Codd da IBM, mudou a história dos bancos de dados apresentando o modelo relacional no artigo intitulado “A Relational Model of Data for Large Shared Data Banks”, onde o 20 autor apresentou uma forma de usuários sem conhecimento técnico armazenarem e extraírem grandes quantidades de informações de um banco de dados. Esse artigo foi o grande impulso para a evolução dos bancos de dados, a partir do artigo de “Ted” Codd que os cientistas aprofundaram a ideia de criar o modelo de banco de dados relacional. 1.1.2 POR QUE USAR BANCO DE DADOS? Date (2008) afirma que em suma, um BD tem várias vantagens em relação aos métodos tradicionais, baseados em papel. São citadas algumas vantagens logo abaixo: densidade: Não há necessidade de arquivos de papel, possivelmente volumosos; velocidade: A máquina pode obter e atualizar dados com rapidez. Em particular, consultas podem ser respondidas com mais rapidez sem qualquer necessidade de pesquisas manuais ou visuais demoradas; menos trabalho monótono: Grande parte do tédio de manter arquivos à mão é eliminada. As tarefas mecânicas são sempre feitas com melhor qualidade por máquinas; atualidade: Informações precisas e atualizadas estão disponíveis a qualquer momento; proteção: Os dados podem ser mais bem protegidos contra perda não intencional e acesso ilegal; As vantagens anteriores se aplicam com intensidade ainda maior a um ambiente multiusuário, no qual o banco de dados provavelmente será muito maior e mais complexo. 1.1.3 MODELOS DE BANCOS DE DADOS Segundo Ramakrishnan e Gehrke (2008) o Modelo de banco de dados é uma descrição dos tipos que estão armazenados em um banco de dados. Por exemplo, pode informar que o banco armazena informações sobre produtos e que, para cada produto, são armazenados seu código, preço e descrição. O modelo não informa quais 21 produtos estão armazenados, apenas que tipo de informações contém. Existem quatro tipos estruturais de SGBDs: hierárquico, redes, relacional e orientado a objeto, neste trabalho são utilizadas como referência os dois modelos que estão sendo utilizados que são o modelo relacional e o modelo orientado a objeto. 1.2 MODELO RELACIONAL Ramakrishnan e Gehrke (2008) afirma que o modelo relacional é um modelo de dados, adequado a ser o modelo subjacente de um Sistema Gerenciador de Banco de Dados (SGBD), que se baseia no princípio em que todos os dados estão guardados em tabelas (relações). Toda sua definição é teórica e baseada na lógica de predicados e na teoria dos conjuntos. O conceito foi criado por Edgar Frank Codd em 1970, sendo descrito no artigo "Relational Model of Data for Large Shared Data Banks". O modelo relacional foi o primeiro modelo de dados descrito teoricamente, os bancos de dados já existentes passaram a ser conhecidos como (modelo hierárquico, modelo em rede e modelo de listas invertidas). Modelo relacional para gerência de bases de dados é um modelo de dados baseado em lógica e na teoria de conjuntos. Em definição simplificada, o modelo baseia-se em dois conceitos: conceito de entidade e relação - Uma entidade é um elemento caracterizado pelos dados que são recolhidos na sua identificação vulgarmente designado por tabela. Na construção da tabela identificam-se os dados da entidade. A atribuição de valores a uma entidade constrói um registro da tabela. A relação determina o modo como cada registro de cada tabela se associa a registros de outras tabelas. Historicamente ele é o sucessor do modelo hierárquico e do modelo em rede. Estas arquiteturas antigas são até hoje utilizadas em alguns data centers com alto volume de dados, onde a migração é inviabilizada pelo custo que ela demandaria; existem ainda os novos modelos baseados em orientação ao objeto, que na maior parte das vezes são encontrados como kits em linguagem formal. Hoje em dia, os novos sistemas de base de dados são quase exclusivamente do tipo relacional. Provavelmente o mais importante é poder mudar a estrutura de dados sem alterações nas aplicações. Modelos relacionais oferecem flexibilidade estrutural, as aplicações escritas para esse modelo são mais fáceis. Essa mesma flexibilidade 22 estrutural permite-lhe recuperar conjuntos de dados que você não tinha previsto precisar. Agora uma breve descrição dos objetos que compõem um banco de dados do tipo relacional, segundo Ramakrishnan e Gehrke (2008) : tabelas: São os objetos que contém os tipos de dados e os dados reais; Colunas ou Campos: Partes das tabelas que armazenam os dados devem receber um tipo de dados e ter um nome único; tipos de dados: Há vários tipos de dados para serem utilizados como: caractere, número, data. Um único tipo de dados é atribuído a uma coluna ou dentro de uma tabela; procedimentos armazenados (storeds procedures): São macros em que o código Transavt-Sql pode ser escrito e armazenado sob um nome; gatilhos (triggers): Asseguram que regras de negócio e de integridade sejam impostas ao banco de dados; regras (rules): Atribuídas a colunas de modo que os dados que estão sendo inseridos devem se adaptar aos padrões definidos; chaves primárias ou Primary Key (PK): Embora não sejam objetos em si, as chaves são essenciais para os bancos de dados relacionais. Promove as características de unicidade das linhas, proporcionando uma maneira de identificar de forma única cada item que você queira armazenar; chaves estrangeiras ou Foreign Key (FK): São colunas que fazem referências as chaves primárias de outras tabelas; índices: Podem ajudar os dados de modo que as consultas executem mais rápido. 1.2.1 BANCOS DE DADOS ORIENTADOS A OBJETOS (BDOO) Segundo Nassu e Setzer (1999) um Banco de Dados Orientado a Objeto é basicamente um sistema em que a unidade de armazenamento é o objeto, utilizando assim, o mesmo conceito das linguagens de programação orientadas a objetos. Ainda segundo o autor a diferença fundamental é a persistência dos objetos, ou seja, os objetos continuam a existir mesmo após o encerramento do programa. 23 De uma forma bem simples pode-se dizer que Banco Orientado a Objetos é nada mais que a junção entre conceitos de OO com conceitos de SGBD, ou seja, ele é todo baseado nos paradigmas da OO unido aos objetivos básicos dos SGBD. Como podemos ver na Erro! Fonte de referência não encontrada. uma estrutura de um banco de dados onde se vê armazenamento e organização dos dados em um computador de modo que possam ser usados eficientemente, facilitando sua buscas e modificação. Figura 1.2 Estrutura de um banco de dados Fonte: Machado, 2010 Para Ramakrishnan e Gehrke (1999) os sistemas de banco de dados orientados a objetos foram propostos como uma alternativa aos sistemas relacionais e se destinam aos domínios de aplicação onde os objetos complexos desempenham um papel fundamental. A estratégia é fortemente influenciada pelas linguagens de programação orientadas a objetos e pode ser entendida como uma tentativa de acrescentar 24 funcionalidade de SGBD em um ambiente de linguagem de programação. O Object Database Management Group (ODMG) desenvolveu um modelo e uma linguagem padrão, Object Data Model (ODM) e Object Query Language (OQL) respectivamente, que são os equivalentes do padrão SQL para sistemas de banco de dados relacionais. 1.3 SISTEMA DE GERENCIAMENTO DE BANCO DE DAD OS (SGDB) Ramakrishnan e Gehrke (2008), afirmam que a quantidade de informações que estão disponíveis está literalmente explodindo, e o valor dos dados como um ativo organizacional é amplamente reconhecido. Para obter a maior parte de seus grandes e complexos conjuntos de dados, os usuários necessitam de ferramentas que simplifiquem as tarefas de gerenciamento dos dados e a extração de informações úteis de forma oportuna. Caso contrário, os dados podem se tornar um passivo, cujo custo de aquisição e gerenciamento excede em muito o valor por ele produzido. Um SGDB é um software projetado para auxiliar a manutenção e utilização de vastos conjuntos de dados. A necessidade de tais sistemas, assim como seu uso, tem crescido rapidamente, o uso de um SGDB tem diversas vantagens sendo elas: Independência de Dados: Os programas aplicativos não devem, idealmente, ser expostos aos detalhes de representação e armazenamento de dados. O SGDB provê uma visão abstrata dos dados que oculta tais detalhes. Acesso Eficiente aos Dados: Um SGDB utiliza uma variedade de técnicas sofisticadas para armazenar e recuperar dados eficientemente. Este recurso é especialmente importante se os dados são armazenados em dispositivos de armazenamento externo. Integridade e Segurança dos Dados: Se os dados são sempre acessados por meio do SGDB, ele pode forçar restrições de integridade. Por exemplo, antes de inserir informações sobre o salário de um funcionário, o SGDB pode verificar se o orçamento do departamento não está se excedendo. Além disso, ele pode forçar controles de acesso que governam quais dados estão visíveis a diferentes classes de usuários. Administração de Dados: Quando diversos usuários compartilham dados, centralizar a administração dos dados pode oferecer melhorias significativas. Profissionais experientes que compreendem a natureza dos dados sendo gerenciados, e como os diferentes grupos de usuários utilizam, podem ser 25 responsáveis por organizar a representação dos dados para minimizar a redundância e para realizar as sintonizações finas do armazenamento dos dados para garantir uma eficiente recuperação. Acesso Concorrente e Recuperação de Falha: Um SGDB planeja o acesso concorrente aos dados de maneira tal que os usuários podem achar que os dados estão sendo acessados por apenas um único usuário de cada vez. Além disso, o SGDB protege os usuários dos efeitos e falhas do sistema. Tempo Reduzido de Desenvolvimento de Aplicativo: Obviamente, o SGDB suporta funções importantes que são comuns a vários aplicativos que acessam os dados no SGDB. Isso em conjunto com uma interface de alto nível aos dados facilita o desenvolvimento rápido de aplicativos. Os aplicativos de SGDB tendem a ser mais robustos do que os aplicativos similares independentes porque muitas tarefas importantes são tratadas pelo SGDB (e não precisam ser depuradas e testadas no aplicativo.). 1.3.1 SGBDs MAIS UTILIZADOS São vários os tipos de SGBDs disponíveis no mercado, sendo eles pagos ou gratuitos. Ramakrisshnan e Gehrke (2008) relatam que os SGBDs usam uma linguagem para criar a base de dados, sendo que a mais utilizada é a SQL. Em uma breve pesquisa realizada na internet podemos encontrar alguns dos SGBDs mais utilizados: SQLServer: Um dos maiores do mundo, sob licença da Microsoft; FirebirdSQL: Possui código fonte aberto e roda na maioria dos sistemas Unix; Microsoft Access: É um Sistema Gerenciador de Banco de Dados que acompanha o pacote Office da Microsoft. Este SGBD tem poucas atribuições profissionais, sendo mais usado para aprendizagem, devido à sua interface amigável; mSQL: Sistema pequeno e que trabalha mais com o uso eficiente da memória. Foi criado pela Hughes Technologies Pty Ltd. MySQL: Trata-se de um software livre, com código fonte aberto; 26 PostgreSQL: Desenvolvido como projeto de código aberto. Oracle: O Oracle é o principal banco de dados atualmente, sendo responsável pelo armazenamento de boa parte das informações das principais organizações ao redor do mundo. Oracle é um sistema de banco de dados proprietário e, portanto, tem que ser adquirido com uma licença comercial antes que possa ser usado. 1.4 CONSULTAS As consultas são utilizadas para ver, alterar e analisar dados de diferentes maneiras. Segundo Nassu e Setzer (1999), o acesso a dados armazenados é feito basicamente de duas formas. Uma é pela linguagem de programação, da qual utiliza os OID dos objetos e a outra é por linguagem de consulta, em geral derivadas do SQL. Ainda segundo Ramakrishnan e Gehrke (2003), toda consulta deve ter uma cláusula SELECT, que especifica as colunas a serem mantidas no resultado, e uma cláusula FROM, que especifica um produto cartesiano de tabelas. A cláusula opcional WHERE especifica as condições de seleção nas tabelas mencionadas na cláusula FROM. Formato básico de uma consulta SQL: SELECT lista-seleção FROM lista-from WHERE qualificação Para Nassu e Setzer (1999) o acesso aos dados por meio de linguagem de programação vem tentar resolver uma das principais críticas que os SGBD relacionais sofrem que é o chamado “não casamento de impedâncias”. Ainda segundo o autor, quando se utiliza uma linguagem de programação qualquer para o desenvolvimento de uma aplicação, é necessário reestruturá-la para que se possa interagir com as linguagens de consulta de banco de dados relacionais, já que a única estrutura do modelo relacional é a relação. Isto também é valido para o contrário, ou seja, assim que se obtém o resultado de uma consulta por meio da 27 linguagem de consulta, é necessária uma adaptação dos dados para a estrutura da linguagem de programação. Quando se usa uma linguagem e um banco de dados de uma única estrutura, este trabalho é poupado, implicando em diminuição de código e de tempo de execução, além de possibilitar o compartilhamento de estruturas entre aplicações. 28 2 ANÁLISE DOS BANCOS DE DADOS Neste capitulo serão apresentados os dois bancos de dados utilizados, relatando sobre suas plataformas, versões e como foram criados. 2.1 BANCO DE DADOS MYSQL Segundo o site infoescola, o MySQL surgiu a partir da necessidade da equipe dos desenvolvedores David Axmark e Allan Larsson que criou o SGBD, de utilizar algum mecanismo que permitisse a conexão de tabelas criadas na linguagem SQL para um determinado fim. A princípio, o grupo utilizou o mSQL, mas logo se notou que esta ferramenta não era rápida o suficiente para atender às necessidades do projeto. O jeito foi criar uma solução própria. Por volta de 1979 na companhia suíça TcX, nascia o MySQL criado por Michael Widenius. Michael desenvolveu um banco de dados chamado UNIREG, sendo rescrito em várias linguagens desde então. Em 1994, a empresa TcX começou o desenvolvimento de aplicações baseadas na Web, tendo como base o banco UNIREG, porém esse banco possuía muito "overhead" para obter sucesso em uma aplicação para geração de páginas dinâmicas na Web. Então a empresa TcX começou a procurar por outro banco o mSQL, uma ferramenta baseada em SQL, mas com características pobres, não possuindo por exemplo suporte a índices, e com desempenho inferior ao UNIREG. Foi então que o desenvolvedor do banco UNIREG contatou David Hughes criador do mSQL (para saber do interesse dele em unir os dois bancos). Sendo positivo o interesse de David, a empresa TcX resolveu desenvolver um novo banco, mas mantendo ao máximo a compatibilidade com mSQL. Os desenvolvedores da empresa TcX foram espertos o suficiente para não reinventar o que já estava bem feito, eles construíram um servidor baseado na estrutura que já estava montada do UNIREG e utilizaram um grande número de utilitários escritos para mSQL e fizeram API's para o novo servidor praticamente iguais ao mSQL. Como resultado usuários do mSQL que decidissem mudar para o novo servidor da TcX, teriam apenas que fazer pequenas e simples mudanças nos códigos existentes. 29 O site infoescola relata que em maio de 1995, definitivamente, a primeira versão do MySQL foi lançada. Um dos parceiros da TcX sugeriu a distribuição do servidor na Internet, o objetivo disso era a utilização de um modelo pioneiro desenvolvido por Aladdin Peter Deutsche. O resultado foi uma maior flexibilidade em sem "copyright", que fez do MySQL mais difundido gratuitamente do que mSQL. O MySql está em constante desenvolvimento. Embora seja um dos bancos de dados mais utilizados no mundo, ainda se encontram alguns bugs, que são resolvidos com atualizações frequentes. O MySQL é protegido por uma licença de software livre. Este banco de dados é muito utilizado para sites e programas de cadastro de lojas. Algumas das vantagens do Mysql em relação a outros bancos de dados do mesmo porte: ele tem uma maior facilidade para programação, tem funções mais simples, pode ser totalmente modificado, entre outras. Alguns competidores do MySQL são: Oracle, PostgreSQL, SQLServer e Firebird. Entre estes, o único banco de dados de grande porte totalmente free e com código fonte aberto é o MySQL. Por ter código aberto, facilita sua edição para as necessidades do usuário. 2.1.1 VERSÃO UTILIZADA NO PROJETO Para a realização do trabalho foi utilizado o MySQL Workbench 6.3, lançado em (2016-06-13). Em relação ás versões anteriores estão nova versão tem como aprimoramento a migração de dados rápida. Esta é outra maneira de transferir dados de um servidor MySQL para outro durante a execução de uma migração, e complementa as soluções existentes. A premissa é usar um script gerado no servidor de origem para criar um despejo que você passa para o computador de destino para executar a importação. Isso evita a necessidade de tráfego de todos os dados no MySQL Workbench, ou ter uma conexão de rede permanente entre os servidores. Em vez disso, o despejo e restauração é executada à velocidade máxima usando a chamada de dados de carga para a importação MySQL. O assistente de migração cria automaticamente todos os scripts necessários para todas as plataformas e servidores suportados. O script 30 gerado cria um arquivo Zip autossuficiente que devem ser copiados para o servidor de destino. Você descompactá-lo e executar o script fornecido para executar a importação de dados. A Erro! Fonte de referência não encontrada..1 mostra a interface do usuário quando ele abre o MySQL, é nesta área que o usuário irá construir suas tabelas e popular seu BD Figura 2.1 Tabela do usuário no MySQL Fonte: Elaborado pelos autores, 2016 2.2 BANCO DE DADOS POSTGRESQL Schnaitter e Gavin (2012), afirmam que o PostegreSQL é um SGDB objetorelacional de código fonte aberto, descendente do sistema Postgres desenvolvido pelo professor Michael Stonebraker. Seu nome “Postegres” é derivado do bancos de dados relacional pioneiro em estudos também desenvolvido por Stonebraker na universidade de Califórnia. O PostegreSQL é compatível com diversos aspectos do SQL:2003 e oferece recursos como: Consultas complexas; Chaves estrangeiras; Triggers (Códigos de SQL armazenados dentro do BD); Views; 31 Integridade transacional; Pesquisa de texto; Replicação de dados limitada. Outro aspecto notável do PostgreSQL é que, semelhante com o MySQL, é um dos dois sistemas mais utilizados de BD relacional de código fonte aberto, a licença desse BD é a licença Berkeley Software Distribution (BSD) que dá permissão a qualquer um para usar, modificar de distribuir o código e a documentação para qualquer finalidade gratuitamente. Segundo Schnaiter e Gavin (2012), o PostgreSQL pode ser executado praticamente em todas as plataformas operacionais do tipo Unix, Linus e Apple Macintosh OSX, as versões anteriores desse BD podem ser executadas no Microsoft Windows, no ambiente Cygwin que oferece uma emulação para Linux no Windows. Atualmente o PostgreSQL é usado para desenvolver várias aplicações de pesquisas e produção, dentre elas estão o sistema PostGIS para informações geográficas e também é considerado uma ferramenta educacional em várias universidades, um sistema que evolui por meio de contribuições de uma comunidade com 1.000 desenvolvedores. 2.2.1 INTERFACES COM O USUÁRIO A distribuição padrão vem com ferramentas da linha de comandos para administrar o BD, porém existe grande quantidade de ferramentas comercias e gráficas de administração e projeto de código fonte aberto, os desenvolvedores de software também podem acessar o PostgreSQL por meio de um conjunto abrangente de interfaces de programação. A figura 2.2 abaixo mostra a interface do pgAdmin4, ferramenta utilizada para a administração do PostgreSQL, pois ela permite fazer todas as tarefas necessárias de administração do banco de dados. 32 Figura 2.2 Interface do pgAdmin4 Fonte: Elaborado pelos autores, 2016. 2.2.2 INTERFACES DE TERMINAL INTERATIVO O principal cliente de terminal interativo é a psql, nomeado em função da Shell Unix e que permite a execução de comandos SQL no servidor, além de várias outras operações. Alguns de seus recursos mais utilizados são: Variáveis: A psql oferece recursos de substituição de variáveis; Interpolação de SQL: O usuário pode substituir variáveis psql em instruções SQL normais, colocando um caractere de dois pontos na frente do nome da variável; Edição da linha de comando: A psql usa a biblioteca para realizar a edição de linha de forma conveniente, com suporte para conclusão. 2.2.3 INTERFACES DE LINGUAGEM DE PROGRAMAÇÃO Oferecendo interfaces nativas para ODBC e JDBC para a maioria das linguagens de programação incluindo C, C++, PHP, Perl, Tcl/Tk. ECPG, Python e Ruby. Sua biblioteca admite execução síncrona e assíncrona de comandos SQL e instruções preparadas com interface reentrante e seguras para thread, os parâmetros 33 de conexão da biblioteca podem ser configurados de várias maneiras flexíveis, como definir variáveis de ambientes, inserir configurações em um arquivo local e criar entradas de um servidor. 2.2.4 TIPOS NO POSTGRESQL Abraham Silberschats relata que o PostgreSQL possui suporte para vários tipos fora do padrão, úteis somente para domínios de aplicação específicos. Os usuários podem definir novos tipos com o comando create type, isso inclui novos tipos básicos de baixo nível. Os tipos de PostgreSQL podem ser das seguintes categorias: Tipos básicos: são conhecidos como tipos de dados abstratos, são os módulos que encapsulam estado e um conjunto de operações, eles são implementados abaixo do nível SQL, normalmente em uma linguagem como C; Tipos compostos: correspondem a linhas de tabela, eles são uma lista de nomes de campo e seus respectivos tipos básicos, esse tipo é criado implicitamente sempre que uma tabela é criada; Domínios: é definido ao associar um tipo básico com uma restrição a qual os valores do tipo devem atender. Um domínio também pode ter um valor padrão opcional cujo significado é semelhante ao valor padrão de uma coluna de uma tabela comum; Tipos enumerados: um tipo enumerado é basicamente uma lista fixa de valores nomeados, no PostgreSQL é possível converter os tipos enumerados para a representação textual de seus nomes; 34 3 DESENVOLVIMENTO DO TRABALHO Neste capitulo será apresentado o desenvolvimento do projeto com a metodologia utilizada, a ferramenta de avaliação de desempenho utilizada nos dois bancos de dados e sua instalação, o hardware da máquina utilizada e a instalação dos bancos. 3.1 METODOLOGIA Para a realização desta pesquisa, elaborou-se um banco de dados que simula de maneira simplificada um sistema de vendas. A Figura 3.1 exibe este modelo, mostrando como as tabelas se relacionam bem como as respectivas colunas e, consequentemente, os tipos delas. Assim, pode-se verificar como o banco de dados utilizado neste projeto foi elaborado fisicamente. Figura 3.1 Modelo de dados Relacional Fonte: Elaborado pelos autores, 2016. 35 O modelo de dados representado na Figura 3.1, representa um sistema de vendas de uma maneira simplificada. Neste modelo, clientes e produtos (com suas respectivas marcas) podem ser cadastrados, ambos se relacionando na tabela de vendas que armazena quem comprou o que, quando e em qual quantidade. Além disso, a tabela relatório, que não se relaciona com nenhuma outra, existe apenas para receber os dados gerados dos inserts com join. 3.2 Geração de dados Para popular as tabelas de cliente, produto e marcas, foram inseridas manualmente 20 registros em cada uma das tabelas. As figuras abaixo representam esses registros: Figure 3.2 -TABELA DE CLIENTES. FONTE: Elaborado pelos autores, 2016. 36 Figure 3.3 -TABELA DE MARCAS. FONTE: Elaborado pelos autores, 2016. Figure 3.4 -TABELA DE PRODUTOS. FONTE: Elaborado pelos autores, 2016. Para popular a tabela de vendas foi utilizado um algoritmo implementado em linguagem Java que gera automaticamente um milhão de registros com dados aleatórios: um cliente aleatório comprando um produto aleatório em uma quantidade 37 aleatória em uma data aleatória. A chave primária dessas vendas é o único dado não gerado aleatoriamente pois é próprio SGBD que define automaticamente seu valor. Esse algoritmo foi executado uma única vez e os dados gerados foram inseridos em uma tabela chamada "vendas_orig". Essa tabela tem exatamente a mesma estrutura da tabela "vendas" e foi usada com o propósito de armazenar os dados primeiramente gerados pelo algoritmo em Java para eventuais recuperações de dados que precisaram ser feitos durante as avaliações de desempenho. Na implementação do algoritmo, foi gerado uma ferramenta de teste que, depois que qualquer execução que altere os registros da tabela de vendas (um comando Update ou Delete, por exemplo), essa tabela é atualizada com os valores iniciais recebendo uma cópia de todos os registros da tabela "vendas_orig". Figure 3.5 -TABELA DE VENDAS ORIG. FONTE: Elaborado pelos autores, 2016. A tabela "vendas_orig" garante a integridade dos dados, mantendo-os exatamente como foram gerados pelo algoritmo. Nenhuma requisição SQL realizadas neste trabalho foi executada na tabela "vendas_orig", e sim, na tabela "vendas", que possui sempre uma cópia exata dos registros da tabela "vendas_orig" antes de qualquer nova execução. 38 Figure 3.6 -TABELA DE VENDAS. FONTE: Elaborado pelos autores, 2016. 3.3 Hardware utilizado O hardware utilizado tanto como servidor do banco de dados, quanto o cliente que faz as requisições de avaliação, foi um computador com as seguintes características: • microcomputador Portátil da marca Dell, modelo inspiron 5000; • sistema operacional Windows 10 64 bits; • memória RAM de 4GB DDR3 1600; • processador intel ® core ™ i5-4210U @ 1.70GHz 2.40GHZ; • disco rígido de 1TB 5400 RPM. 3.4 Ferramenta Apache JMeter Para realizar as Avaliação de Desempenho de tempo de resposta, utilizou-se a ferramenta Apache JMeter 3.0. 39 A ferramenta JMeter desktop foi desenvolvida para a realização de testes de desempenho e estresse em aplicações cliente/servidor, tais como aplicações Web (Apache JMeter, 2013). O JMeter foi desenvolvido utilizando a linguagem Java e licenciada sob os termos da “Apache License, Version 2.0”. Esta ferramenta foi primeiramente utilizada para realizar testes em aplicações web, mas tem expandido suas funcionalidades, podendo realizar Avaliações em Bancos de Dados via JDBC, LDAP, JMS e E-mail – POP3 e IMAP (Apache JMeter, 2013). Como o JMeter é desenvolvido 100% em Java, é possível rodá-lo em qualquer sistema operacional que tenha uma implementação Java compatível (FAPEG, 2013). 3.4.1 Instalação do Apache JMeter Um pré-requisito para a instalação da ferramenta JMeter é a instalação da JVM 1.6 ou versão mais nova. Para instalar o JMeter o Java deve estar instalado. Caso não esteja, é necessário realizar o download do JDK no site da Oracle e fazer a sua instalação. Além disso é necessário mapiar o JAVA_HOME. A versão mais recente da ferramenta JMeter pode ser encontrada no site (http://jmeter.apache.org/). Para a sua utilização, é necessário descompactar o arquivo no diretório em que será instalado (FAPEG, 2013). A Figura 3.7 apresenta a interface do JMeter. 40 Figura 3.7 Interface JMeter. Fonte: Elaborados pelos autores, 2016. Para a realização deste trabalho, o JMeter foi instalado com as configurações padrões. 3.5 INSTALAÇÃO E CONFIGURAÇÃO DOS BANCOS Para a realização deste trabalho de Avaliação de desempenho, os bancos de dados MySQL e PostgreSQL, foram instalados com suas configurações padrões, sem nenhuma alteração. 41 4 AVALIAÇÃO DE DESEMPENHO E RESULTADOS Neste capitulo serão apresentados os resultados das avalições de desempenho realizadas em ambos SGBD’s. Para garantir a isonomia das avaliações de desempenho, a mesma quantidade e conteúdo de registros foram inseridos antes que qualquer avaliação. Esses registros são: 20 marcas; 20 produtos, cada um associado à uma marca diferente; 20 clientes; 1.000.000 de vendas aleatórias (um cliente aleatório comprando um produto aleatório numa quantidade aleatória numa data aleatória), geradas automaticamente por um algoritmo de inserção de dados feito em Java; A tabela “relatorio” não contém registros. Para esse conjunto de dados inseridos previamente nos bancos, dá-se o nome de “estado original do banco de dados”. Todos os testes foram executados nos bancos em seus estados originais, ou seja, toda vez que algum comando SQL modifica algum dado do banco, voltava-se o banco de dados para seu estado original antes da execução da próxima avaliação de desempenho. 4.1 AVALIAÇÃO DE DESEMPENHO COM SELECT Esta avaliação de desempenho faz um select na tabela de vendas retornando um milhão de registros. Para fazer esta requisição, tanto para o SGBD MySQL quanto para o PostgreSQL, foi usado o seguinte comando SQL no jMeter: SELECT * FROM vendas; Na Figura 4.1 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 42 4000 Tempo Médio de Resposta (milissegundos) 3500 3346 3326 3000 2500 MySQL 2000 PostgreSQL 1500 1000 500 0 SGBDs Figura 4. 1 Avaliação de Desempenho com Select Fonte: Elaborado pelos autores, 2016. 4.2 AVALIAÇÃO DE DESEMPENHO COM SELECT JOIN Para realizar esta avaliação de desempenho foi executado um Select que faz a junção da tabela vendas com a tabela de clientes, produtos e marcas. O resultado deste comando exibe, respectivamente, o id da venda, o nome do cliente, o nome do produto, o nome da marca, a quantidade vendida e a data da venda, retornando também um milhão de registros. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: SELECT vendas.id, cliente.nome, produto.nome, marca.nome, vendas.quantidade, vendas.datavenda FROM vendas JOIN cliente ON cliente.id = vendas.idcli JOIN produto ON produto.id = vendas.idprod JOIN marca ON marca.id = produto.idmarca ORDER BY vendas.id; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: SELECT vendas."ID", cliente."NOME", produto."NOME", marca."NOME", vendas."QUANTIDADE", vendas."DATAVENDA" FROM vendas 43 JOIN cliente ON (cliente."ID" = vendas."IDCLI") JOIN produto ON (produto."ID" = vendas."IDPRODUTO") JOIN marca ON (marca."ID" = produto."IDMARCA") ORDER BY vendas."ID"; Na Figura 4.2 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 16000 Tempo Médio de Resposta (milissegundos) 14000 13842 12000 10000 MySQL 8000 5407 6000 PostgreSQL 4000 2000 0 SGBDs Figura 4.2 Avaliação de Desempenho com Select Join. Fonte: Elaborado pelos autores, 2016. 4.3 AVALIAÇÃO DE DESEMPENHO COM SELECT, JOIN E WHERE Esta Avaliação de Desempenho foi realizada com um comando que exibe os mesmos campos citados na Avaliação de Desempenho anterior, porém retorna apenas os resultados cujo o id do produto é igual a 10. Neste caso, a requisição retorna 50442 registros. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: SELECT vendas.id, cliente.nome, produto.nome, marca.nome, vendas.quantidade, vendas.datavenda FROM vendas JOIN cliente ON cliente.id = vendas.idcli JOIN produto ON produto.id = vendas.idprod JOIN marca ON marca.id = produto.idmarca WHERE vendas.idprod = 10 ORDER BY vendas.id; 44 Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: SELECT vendas."ID", cliente."NOME", produto."NOME", marca."NOME", vendas."QUANTIDADE", vendas."DATAVENDA" FROM vendas JOIN cliente ON (cliente."ID" = vendas."IDCLI") JOIN produto ON (produto."ID" = vendas."IDPRODUTO") JOIN marca ON (marca."ID" = produto."IDMARCA") WHERE vendas."IDPRODUTO" = 10 ORDER BY vendas."ID"; Na Figura 4.3 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 7000 6172 Tempo Médio de Resposta (milissegundos) 6000 5000 4000 MySQL 3000 PostgreSQL 2000 1000 510 0 SGBDs Figura 4. 3 Avaliação de Desempenho com Select, Join e Where Fonte: Elaborado pelos autores, 2016. 4.4 AVALIAÇÃO DE DESEMPENHO COM SELECT, JOIN, WHERE, SUM Nesta Avaliação de Desempenho foi executado um comando Select que exibe o nome do produto junto com sua respectiva marca e a soma de todas as vendas efetuadas de cada produto no ano de 2016. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: 45 SELECT produto.nome, marca.nome, SUM(vendas.quantidade) FROM vendas JOIN produto ON produto.id = vendas.idprod JOIN marca ON marca.id = produto.idmarca WHERE vendas.datavenda BETWEEN '2016-01-01' AND '2016-12-31' GROUP BY vendas.idprod ORDER BY produto.nome; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: SELECT produto."NOME", marca."NOME", SUM(vendas."QUANTIDADE") FROM vendas JOIN produto ON (produto."ID" = vendas."IDPRODUTO") JOIN marca ON (marca."ID" = produto."IDMARCA") WHERE vendas."DATAVENDA" BETWEEN '2016-01-01' AND '2016-12-31' GROUP BY produto."NOME", marca."NOME" ORDER BY produto."NOME"; Na Figura 4.4 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. Tempo Médio de Resposta (milissegundos) 3000 2500 2440 2000 1407 1500 MySQL PostgreSQL 1000 500 0 SGBDs Figura 4. 4 Avaliação de Desempenho Select Com Join, Where e Sum. Fonte: Eladorado pelos autores, 2016. 4.5 AVALIAÇÃO DE DESEMPENHO COM INSERT Nesta Avaliação de Desempenho foi executado um comando insert que insere um registro na tabela vendas. 46 Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO VENDAS (IDPROD, IDCLI, QUANTIDADE, DATAVENDA)VALUES (19, 6, 8, '2016-06-12'); Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO VENDAS ("IDPRODUTO", "IDCLI", "QUANTIDADE", "DATAVENDA") VALUES (19, 6, 8, '2016-06-12'); Na Figura 4.5 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. Tempo Médio de Resposta (milissegundos) 1200 974 1000 800 MySQL 600 PostgreSQL 400 200 49 0 SGBDs Figura 4. 5 Avaliação de Desempenho com Insert Fonte: Elaborado pelos autores, 2016. 4.6 AVALIAÇÃO DE DESEMPENHO DE INSERT COM JOIN Para a realização desta Avaliação de Desempenho foi executado um Insert que pega o resultado do Select executado na Avaliação de Desempenho 4.2 e insere os um milhão de registros retornados na tabela “relatorio”. 47 Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO relatorio SELECT vendas.id, cliente.nome, produto.nome, marca.nome, vendas.quantidade, vendas.datavenda FROM vendas JOIN cliente ON cliente.id = vendas.idcli JOIN produto ON produto.id = vendas.idprod JOIN marca ON marca.id = produto.idmarca ORDER BY vendas.id; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO relatorio SELECT vendas."ID", cliente."NOME", produto."NOME", marca."NOME", vendas."QUANTIDADE", vendas."DATAVENDA" FROM vendas JOIN cliente ON (cliente."ID" = vendas."IDCLI") JOIN produto ON (produto."ID" = vendas."IDPRODUTO") JOIN marca ON (marca."ID" = produto."IDMARCA") ORDER BY vendas."ID"; Na Figura 4.6 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. Tempo Médio de Resposta (milissegundos) 18000 16535 16000 14000 12685 12000 10000 MySQL 8000 PostgreSQL 6000 4000 2000 0 SGBDs Figura 4. 6 Avaliação de Desempenho de Insert com Join. Fonte: Elaborado pelos autores, 2016. 48 4.7 AVALIAÇÃO DE DESEMPENHO INSERT COM JOIN e WHERE Nesta Avaliação de Desempenho o comando executado faz a mesma requisição da Avaliação de Desempenho anterior, com a diferença da cláusula where que limita os resultados apenas às vendas feitas pelo cliente chamado Guilherme Andrade. O resultado dessa requisição é a inserção de 49.915 registros na tabela “relatório”. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO relatorio SELECT vendas.id, cliente.nome, produto.nome, marca.nome, vendas.quantidade, vendas.datavenda FROM vendas JOIN cliente ON cliente.id = vendas.idcli JOIN produto ON produto.id = vendas.idprod JOIN marca ON marca.id = produto.idmarca WHERE cliente.nome = 'Guilherme Andrade' ORDER BY vendas.datavenda; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: INSERT INTO relatorio SELECT vendas."ID", cliente."NOME", produto."NOME", marca."NOME", vendas."QUANTIDADE", vendas."DATAVENDA" FROM vendas JOIN cliente ON (cliente."ID" = vendas."IDCLI") JOIN produto ON (produto."ID" = vendas."IDPRODUTO") JOIN marca ON (marca."ID" = produto."IDMARCA") WHERE cliente."NOME" = 'Guilherme Andrade' ORDER BY vendas."ID"; Na Figura 4.7 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 49 1600 Tempo Médio de Resposta (milissegundos) 1459 1400 1200 1000 774 800 MySQL PostgreSQL 600 400 200 0 SGBDs Figura 4. 7 Avaliação de Desempenho Insert Com Join e Where. Fonte: Elaborado pelos autores, 2016. 4.8 AVALIAÇÃO DE DESEMPENHO DE DELETE Para esta Avaliação de Desempenho foi executado um comando que delete que exclui todos os um milhão de registros da tabela vendas. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: DELETE FROM vendas; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: DELETE FROM VENDAS; Na Figura 4.8 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 50 4000 Tempo Médio de Resposta (milissegundos) 3520 3500 3000 2500 MySQL 2000 PostgreSQL 1500 1000 500 73 0 SGBDs Figura 4. 8 Avaliação de Desempenho de Delete Fonte: Elaborado pelos autores, 2016. 4.9 AVALIAÇÃO DE DESEMPENHO DE DELETE COM WHERE Nesta Avaliação de Desempenho fo executado um comando delete que exclui apenas as vendas de Caixas de Som feitas para o cliente Carlos Oliveira. Esta requisição exclui 2.506 registros da tabela vendas. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: DELETE vendas FROM vendas INNER JOIN cliente ON vendas.idcli = cliente.id INNER JOIN produto ON vendas.idprod = cliente.id WHERE cliente.nome = 'Carlos Oliveira' AND produto.nome = 'Caixas de Som'; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: DELETE FROM vendas USING cliente, produto WHERE vendas."IDCLI" = cliente."ID" AND vendas."IDPRODUTO" = produto."ID" 51 AND cliente."NOME" = 'Carlos Oliveira' AND produto."NOME" = 'Caixas de Som'; Na Figura 4.9 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. Tempo Médio de Resposta (milissegundos) 1400 1294 1200 1000 800 MySQL PostgreSQL 600 400 296 200 0 SGBDs Figura 4. 9 Avaliação de Desempenho de Delete com Where. Fonte: Elaborado pelos autores, 2016. 4. 10 AVALIAÇÃO DE DESEMPENHO UPDATE Para a realização desta Avaliação de Desempenho foi executado um comando update que atualiza todos os um milhão de registros da tabela vendas, alterando todos os campos do registro, exceto a sua chave primária. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: UPDATE vendas SET idproduto = 2, idcli = 12, quantidade = 50, datavenda = '2016-09-07'; Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: UPDATE VENDAS SET "IDPRODUTO"=2, "IDCLI"=12, "QUANTIDADE"=50, "DATAVENDA" = '2016-09-07'; 52 Na Figura 4.10 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 45000 Tempo Médio de Resposta (milissegundos) 40264 40000 35000 30000 25000 MySQL 20000 PostgreSQL 15000 10000 3066 5000 0 SGBDs Figura 4. 10 Avaliação de Desempenho Update Fonte: Elaborado pelos autores, 2016. 4.11 AVALIAÇÃO DE DESEMPENHO UPDATE COM WHERE Nesta Avaliação de Desempenho foi executado um comando update que atualiza todos os um milhão de registros da tabela vendas, alterando todos os campos do registro, exceto a sua chave primária. Para atender às condições da cláusula where, o banco de dados precisa consultar as tabelas de cliente e produto. Para fazer essa requisição no MySQL, o seguinte comando SQL foi executado no jMeter: UPDATE vendas, cliente, produto SET vendas.idcli = cliente.id, vendas.idprod = produto.id, WHERE cliente.nome 'Microondas'; = vendas.datavenda = '2016-07-15' 'Marina Rocha' AND produto.nome = 53 Para fazer esta mesma requisição no PostgreSQL, o seguinte comando SQL foi executado no jMeter: UPDATE vendas SET "IDCLI" = cliente."ID", "IDPRODUTO" = produto."ID", "DATAVENDA" = '2011-03-20'FROM vendas AS v JOIN cliente ON cliente."ID" v."IDPRODUTO" = v."IDCLI" WHERE JOIN produto cliente."NOME" = ON produto."ID" 'Marina Rocha' = AND produto."NOME" = 'Microondas'; Na Figura 4.11 pode-se visualizar a comparação do tempo de resposta de cada SGBD em milissegundos e, também, o seu intervalo de confiança. 2500000 Tempo Médio de Resposta (milissegundos) 2139489 2000000 1500000 MySQL PostgreSQL 1000000 500000 16132 0 SGBDs Figura 4. 11 Avaliação de Desempenho Update Com Join e Where Fonte: Elaborado pelos autores, 2016. 54 CONSIDERAÇÕES FINAIS As avaliações de desempenho realizadas neste trabalho objetivaram analisar o tempo de resposta de cada um dos SGBD’s na realização da mesma tarefa. De todas as avaliações de desempenho realizadas, alguns merecem destaque pela considerável diferença de tempo de resposta entre os SGBDs. O primeiro é o SELECT com JOIN (Figura 4.2) onde o PostgreSQL foi mais eficiente realizando a requisição de Avaliação de Desempenho com 5407 milissegundos a menos do que o MySQL. Já na Avaliação de Desempenho que adiciona uma cláusula WHERE a esse mesmo SELECT com JOIN (Figura 4.3), a situação se inverte. Enquanto que o MySQL realiza a requisição em 510 milissegundos, o PostgreSQL demora 6172 milissegundos para realizar a mesma tarefa. Na Avaliação de Desempenho do INSERT com JOIN (Figura 4.6) o MySQL executou a tarefa 3950 milissegundos mais rápido que o PostgreSQL. No DELETE simples (Figura 4.8), enquanto que o MySQL excluiu todos os um milhão de registros da tabela instantaneamente (73 milissegundos), o PostgreSQL demorou 3520 segundos. Contudo, as maiores diferenças são encontradas nas Avaliação de Desempenho com UPDATE. Na Avaliação de Desempenho de UPDATE simples (Figura 4.10), o PostgreSQL demorou 37198 milissegundos a mais que o MySQL para atualizar os um milhão de registros da tabela vendas. Quando a atualização deste mesmo um milhão de registros precisava consultar as tabelas de produto e cliente para atender a cláusula WHERE, a diferença do tempo de resposta entre os SGBDs foi a mais alta constatada pelas Avaliações de Desempenhos: O MySQL completou a tarefa em 16132 milissegundos enquanto que o PostgreSQL levou 2139489 milissegundos para realizar a requisição. Fazendo-se uma análise dos tempos de resposta separados por DML (Insert, Update, Delete, Select), obtemos estes dados representados na tabela abaixo: Tabela1 - Avaliação de Desempenho com Selects Analise Select simples Select com Join PostgreSQL 3326 ms 5407 ms MySQL 3346 ms 13842 ms 55 Select com join e Where 6172 ms Select com Join, Where e 1407 ms Sum 510 ms 2440 ms Fonte: Elaborado pelos autores, 2016. Tabela 2 - Avaliação de Desempenho com Inserts Analise PostgreSQL Insert simples 974 ms Insert com Join 16535 ms Insert com join e Where 1458 ms MySQL 49 ms 12685 ms 774 ms Fonte: Elaborado pelos autores, 2016. Tabela 3 - Avaliação de Desempenho com Delete Analise PostgreSQL Delete simples 3520 ms Delete com Where 1294 ms MySQL 73 ms 295 ms Fonte: Elaborado pelos autores, 2016. Tabela 4 - Avaliação de Desempenho com Update Analise PostgreSQL Update simples 40264 ms Update com Where 00:16 min MySQL 3066 ms 35:39 min Fonte: Elaborado pelos autores, 2016. Logo, pode-se concluir que o PostgreSQL se sobressaiu em relação ao MySQL nas requisições de Select, porém nas demais avaliações de desempenho (Insert, Delete e Update) o MySQL se mostrou mais eficiente ao executar as tarefas em menos tempo. Vale ressaltar mais uma vez que tal conclusão é válida dentro do contexto apresentado neste trabalho, ou seja, considerando-se as versões dos SGBDs, a ferramenta de Avaliação de Desempenho utilizada, o hardware e o sistema operacional no qual os servidores foram executados durante a realização das avaliações de desempenho e, portanto, podem não representar a realidade de outros cenários. 56 REFERÊNCIAS BIBLIOGRÁFICAS DATE, C.J. Introdução a sistemas de banco de dados. 8. ed. São Paulo: Campus, 2008. RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. São Paulo: McGrawHill, 2008. COUGO, P. Modelagem conceitual e projeto de banco de dados. 3. ed. Rio de Janeiro: Campus, 1997. NASSU, E. A.; SETZER, V.W. Banco de dados orientados a objetos. 12. ed. São Paulo: Edgard Blucher, 1999. SILBERSCHATZ, A. et. al. Sistema de banco de dados. 6. ed. São Paulo: Campus, 2012. FURTADO, G. A História dos bancos de dados. Dicas de Programação, São Paulo, 2013. Disponível em:<http://www.dicasdeprogramacao.com.br/a-historia-dosbancos-de-dados> Acesso em: 27 out. 2016. LUIS blog. Principais tipos de bancos de dados. 2007-2015. Disponível em: < http://www.luis.blog.br> Acesso em: 03 set. 2015. GOMES, E. H. Sistemas Gerenciador de Banco de Dados. Disciplina de Banco de Dados. Cubatão, 2013. Disponível em: <http://ehgomes.com.br/disciplinas/bdd/> Acesso em: 11 mai. 2015. ORACLE. Manual de configuração da versão 6.3. Ano. Disponível em: <http://www.oracle.com/manual> Acesso em: 30 nov. 2015. JMETER. Apache JMeter. Disponível em: <http://jmeter.apache.org/>. Acesso em: 10 set. 2016. TANENBAUM, A. S. Computer Networks. Tradução Vandenberg D. de Souza. 4. ed. Rio de Janeiro: Elsevier, 2003. SILVA, S. R. Oracle Database10g. 1. ed. São Paulo: Érica Ltda, 2013. INFOESCOLA.MYSQL. Ano. 2006 – 2016. Disponível em: <http://www.infoescola.com/informatica/mysql/> Acesso em: 07 dez 2016. 57 ANEXO A – PRINTS DAS TELAS DE AVALIAÇÃO DE DESEMPENHO COM SELECT Neste anexo A, veremos prints das avaliações de desempenho com SELECT realizados. Cada avaliação foi executado 10 vezes, para se obter a média do tempo de resposta, a partir das amostras coletadas. Anexo A. 1 Avaliação de Desempenho Select no MySQL Anexo A. 2 Avaliação de Desempenho Select no PostgreSQL 58 Anexo A. 3 Avaliação de Desempenho Select com Join no MySQL Anexo A. 4 Avaliação de Desempenho Select com Join no PostgreSQL Anexo A. 5 Avaliação de Desempenho Select com Join e Where no MySQL 59 Anexo A. 6 Avaliação de Desempenho Select com Join e Where no PostgreSQL Anexo A. 7 Avaliação de Desempenho Select com Join, Where e Sum no MySQL Anexo A. 8 Avaliação de Desempenho Select com Join, Where e Sum no PostgreSQL 60 ANEXO B – PRINTS DAS TELAS DE AVALIAÇÃO DE DESEMPENHO INSERT Neste anexo B, veremos prints das avaliações de desempenho INSERTT realizados. Cada avaliação foi executada 10 vezes, para se obter a média do tempo de resposta, a partir das amostras coletadas. Anexo B. 1 Avaliação de Desempenho Insertno MySQL Anexo B. 2 Avaliação de Desempenho Insert no PostgreSQL Anexo B. 3 Avaliação de Desempenho Insert Com Join no MySQL 61 Anexo B. 4 Avaliação de Desempenho Insert com Join no PostgreSQL Anexo B. 5 Avaliação de Desempenho Insert com Join e Where no MySQL Anexo B. 6 Avaliação de Desempenho Insert com Join e Where no PostgreSQL 62 ANEXO C – PRINTS DAS TELAS DE AVALIAÇÃO DE DESEMPENHO DELETE Neste anexo C, veremos prints das avaliações de desempenho DELETE realizados. Cada avaliação foi executada 10 vezes, para se obter a média do tempo de resposta, a partir das amostras coletadas. Anexo C. 1 Avaliação de Desempenho com Delete no MySQL Anexo C. 2 Avaliação de Desempenho Delete no PostgreSQL Anexo C. 3 Avaliação de Desempenho Delete com Where no MySQL 63 Anexo C. 4 Avaliação de Desempenho Delete com Where no PostgreSQL 64 ANEXO D – PRINTS DAS TELAS DE AVALIAÇÃO DE DESEMPENHO UPDATE Neste anexo D, veremos prints das avaliações de desempenho UPDATE realizados. Cada avaliação foi executada 10 vezes, para se obter a média do tempo de resposta, a partir das amostras coletadas. Anexo D. 1 Avaliação de Desempenho com Update no MySQL Anexo D. 2 Avaliação de Desempenho com Update no PostgreSQL Anexo D. 3 Avaliação de Desempenho Update com Join e Where no MySQL 65 Anexo D. 4 Avaliação de Desempenho Update com Join e Where no PostgreSQL