Utilização de Banco de Dados NoSql em Ambientes Corporativos Felipe S. Pereira, Hermes P. Borges, Helio Rubens, Sonia A. Santana Unitri – Centro Universitário do Triângulo Avenida Nicomedes Alves dos Santos, 4545 – 38.411-106 – Uberlândia – MG – Brasil {felipesp.ads,sonia.ap.santana}@gmail.com, [email protected], [email protected] Abstract. The relational database has secured its place in recent years and is present in nearly all applications that utilize a structure for data storage. But as the volume of data increases over time, it is necessary to search for new structures for storing information. As the volume of data, scalability, and distributed storage has become the relational model impractical in some situations. In this context, a new data storage paradigm, the NoSQL database. This article discusses the use of NoSQL in enterprise environments as a single structure database within a context. Among the exhibited models, is performed implementing a prototype application using the Cassandra database and discussed its viability. Resumo. O banco de dados relacional tem garantido seu espaço nos últimos anos e está presente em quase todas as aplicações que utilizam uma estrutura para armazenamento de dados. Mas conforme o volume de dados aumenta com o passar do tempo, faz-se necessário a busca de novas estruturas para armazenamento de informações. Assim como o volume de dados, a escalabilidade e o armazenamento distribuído tem tornado o modelo relacional inviável em algumas situações. Neste contexto, surge um novo paradigma de armazenamento de dados, o banco de dados NoSql. Este artigo aborda a utilização de NoSql em ambientes corporativos como única estrutura de banco de dados dentro de um contexto. Dentre os modelos expostos, é realizado a implementação de um protótipo de aplicativo utilizando o banco de dados Cassandra e discutido sua viabilidade. 1. Introdução Sistemas de grande porte necessitam que seus bancos de dados tenham capacidade de fornecer de maneira eficaz acesso a diversos usuários simultaneamente. Neste contexto, milhares de requisições em paralelo são enviadas ao banco de dados solicitando, alterando ou gravando alguma informação. Para suportar tal estrutura é preciso que os servidores de aplicação sejam robustos e com excelente desempenho. Mesmo utilizando vários servidores com altíssimo poder de processamento, em alguns aspectos os Banco de Dados Relacionais (BDR) não têm atendido de modo satisfatório, devido à imensa quantidade de informações geradas. Aplicações que utilizam BDR comumente após grande volume de dados costumam apresentar alguma demora no tempo de resposta às aplicações. O grande volume de informações geradas por usuários conectados por todo o mundo demandou a criação de uma estrutura de banco de dados que fornecesse maior desempenho e escalabilidade para as aplicações. A partir desta necessidade, surgiu o conceito Not Only SQL (NoSql) de banco de dados. O conceito NoSql surgiu em 1998, mas começou a caminhar efetivamente em 2004 com a criação do Banco de Dados (BD) BigTable pela empresa Google. Logo depois as empresas Amazon, em 2007, e Facebook, em 2008, lançaram respectivamente os BDs Dynamo e Cassandra. A partir daí surgiram diversas soluções em BD NoSql, entre elas estão: CouchDB, MongoDB, Neo4J, InfoGrid, HBase e outros [IANNI, 2013]. Este trabalho objetiva analisar a viabilidade da utilização do NoSql em aplicações corporativas. Está estruturado conforme a seguir: A seção 2 apresenta os conceitos e visão geral a respeito dos bancos de dados NoSql e suas características. A seção 3 contextualiza a estrutura de banco de dados utilizada por ambientes corporativos, suas características e conceitos. A seção 4 apresenta as deficiências dos BDRs e as necessidades que motivam a utilização dos BD NoSql. A seção 5 apresenta a implementação de uma aplicação em um ambiente corporativo utilizando um dos bancos de dados NoSql apresentados anteriormente. 2. Conceitos e visão geral de NoSql Os BDs NoSql surgiram para solucionar problemas com aplicações que trabalham de maneira distribuída e com grandes cargas de dados. Não foram criados para eliminar os BDRs, e sim solucionar problemas em contextos que exijam maior necessidade de escalabilidade e disponibilidade de servidores de Bancos de Dados para as aplicações. Em outras palavras, o NoSql é um conceito alternativo ao Modelo Relacional para atender determinados nichos nos quais os BDRs apresentam limitações. Dentre as principais características dos BDs NoSql estão a desnormalização das informações e alto desempenho no armazenamento paralelo de dados em grande escala. Eles apresentam a capacidade de ser escalados horizontalmente, instalando servidores com menor capacidade de processamento um ao lado do outro. E assim conseguem tratar da leitura e escrita de uma enorme quantidade de dados. Segundo Ianni(2013), os BDs NoSql “...permitem uma escalabilidade mais barata e menos trabalhosa, pois não exigem máquinas extremamente poderosas e sua facilidade de manutenção permite que um número menor de profissionais seja necessário.” O processamento de dados distribuídos é possível através da utilização do conceito de MapReduce, que realiza o mapeamento dos dados para os servidores que irão processá-los e gerar um resultado [VIEIRA et. al., 2012]. Quanto ao tipo de controle de consistência, os BDs NoSql implementam o modelo Basically Available, Soft-state, Eventually consistency (BASE), que fornece à aplicação uma visão de que está disponível o tempo todo para consistência, o que não ocorre na realidade, realizando a consistência no momento adequado [QUICOLI, 2013]. Alguns dos BDs NoSql operam ou foram estruturados com características distintas, para diferenciá-las existem quatro modelos mais comuns, são eles [VARDANYAN, 2013]: • Armazenamento Chave-Valor: Os BDs baseados neste modelo utilizam o conceito de uma chave e um valor, conhecida como tabela hash, para consistir os registros e garantir que não ocorra redundância. • Armazenamento Column Families / Wide Column Store: Apesar de não conter o conceito de tabelas do modelo Entidade Relacionamento (ER), este modelo de BD armazena as informações em famílias de colunas. Neste conceito as linhas são ordenadas e agrupadas conforme seu contexto, daí a semelhança com tabelas do ER. É o modelo mais propício e com melhor desempenho a ambientes com grandes processamentos de dados distribuídos. • Banco de Dados orientado a Documentos: O modelo é composto por documentos em vez de registros, onde estes normalmente são baseados em eXtensible Markup Language (XML) ou JavaScript Object Notation (JSON). • Banco de Dados orientado a Grafos: Este modelo utiliza estrutura de grafo para armazenar as informações. As informações são classificadas e armazenadas como entidades, assim como, suas relações são estabelecidas por meio de relacionamentos. Em vez de tabelas com linhas e colunas, este modelo é flexível e pode ser escalado através de varias máquinas. A Figura 1 apresenta qual modelo é mais indicado para cada tipo de situação, tendo como referência quantidade e a complexidade das informações armazenadas. Figura 1. Situação ideal para cada modelo de BD [NASCIMENTO, 2010]. A melhor escolha por qual modelo de BD NoSql utilizar nas aplicações geralmente é definida de acordo com a quantidade das informações que se armazenará. Conforme ilustrado na Figura 1, até 90% dos casos de uso as aplicações podem ser atendidas por BD diferente de NoSql. Quando a quantidade dessas informações é em grande escala e o crescimento constante, o NoSql se torna viável. A escolha do modelo de BD NoSql a ser utilizado terá variação em cada contexto, tendo como variáveis a quantidade e complexidade das informações armazenadas. É importante salientar que a aplicação pode trabalhar simultaneamente com BD relacional e NoSql. De maneira que o NoSql opere em cenários que manipulem grande escala de dados, pois este é estruturado para esta finalidade, e o BD relacional os demais cenários. 3. Estrutura convencional atualmente utilizada em ambientes corporativos Banco de Dados relacional é comumente o BD mais utilizado por atender à grande maioria das necessidades das aplicações. Entre privados e livres existem diversos BDR, alguns deles são: MySql, Oracle, SQLServer, DB2, Firebird, PostgreSQL. Os BDRs contam com grande suporte técnico de empresas e comunidades livres, e também possuem inúmeros profissionais capacitados a desenvolver aplicações neste ambiente. Se comparado a outros tipos, os BDRs lideram a utilização nos mais variados seguimentos de aplicações existentes. O armazenamento dos dados é realizado em tabelas com linhas e colunas identificadas por uma chave primária. Além desta chave pode ter uma ou mais colunas que identificam as informações daquela linha. Por meio das chaves pode-se fazer ligações entre outras tabelas, permitindo agrupar as informações com Joins entre as tabelas. Para a criação da estrutura dos BDRs é utilizada a linguagem Data Definition Language (DDL), para manipular as informações Data Manipulation Language (DML) e por fim para atribuir permissões dos usuários às tabelas criadas é utilizada a Data Control Language (DCL). É possível também a criação de índices que permitem uma forma mais rápida de buscar informações nas tabelas[NETO, 2013]. Os principais pontos dos BDRs é que oferecem Atomicidade, Consistência, Isolamento e Durabilidade (ACID). Atomicidade garante que todas as informações serão processadas ou nada é feito, em caso de erro, todas as transações anteriores são desfeitas; Consistência das informações, ao iniciar uma manipulação nos dados e finalizá-la, a alteração nos dados devem estar consistentes no BD; Isolamento, as transações são realizadas individualmente sem dependerem um das outras internamente no BD; Durabilidade, após uma alteração ser realizada com sucesso ela não e mais desfeita [ARAUJO e GUIZZO, 2013]. 4. Deficiências do modelo relacional Desde que surgiu o modelo relacional, este passou por pequenas mudanças para acomodar as novas exigências de negócio e linguagens de programação. Algumas deficiências dos BDRs que dificilmente serão supridas devido sua arquitetura vêm motivando a utilização de uma arquitetura de banco de dados mais flexível, leve e escalável, chamada NoSql. Os BDRs possuem um alto custo de escalabilidade, que pode ser feita de duas formas, horizontal e vertical. A escalabilidade horizontal pode ser feita particionando a estrutura de dados de acordo com alguns critérios estabelecidos, embora com mais dificuldade se comparado ao NoSql. A escalabilidade vertical pode ser feita aumentando a capacidade de processamento do servidor, onde e necessário um gasto alto com a compra de equipamentos cada vez mais sofisticados e robustos. À medida que o número de usuários se propaga pode chegar o momento em que não se torna mais viável aumentar a capacidade de processamento do servidor. Sendo assim, o problema transfere dos servidores para o banco de dados, que não suporta tantas conexões simultâneas. Em busca de performance, serão iniciadas alterações na aplicação/BD como retirada de Chaves Primárias, criação de Índices e Views, assim como, tentativas de reduzir os Joins [MIGUEL e CARNEIRO, 2013]. No geral, os BDRs atendem bem a aplicações de pequeno, médio e grande porte, porém não foram criados para armazenar dados de forma distribuída e suportar um alto processamento de informações exigido por algumas aplicações. Algumas soluções de BDRs até possuem suporte a processamento de dados distribuídos, mas não atendem com a mesma eficácia que se tem em seu modelo relacional. Pois em grande número de servidores (horizontalmente) se torna inviável devido à complexidade e baixo desempenho encontrados. Devido a esta característica relacional o escalonamento deve ser feito de forma vertical, ou seja, aumentando a capacidade de processamento (hardware) do servidor. E muitas vezes chegando ao limite do hardware sem ter a performance esperada. Para situações como estas o processamento e armazenamento de dados distribuídos se torna indispensável. 5. Implementando o NoSql em ambiente coorporativo Como ambiente para implementação optou-se por um aplicativo que registra ocorrências de funcionários em uma corporação. Mesmo conhecendo que para este ambiente o modelo relacional atenderia de melhor maneira, será avaliada a implementação utilizando uma distribuição do NoSql baseado nos seguintes critérios: • Tempo de desenvolvimento • Suporte especialista • Facilidade na manutenção dos dados via interface • Integridade O aplicativo abordado terá como recursos um cadastro de pessoas da corporação, seu respectivo cargo e função, e também um histórico de ocorrências como faltas, advertências e atestados. Como linguagem de programação optou-se pelo Personal Home Page (PHP), por ser uma tecnologia web, gratuita e de grande utilização pelo mercado. Quanto ao banco de dados optou-se pelo NoSql Cassandra por ser case de sucesso, em contexto parcial, em algumas grandes empresas como facebook e twiter. Cassandra também oferece como recurso Cassandra Query Language (CQL) e também é isento de licença. Como no conceito NoSql não existem relacionamentos entre tabelas. O Cassandra armazena os dados no formato de chave-valor em famílias de colunas. A Figura 2 representa a estrutura inicial do banco de dados criado para a aplicação. Figura 2. Estrutura do banco de dados da aplicação. A parte gráfica do aplicativo é uma tela para cada família de colunas, ou seja, Função, Histórico e Funcionário. Quanto às informações que não necessitam cadastros (como tipo de pessoa, tipo do histórico) os possíveis valores para estes atributos ficaram no código do PHP. Tendo como tipo de pessoa os valores (ATENDENTE e GERENTE) e como tipo de histórico os valores (ATESTADO, FALTA e ELOGIO). Referente aos históricos e funções, a cada inserção de um novo valor é criado em tempo de execução uma coluna nova. Na Figura 3 é apresentado um exemplo de criação das estruturas das super colunas, neste caso o código corresponde a super conluna função: Figura 3. Estrutura da super coluna função. A Figura 4 apresenta o exemplo de inserção de registro na estrutura criada: Figura 4. Inserindo registro na estrutura da super coluna função. O tempo de desenvolvimento em NoSql se torna mais oneroso se comparado com uma aplicação utilizando um BD relacional, o controle das chaves e alguns valores ficam por conta da aplicação, pois não dispomos de recursos como IDs autoincremento, triggers e funções, o que torna o código mais complexo e difícil de ser desenvolvido. Para BDs relacionais é possível encontrar frameworks capazes de gerar telas completas com insert, delete e update o que possibilita uma maior rapidez de desenvolvimento. Quanto ao suporte, como o Cassandra é mantido pela Apache, este suporte não possui custos. Por outro lado, caso necessite é preciso recorrer a comunidade livre ou à fundação Apache Cassandra. Não se tem no mercado de trabalho profissionais certificados, nem meio para certificação dos mesmos, as informações disponibilizadas pelo site oficial do Cassandra estão disponíveis somente me inglês. Existe pouco conteúdo aprofundado disponível na internet para pesquisa se comparado aos BDs Oracle, MySql e outros já mais difundidos no mercado. O client, neste caso o Cassandra-Gui, utilizado para manutenção oferece poucos recursos para manipulação dos dados e estrutura do banco de dados. Não possui suporte a linguaguem CQL, linguagem nativa, onde é possível realizar comandos como select e update parecidos com a linguagem utilizada no BD relacional. Não existem ferramentas alternativas como PLSql-developer (Oracle) ou Workbench(MySql) que possuem diversas utilidades que facilitam na momento de criação do BD ou na manutenção das informações nele armazenadas. Como o NoSql não oferece ACID, a integridade dos dados fica comprometida. As informações são armazenadas em linhas, e assim, não é possível realizar join entre as mesmas. O que torna a extração dos dados mais difícil e menos precisa. O NoSql está mais focado em simplesmente armazenar a informação sem a criação de chaves e verificação de valores. Para as grandes corporações, quanto mais informações se têm maior é o valor agregado a elas. Através das informações diversas estratégias podem ser traçadas. Em aplicações corporativas as informações necessitam de maior controle para cada registro gerado ou alterado no banco de dados, também é necessário garantir que a informação permaneça consistente conforme foi inserida ou manipulada. 6. Conclusão Os BDs NoSql estão sendo utilizado cada vez mais em softwares que necessitam armazenar uma grande quantidade de informações, estas informações são simplesmente gravadas para uma consulta posterior. Em aplicações corporativas ele ainda esta por desejar, pois não oferece um bom controle das informações e formas de alterar e tratar os dados com a mesma eficiencia dos Bancos de dados relacionais. Em caso de possíveis falhas em transações, os bancos de dados relacionais oferecem uma boa gama de recursos para corrigir e evitar que dados sejam perdidos. A quantidade de profissionais conhecedores e de material para estudo de NoSql ainda é pequena, enquanto os Bancos relacionais estão bem difundidos nas empresas e entre os profissionais de Tecnologia da Informação. Assim a utilização de NoSql em softwares coorporativos se torna inviável, pois necessitam de um excelente controle de informações, e a sua massa de dados não atige tamanhos gigantescos como ocorre em aplicações como facebook e twitter para justificar o uso do NoSql como Banco de dados de toda a aplicação, a velocidade para desenvolvimento de aplicações utilizando a arquitetura relacional é superior e oferece mais recursos de controle e manipulação da informação resultando em uma confiabilidade maior nos dados gravados, ressaltando que é possível utilizar as duas arquiteturas de banco de dados no mesmo software, como estudo posterior é sugerido a criação de framework capaz de gerir uma aplicação em NoSql. Referências ARAUJO, E.C., GUIZZO, G. JPA/Hibernate ou NoSql, qual utilizar?. ”Revista Java Magazine”, n. 103. Disponível em: http://www.devmedia.com.br/jpa-hibernate-ounosql-qual-utilizar-revista-java-magazine-103/24386. Acesso em 12/04/2013. IANNI, V. “Introdução aos bancos de dados NoSQL”. Disponível http://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044. Acesso em 02/04/2013. em: MIGUEL, S. B.; CARNEIRO, F. C. F. Repositório de Dados Relacional ou NoSQL? “Revista Java Magazine”, n. 114. Disponível em: http://www.devmedia.com.br/repositorio-de-dados-relacional-ou-nosql-revistajava-magazine-114/27500#ixzz2QwZa877Z. Acesso em 02/04/2013. NASCIMENTO, J. “ NoSql – você realmente sabe do que estamos falando?”. Disponível em: http://imasters.com.br/artigo/17043/banco-de-dados/nosql-vocerealmente-sabe-do-que-estamos-falando/. Acesso em 23/04/2013. NETO, A. C. D. Bancos de Dados Relacionais. “Revista SQL Magazine”, n. 86. Disponível em: http://www.devmedia.com.br/bancos-de-dados-relacionais-artigorevista-sql-magazine-86/20401. Acesso em 09/04/2013. QUICOLI, P. Desenvolvimento NoSql no Delphi XE 2. “Revista ClubeDelphi”, n. 138. Disponível em: http://www.devmedia.com.br/revista-clubedelphi-138/23660. Acesso em 05/08/2013. VARDANYAN, M. “Escolhendo a ferramenta certa para o banco de dados NoSql”. Disponível em: http://imasters.com.br/artigo/21781/banco-de-dados/escolhendo--aferramenta-certa-para-o-banco-de-dados-nosql/. Acesso em 15/04/2013. VIEIRA, M. R., et al. “Bancos de Dados NoSQL: Conceitos, Ferramentas, Linguagens e Estudos de Casos no Contexto de Big Data”. In: Simpósio Brasileiro de Bancos de Dados, 2012, São Paulo. Disponível em: http://data.ime.usp.br/sbbd2012/artigos/pdfs/sbbd_min_01.pdf. Acesso em 01/04/2013.