Beruflich Dokumente
Kultur Dokumente
Termos Gerais
Design, Experimento, Medio, performance, Verificao de Desempenho.
Palavras-Chave
Banco de Dados, Modelo Relacional, DBMS, RDBMS, NoSQL, Escalabilidade, Elasticidade, Disponibilidade, performance, Normalizao, Sistema de Banco de dados Distribudo, Cloud Store.
1.
INTRODUO
No incio da dcada de 80, como alternativa aos antigos bancos de dados hierrquicos e de rede[1], surgiram as primeiras implementaes comerciais de bancos de dados relacional: Oracle e SQL/DS da IBM. O modelo de dados utilizados por esses bancos (modelo relacional) viria a se tornar soberano como soluo de armazenamento de dados ao longo de, aproximadamente, trs dcadas.
informao, por exemplo, caracteristicas e requisitos da aplicao que antes estavam sendo, em geral, negligenciados. Permitindo, com isso, optar ou enxergar a melhor abordagem de armazenamento de dados levando em considerao a natureza e requisitos da aplicao. Iniciou-se, naquele momento, a quebra da hegemonia relacional [4] [5] [6].
no escala, pois a falha de um, implica na indisponibilidade do sistema como todo, por conta da impossibilidade de garantir a consistncia em todos os ns [5]. Portanto, percebe-se que o mundo relacional, como j citado, assegura a consistncia dos dados e, ainda, garante certa disponibilidade, porm no resiliente em relao falhas no particionamento, o que pode ser desastroso, caso a rede falhe ou aumente bastante a latncia. Por outro lado, a viso norelacional (NoSQL) pode fornece alta disponibilidade ou consistncia forte com altssima tolerncia falhas, proporcionando, em tese, uma escalabilidade mais natural [5]. Ainda no vis da consistcia, pode-se ter sistemas forte ou fracamente consistentes. Aqueles, em geral, implementam as caractersricas ACID, para garantir a consistncia e integridade dos dados; j estes optam pela disponibilidade mais eficiente em detrimento de uma consistncia mais rgida, ou seja, tem-se um sistema sempre disponvel e eventualmente consistente. Essa abordagem conhecida como BASE, a aqual ser discutida a seguir [5].
2.
ESCALABILIDADE
Segundo Andr B. Bondi[4], escalabilidade a capacidade de um sistema, em rede ou em um processo, manipular uma quantidade crescente de trabalho de forma uniforme ou aumentar esse poder de manipulao quando necessrio. Na esfera do armazenamento de dados, existem algumas estratgias de escalar um banco de dados. A menos traumtica delas a Escalabilidade Vertical, que consiste em aumentar o poder computacional do servidor de banco de dados, atravs do upgrade do hardware ou implantando a aplicao em uma mquina mais potente. Isso muito caro, principalmente, por criar uma dependncia de fornecedor, como o caso das solues Blade1, na qual um reforo computacinal pode ser feito com a aquisio de mais uma lmina e, alm disso, esse upgrade ser infinito, pois sempre surgiro aplicaes que consumiro esse ganho [3]. Outra opo escalar o banco de dados horizontalmente, atravs da criao de um cluster de servidores. Essa, sem dvida, uma soluo bem mais complexa, porm mais flexvel e dependendo da abordagem utilizada (ACID ou BASE) pode-se ganhar muito com a escalabilidade. Um apecto importante a possibilidade de particionar os dados entre os divernos ns do cluster, permitindo que o sistema continue operando como esperado, mesmo que a rede ou um n falhe. Essa tcnica conhecida como Partition Tolerannt (tolerancia partio ou tolerncia ao particionamento) e ser discutida a seguir, bem como solues BASE [5].
3.
TEOREMA CAP
Esse teorema foi proposto por Eric Brewer no Simpsio Principles of Distributed Computing (PODC) da Association for Computing Machinery (ACM) em 2000[5]. Segundo o teorema, impossvel um sistema distribuido garantir, ao mesmo tempo, consistncia, disponibilidade e tolerncia ao particionamento, porm qualquer combinao formadas por dois desses princpios pode ser suportada, como mostra a Figura 1. Tem-se, ento, sistemas que exigem forte consistncia (C) e tolerncia ao particionamento (P) CP. Nesse caso, necessrio abrir mo, um pouco, da disponibilidade. Algumas solues NoSQL utilizam essa abordagem, como BigTable e MongoDB. Outras solues precisam de altssima disponibilidade (A) e, por conseguinte, necessitam saber lidar com possveis falhas de partio (P) AP. Nesse tipo de sistema, a consistncia ser sacrificada ( eventual-consistency ), podendo existir janelas de inconsistncia, pois a lgica sempre aceitar operaes de escrita e tentar sincroniz-las, nos outros ns, posteriormente (read-consistency ). Apache Cassandra um exemplo de banco de dados NoSQL que implementa essa tcnica. Por ltmo, encontra-se os casos do qual a consistncia forte (C) e a alta disponibilidade (A) so requisitos CA. Esses sistemas no sabem lidar com falhas no particionamento de dados na rede, so os casos de algumas configuraes de banco de dados relacional, no qual todos os ns do cluster so altamente disponveis, porm
________________________________________
Figura 1. Teorema CAP e exemplos de modelos de dados aplicveis em cada combinao possvel.
4.
ACID X BASE
Eric Brewer, no evento j citado (PODC)[5], relevou que a maioria das pesquisas sobre Sistemas de Gerenciamento de Banco de Dados (DBMS) so, principalmente, sobre as caractersticas ACID e considerou fundamental perder Consistncia e Integridade para ganhar Disponibilidade e performance. Dan Pritchett[6], em seu artigo intitulado BASE: An Acid Alternative, observou que, em banco de dados particionados, abrindo mo de alguma consistncia a disponibilidade pode levar a melhorias na escalabilidade.
Blade Server um tipo de servidor compactado constitudo por vrios computadores (lminas) , dispostos em um hack, interligados por barramento, compartilhando unidade de armazenamento ( Storage ), econimizando espao e consumo de energia, dentre outros benefcios.
1
Enquanto sistemas ACID primam pela garantia da constncia e integridade dos dados, solues BASE valorizam mais a disponibilidade e performance em detrimento da consistncia. BASE um acrnimo forado, na idia de se contrapor, como na qumica, ao termo ACID, significando: B asically Available; Soft-state; Eventual Consistency.
O termo NoSQL foi usado pela primeira vez em 1998, por Carlo Strozzi [7], para nomear seu projeto de banco de dados relacional open source, com a proposta de ser uma implementao leve e de no expor ao programador a interface SQL. Porm, foi em 2009 em um evento organizado por Johan Oskarsson [8], para discutir sobre os bancos de dados distribudos open source, que Eric Evans [9] reutilizou o termo NoSQL para denominar o surgimento das inmeras solues de armazenamento de dados distribudos que, em geral, no forneciam as garantias ACID, caracterstica forte presente nos bancos de dados relacionais. Outra caractersca relevante nos bancos de dados NoSQL que, tambm, os contrape aos bancos relacionais a quebra da normalizao dos modelos de dados, por conta do desrespeito da primeira forma normal (1FN)[3], que especifca que todos os atributos devem ser monovalorados e no devem ser compostos. Como bem explana Navathe[3]: 1FN impede as 'relaes dentro de relaes' ou as 'relaes como valores de atributo dentro de tuplas'. Os nicos valores de atributos permitidos pela 1FN so valores nicos, atmicos (ou indivisveis ). Isso interessante, pois elimina a necessidade de joins entre as entidades, tendo em vista, por exemplo, que as dependncias de uma tabela encontram-se em um array na prpria tabela (campo composto) [3]. Por conta dessa caractersca os bancos NoSQL, tambm, so conhecidos como NF2 ou N1NF ( non first normal form ) e Carlo Strozzi, acredita que esse movimento deveria ser, mais adequadamente, chamado de NoRel ou algo parecido, devido seu afastamento do modelo relacional. Porm, importante ressaltar que o termo NoSQL no significa no ao SQL, mais sim no somente ao SQL (Not only SQL), como props Strozzi [7]. Contudo, entende-se que esse movimento no significa uma nova tecnologia ou padro de armazenamento de dados, consiste, basicamente, em uma escola de pensamento, uma nova forma de enxergar o armazenamento de dados e que, alm disso, no pretende desclassificar o modelo relacional, pelo contrrio, apresenta-se como uma opo racional aquele modelo e que sero as caracterscas, requisitos e arquitetura das aplicaes que definiro a melhor opo de armazenamento, podendo, inclusive coexistir os dois mundos em um mesmo sistema [9] [10]. Nesse sentido, ser explorado nas prximas sees as caracterscas das principais solues NoSQL, bem como um estudo comparativo entre essas solues na tica da seguinte taxinomia: modelo de dados alternativos ao relacional, arquitetura, performance, configurao, documentao, licena, classificao segundo teorema CAP (CP, CA, AP) e aplicaes prticas.
Ou seja, sistemas basicamente disponveis e eventualmente consistentes. Fora isso, solues que adotam essa idia, como mostra a Tabela 1, so, em comparao com as que implementam ACID, mais simples e evoluem (escalam) facilmente, pois no possuem um esquema rgido com restries de integridade de entidade e de integridade referencial, como presente no modelo ACID [6]. Percebe-se, ento, que o particionamento de dados uma caracteristica bem vinda a um sistema que necessita escalar e, portanto, sistemas tolerantes ao particionamento devem sacrificar a consistncia forte ou a alta disponibilidade para garantir escalabilidade, respeitando o teorema CAP. nessa atmosfera que se enquandram as solues NoSQL, que diferentemente dos RDBMS's no possuem essa caracteristica no seu design ou deixa isso a cargo do sistema de arquivo. ACID Consistncia Forte BASE Consistncia Fraca
Isolamento (Transaes no se Disponibilidade em primeiro enxergam) lugar Foco no Commit Baixa disponibilidade Conservador (persimista) Dificuldade de evoluir (esquema rgido e normalizado) Poltica do melhor esforo Simples e mais rpido Agressivo (otimista) Fcil evoluo
Tabela 1. Quadro comparativo entre sistemas ACID e BASE. Retirado e adaptado da apresentao de Eric Brewer no Simpsio PODC.
5.
MOVIMENTO NO-SQL
Como j foi discutido, as aplicaes web cada vez mais lidam com excessiva quantidade de requisies e grandes volumes de dados e exigem, ainda, um baixo tempo de resposta. Por conta disso, o mecanismos de armazenamento de dados tornou-se um ponto crtico na manutenao da performance dos sistemas como um todo. Nesse contexto, vrias solues open source de armazenamento de dados no-relacionais comearam a surgir e/ou ganhar fora, tendo em vista as dificuldades dos sistemas de banco de dados relacional escalarem.
5.1.
Modelos de Dados
O modelo de dados relacional organiza o banco de dados como um conjunto de relaes (tabelas), na qual cada tupla (linha) representa uma coleo de valores (colunas) de dados relacionados, correspondendo a uma entidade ou a um relacionamento do mundo real. Essas colees so organizadas, juntamente com as respectivas restries do modelo (Integridade de Entidade, Integridade Referencial e Chaves Estrangeiras), em estruturas conhecidas como esquemas de banco de dados (databases schemas). Outro tipo importante de restries so as
dependncias de dados (funcionais e multivaloradas), que medem a maturidade de um projeto de banco de dados relacional atravs da normalizao de relaes[3]. Por outro lado, os modelos de dados no-relacionais possuem um esquema mais leve e desnormalizado e, em muitos casos, outros tipos de representao de dados, como JSON, YAML e XML, so utilizados para persistir entidades do mundo real. Atualmente, as principais ferramentas NoSQL utilizam um dos quatros modelos de dados alternativos ao relacional descritos a seguir, porm existem outras solues que implementam alguma outra representao ou, ainda, mesclam mais de uma tipo[10].
Todos esses formatos, embora organizados de formas diferentes, compe uma estrutura de dados constituda de uma quantidade varivel de atributos de diferentes tipos de dados, podendo, inclusive, conter outros documentos (subdocumentos). Isso permite que esses bancos armazenem qualquer documento, sem necessidade prvia da definio de sua estrutura, sendo considerados, portanto, livres de esquema ( schema-free) [22]. Observa-se, tambm nesse caso, a desnormalizao do esquema, tendo em vista que todas as dependncias ou relaes de uma entidade so armazenadas no mesmo documento, como pode ser observado na Listagem 2. Essa caracterstica favorece o particionamento de dados e, consequentemente, a escalabilidade [22].
void put(String key, byte[] value); byte[] get(String key); void remove(String key);
Listagem 2. Exemplo de um Documento no formato JSON, que possui um atributo multivalorado, notas.
Family
Database
(Famlia
de
Pode-se dizer que o modelo que mais se assemelha ao relacional, por conta da organizao de suas estruturas, mas conceitualmente eles so bem diferentes, por exemplo, esse modelo realiza o armazenamento de dados baseado em colunas (column-based store), enquanto o modelo relacional, sem variao, utiliza armazenamento baseado em linhas ( row-based store) [23]. Alguns conceitos so necessrios ao entendimento desse modelo, como: Keyspaces, Column Family (Famlia de Colunas), Columns (Colunas) e Super Columns (Super Colunas) [23]. Keyspace uma estrutura lgica que organiza as famlias de colunas; assemelha-se as tablespaces presentes em alguns RDBMS e, em geral ,tem-se apenas um por aplicao [23]. Column Family a forma como os dados so armazenados no disco (ou memria), agrupando as colunas ou super colunas em listas ordenadas, identificadas por uma chave nica e referenciadas pelo seu nome. So estruturas semelhantes s tabelas dos bancos de dados relacionais, porm possui caractersticas peculiares, como quantidades variveis de colunas por linha e o versionamento de colunas. a nica estrutura que precisa ser definida antecipadamente, no entando, ao contrrio de uma tabela, a nica coisa que deve-se definir o seu nome e as opes de classificao pela chave, portanto, tambm, no possui um esquema definido [23]. A Coluna o componente mais granular desse modelo, composta por nome, valor e timestamp. O nome o rtulo da coluna, o valor o dado arzamenado e o timestamp o elemento que permite o versionamento da coluna, como citado a cima. As colunas podem, em algumas solues, conter outras colunas, classificando-se, neste caso, como uma super coluna [23].
Blob (Binary Large OBject) uma estrutura de dados contendo informaes binrios de qualquer formato, podendo ser um imagem, vdeo, audio etc.
2
solues tentam otimizar essa escalabilidade permitindo que novos ns sejam adicionados ao cluster de forma otimizada e transparente, sem a necessidade, por exemplo, de reiniciar o cluster. essa capacidade dar-se o nome de elasticidade e, dependendo das caractersticas do sistema, pode ser desejvel ou desnecessria [12] [26].
5.2.
Arquitetura
Como foi visto, para manipular grandes volumes de dados as solues NoSQL precisaram abrir mo da normalizao e trabalhar com dados semi ou no estruturados. Alm dessa, outras propriedades so inerentes s solues que priorizam alta disponibilidade e baixa latncia. Em geral, as solues NoSQL implementam ou tentam tornar mais simples algumas caractersticas que os banco de dados relacionais, por conta de seu design, no disponibilizam ou muito complexo configurar e mater, como distribuio de dados e elasticidade do cluster, por outro lado, existem outros aspectos que tambm os diferenciam, mas que no implicam no throughput dos dados, como a API de consulta.
SERVING
importante observar que as solues NoSQL foram surgindo, em geral, para atender demandas especficas de empresas, como Google, Facebook, Twiter, LinkedIn, Amazon, Yahoo e outras, que precisavam tratar um enorme volume de requisies e tinham o armazenamento de dados como principal gargalo nesse processo. Assim, as solues foram sendo concebidas de acordo com suas necessidades de negcio, inexistindo, dessa forma, qualquer padronizao e/ou conveo no desenvolvimento dessas ferramentas. Essa falta de padronizao, em especial no modelo de dados, na interface ou linguagem de manipulao de dados e na forma de distribuir os dados e escalar o cluster, dificulta qualquer iniciativa de comparao entre os banco de dados NoSQL. Foi baseado nessa dificuldade e na miscelnea de solues NoSQL, que um grupo de pesquisadores do Yahoo! Research desenvolveu um framework chamado Yahoo! Cold Serving Benchmark (YCSB) [12][13], que auxilia na avaliao de desempenho entre esses bancos. Esse framework expe uma interface (classe abstrata) para realizao de um CRUD (create, read, update, delete), como
Pingdom uma empresa que monitora gratuitamente o uptime, downtime e o desempenho de sites, redes e servidores, semelhante ao Google Analytics.
3
mostra a Listagem 3, que deve ter uma implementao para cada banco que se deseja comparar. A carga de trabalho ( workload), a qual cada banco ser submetido, deve ser definida em arquivos de propriedades. Dentre outros parmetros, pode-se definir nesse arquivo: a quantidade de operaes (leitura e/ou escrita) que sero realizadas no benchmarking, a quantidade de operaes por segundo que o banco deve processar ( throughput) e a proporo de operaes de leitura e escrita que ser considerada na comparao. int read( String table, String key, Set<String > fields, HashMap <String ,ByteIterator> result); int scan( String table, String startkey, int recordcount, Set <String > fields, Vector <HashMap <String ,ByteIterator>> result); int update( String table, String key, HashMap <String ,ByteIterator> values); int insert( String table, String key, HashMap <String ,ByteIterator> values); int delete( String table, String key);
Em relao a frao 8:2 (80% de escrita e 20% de leitura), salutar destacar que ela foi utilizada por ser considerada uma proporo real existente entre operaes de leitura e escrita em sistemas corporativos, permitindo, portando, que os resultados dessa anlise possam ser considerados em ambientes com comportamentos semelhantes a este. Nesses dois momentos, foram medidos o throghput de operaes em relao a latncia, o consumo de memria utilizado pelos processos dos bancos de dados quando da realizao das workloas, bem como o uso de CPU. AMD Phenom(tm) II X2 B53 Processor / 64bits 2800MHz 256KB / 1GHz 1MB / 1GHz 6MB / 1GHz DIMM DDR3 Synchronous 8GB / 1333MHz ATA Disk ST3500418AS Seagate - 1TB Ubuntu 11.04 Natty x86_64 GNU/Linux NetXtreme BCM5761 Gigabit Ethernet PCIe - 1Gbits/s
Listagem 3. Interface DB ( DataBase) do YCSB. Atualmente, essa ferramenta permite a realizao de estudos comparativos apoiados em dois critrios: performance, que mede a latncia (tempo de resposta) das requisies quando o banco de dados est sobrecarrregado, e escalabilidade, que mede o desempenho do banco quando o cluster aumentado e quo transparente esse incremento (elasticidade).
7.
METODOLOGIA
field0 = [#3<.:><!%(2("<*1*,69(1#&/%&<*#?/+ >+>,8='* %0,07!;04&,'?/(?8.7&?*6328***$59$41&/. 9?&:?"4<2%=#!,:/<] field1 = [)4)0.4 72#>(0#.!'036## (%.=&?,"092?32 .'%,544%<0?9-4'=#+ (8:,=8?&)4"9&>2=/?-*/>(>+,(<(;?=,8&$3&04" :] field2 = [ /?%;)).793K< (3$539!+"&&;9!;<-/4<.#3#8/(#)222#$#3>:7>>(*>9."=.-:8?7*:/!483>8&,685:812$<+3#6+8%(] field9 = [ /?%;)).793K< (3$539!+"&&;9!;<-/4<.#3#8/(#)222#$#3>:7>>(*>9."=.-:8?7*:/!483>8&,685:812$<+3#6+8%(]
Neste tabalho foi avaliado a performance dos bancos de dados NoSQL MongoDB, Apache Cassandra, Redis e Voldemort, configurados em um nico servidor ( standalone), no em cluster. Segue, na Tabela 2, a configurao da mquina utilizada nesse experimento. A anlise foi divida em duas etapas ( workload's). Na primeira, efetuou-se a carga do banco, na qual 1 milho de registro de 1KB cada foi inserido no banco de dados, exigido dele 5000 insert's por segundo. Na segunda, o banco foi submetido a uma carga de, tambm, 1 milho de operaes a 5000 por segundo, porm distribudas em 80% de leitura e 20% de escrita ( update) workload 8:2. Cabe ressaltar que os insert's no foram em batch (quando se abre uma transao no incio da operao e confirma no final), mas sim, 5000 operaes de escrita isoladas e paralelas, simulando 5000 usurios gravando algo de 1KB no banco. Esse registro de 1 KB constitudo de 10 campos de 100 bytes cada, como mostra a Listagem 4.
Listagem 4. Exemplo de um registro utilizado na carga do banco de dados. Para catalogar a utilizao de memria e CPU pelos processos, foi utilizado os binrios top e free da distribuio Linux usada neste estudo e realizada uma mdia aritimtica do percentual total de utilizao de cada um desses recursos por cada um dos bancos, porm, para atribuio da nota de desempenho, foi considerado o percentual inverso do consumo desses recursos,
tendo em vista que uma alta utilizao deles pode ser crtico caso a carga do sistema aumente, ou seja, como um baixo consumo desejado, um banco que ocupou 75% do processador obteve um redimento de 2,5 (25%) nesse quesito. Para avaliar a performance de cada soluo foi registrado a quantidade de operaes ( throghput) que cada banco efetivava a cada 100ms. A latncia mxima ideal considerada neste estudo foi 100ms, justamente, o tempo em que foi realizada a primeira coleta do throghput. Os outros ponto de coleta ocorreram a cada 100ms, ou seja, de 0 a 100ms, de 100ms a 200ms, de 200ms a 300ms e assim por diante, at o o limite de 1000ms. Dessa forma, as operaes efetivadas em um tempo superor a 1000ms foram registradas nesta latncia (acima de 1000ms). Observou-se que a latncia mnima, mxima ou mdia no seriam bons parmetros para avaliar a performance, pois podiam indicar picos de processamento ou ter uma mdia corrompida por esses picos. O parmetro utilizado, ento, foi uma mdia ponderada entre os throghout's medidos, utilizando-se pesos para cada latncia, por exemplo: as operaes realizadas at 100ms receberam peso 10, at 200ms receberam peso 9, at 300ms receberam peso 8 e assim por diante, at chegar nas operaes que demoraram 1000ms ou mais, estas receberam peso 1. Nesse sentido, a frmula utilizada para identificar a performance de cada banco de dados avaliado foi:
banco de dados patrocinado pela VMWare, que em maro de 2010 contratou o italiano Salvatore Sanfilippo, idealizador desse projeto, para se dedicar no seu desenvolvimento e aprimoramento. Esse banco possui uma boa documentao e um dos mais difundidos bancos NoSQL atualmente [15].
8.4.
Cassandra
Cassandra um banco de dados no-relacional mantido pela fundao Apache, que organiza seus dados em famlias de colunas (Column Family Database) e foi desenvolvido em Java. Inicialmente, era um projeto do Facebook, desenvoldido por Avinash Lakshman, mas que em 2008 teve seu cdigo fonte liberado e no ano seguinte integrou o portflio de projetos da fundao Apache. Possui uma boa documentao e uma razovel adoo pela comunidade [17].
8.7.
Voldemort
Voldemort um sistema de armazenamento de dados distribudos, escrito em Java e baseado em chave-valor ( keyvalue). Dentre outras caractersticas, possui particionamento e replicao automtica de dados em diversos servidores e tratamento tranparente de falhas em um servidor. Um detalhe interesante desse banco que ele garante integridade dos dados, conseguida atravs do versionamento dos itens de dados. Ele usado no LinkedIn para certos problemas de escalabilidade de alto armazenamento no qual o particionamento funcional simples no suficiente. O prprio site oficial o considera, ainda, como um sistema novo, que tem arestas no aparadas, mensagens de erro falsas e, provavelmente, muitos erros no detectados. Possui um documentao boa e uma comunidade incipiente [18]. A seguir, na Tabela 3, encontra-se um quadro que resume as principais caractersticas de cada um desses bancos.
8.
Modelo de Dados MongoDB Redis Cassandra Voldmort Document Key-value Column Family Key-value CP CP AP AP GNU AGPL v3.0 BSD Apache License 2 Apache License 2 10gen VMWare Apache Foundation LinkedIn CAP Licena Empresa
8.1.
MongoDB
Mongo DB um banco de dados NoSQL open source, escrito em C++, orientado documentos ( Documents Database) e inscrito sob a licena GNU AGPL v3.0. Ele se prope a ser escalvel e de alta performance, com capacidade de manipular grandes volumes de dados. Seu nome oriundo da palavra humongous, que significa muito grande, fazendo jus a seu propsito. Uma caracterstica peculiar desse banco a flexibilidade nas consulta. Diferentemente da maioria dos bancos NoSQL, ele possui vrios operadores binrios que permitem a realizao de consulta adhoc. Possui uma excelente documentao e participao da comunidade, inclusive permitindo que seja testado on-line, atravs de um shell script disponibilizado no site oficial [16].
8.2.
Redis
Redis uma soluo open source de armazenamento de dados baseado no modelo key-value. Ele escrito em C e est disponvel sob a licena BSD. Em prol de excelncia no desempenho, ele trabalha, principalmente, com persistncia de dados em memria, porm, dependendo da necessidade, ele fornece mecanismos para descarregar esses dados no disco em algum momento, bem como possibilidade de gravar todos os comando executados sobre a base em um log. Atualmente, esse
9.
RESULTADOS ENCONTRADOS
Na etapa de carga dos bancos, duas solues, Redis e Voldemort, se destacaram das demais, pois chegaram a gravar quase 100% dos registros (1 milho) em menos de 100ms, sendo que Voldemort ainda inseriu a mais que Redis quase 45 mil registros nessa mesma latncia. Cassandra, por sua vez, foi o banco que
menos operaes de insero efetivou nesse tempo de resposta, praticamente, a metada dos dois primeiros bancos, cerca 500 mil registros. J MongoDB ficou no meio desses extremos, conseguindo realizar com sucesso, aproximadamente, 75% das inseres nesse intervalo de tempo. O comportamento do nmero de operaes efetivadas em relao a latncia pode ser melhor observado analisando o grfico exibido na Figura 2. Aplicando-se a frmula definida na metodologia para avaliar a performance de cada banco, pode-se observar que Voldemort e Redis destacaram-se, nesse quesito, em relao as outras solues avaliadas, como mostra a Figura 3. Voldemort, em especial, demonstrou, em relao aos critrios usados na pesquisa, um excelente tempo de resposta, com redimento de quase 100%, como ja citado. Por outro lado, Voldemort juntamente com Cassandra foram os que mais exigiram do processador, este usufruiu de quase 90% do uso da CPU e aquele cerca do 80%. MongoDB, por sua vez, utilizou 50% da capacidade de processamento da mquina durante a realizao dessas operaes e Redis, pouco mais de 30%. O consumo de memria foi relativamente baixo e homognio. O banco que mais consumiu memria no usou 2MB (16%), como pode-se observar na Figura 4. Figura 4. Consumo mdio de Mmora e uso da CPU em % do total da memria principal (8GB) - Workload de Carga. Na segunda etapa desse estudo, os bancos foram submetidos a workload (8:2), na qual 80% das operaes eram de leitura e 20% de escrita. Em relao as operaes de escrita, todas as solues testadas apresentaram um desempenho bem prximo um dos outros. A discrepncia entre os bancos que tiveram a melhor (Voldemort) e a pior (Cassandra) performance foi de, somente, 150 mil operaes realizadas na latncia desejada por este estudo (100ms), como pode ser visualizado na Figura 5.
Figura 2. Throughput (operaes/segundos) das operaes de insero versus Latncia (ms) Workload de Carga. Figura 5. Throughput (operaes/segundos) das operaes de escrita versus Latncia (ms) - Workload 8:2. No tocante as operaes de leitura, j percebe-se uma diferena mais acentuada na performance. Mais uma vez Voldemort e Redis destacam-se dos demais, efetivando quando 100% das operaes em menos de 100ms, mais especificamente, este atingiu 97% e aquele 99%, porm, agora, MongoDB aproximouse, conseguindo dar vazo a cerca de 93% das requisies na mesma latncia. Cassandra no teve uma performance muito eficiente se comparado com os demais bancos, pois conseguiu, nesse tempo de resposta, processar, apenas, 62% das operaes de leitura, como mostra a Figura 6. Figura 3. Perfamace ponderada dos bancos de dados em relao o throghput e a latncia Worload de Carga.
Figura 6. Throughput (operaes/segundos) das operaes de leitura versus Latncia (ms) - Workload 8:2. Com as devidas ponderaes aplicadas sobre o throghput alcanado em cada medio de latncia, pode-se aferir, conforme grfico da Figura 7, que Voldemort conseguiu dar maior vazo as requisies nesta workload (8:2), seguido do Redis, MongoDB e um pouco mais afastado, Apache Cassandra. Porm, interessante d relevo ao fato de que as diferenas so bem prximas, pois este ltimo teve uma performance circulando em torno de 9,6 e 9,7; MongoDB entre 9,8 e 9,9; e Redis e Voldemort orbitaram entre uma performance de nota 9,9 e 10. Mas de qualquer forma, em sistemas que exigem baixa latncia, as disparidades apesar de, as vezes, serem mnimas devem ser consideradas, pois essa diferena evidenciada medida que a sobrecarga do sistema aumenta. Figura 7. Consumo mdio de Mmora e uso da CPU em % do total da memria principal (8GB) - Workload 8:2.
performance Carga Redis MongoDB Cassandra Voldemort 9,901887 9,284453 9,119946 9,979221 8:2 9,940514 9,878387 9,66583 9,989142
Uso de CPU Carga 6,731169 4,912857 1,237143 1,955556 8:2 6,757303 6,797101 0,295070 0,964765
10.
CONCLUSO
Figura 7. Perfamace ponderada dos bancos de dados em relao o throghput e a latncia Workload 8:2. Em relao ao cunsumo de memria e processador, nessa segunda etapa do benchmarking , fora o MongoDB que teve uma diminuio em torno de 20% do uso da CPU em relao primeira etapa dos testes (carga) e o Redis que se manteve com o mesmo percentual de utilizao do processador, os outros dois bancos, Voldemort e Cassandra, tiveram um incremento em torno de 10% na ocupao da CPU, como pode ser visto na Figura 7. O uso de memria, como na primeira etapa, foi bem tranquilo, apesar de ter dobrado essa utilizao por todos os bancos, exceto Cassadra que aumentou seu uso em torno de 6%, mas ainda sim, continua sendo uma ocupao bem razovel, se no suscinta.
Neste trabalho foi realizado um estudo comparativo entre algumas das mais populares solues NoSQL, explorando, principalmente, a performance de cada banco quando submetido a uma carga expressiva de requisies. Foi avaliado o throghput de operaes e o comportamento da latncia em relao a quantidade de operaes solicitadas. Alm disso, mediu-se, tambm, o consumo de memria e uso do processador durante os testes aos quais os bancos foram submetidos. Observou-se que, de certa forma, todas as solues avalidas tiveram uma performance interessante, porm duas delas, Redis e MongoDB, se destacaram por, em ambos os testes, apresentarem um tempo de resposta razovel medida que as requisies iam sendo disparadas, somado com um uso de CPU muito baixo, se comparado com Cassandra e Voldemort, essas solues, sem dvida, no ambiemte proposto, se comportaram mais adequadamente. Voldemort apesar de ter sido muito eficiente no processamento das requisies, exigiu muito do processamento, o que pode ser crtico, caso a carga aumente muito. O mesmo acontecou com Cassandra, porm este, ainda, apresentou uma performance inferior.
Sobretudo cabe ressaltar que esses testes foram realizados utilizando uma carga de trabalho especfica em um comportamento peculiar de aplicaes corporativas, portando, em outros ambientes, com outras necessidades de negcio devem ser considerados outros workload's para encontrar a soluo que melhor se adeque a realidade proposta. Alm disso, outros aspectos devem ser ponderados, como arquitetura da soluo e modelo de dados, este ltimo, em especial, deve ser cuidadosamente analisado, pois dependendo da natureza do sistema um ou outro modelo pode aderir melhor ao domnio da aplicao.
[6] Pritchett, Dan. BASE: An Acid Alternative. May 1, 2008. http://portal.acm.org/ft_gateway.cfm? id=1394128&type=pdf. Acessado em 29/02/2012 s 19:30. [7] Strozzi, Carlo. NoSQL: A Relational Database Management System. http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/. Acessado em 29/02/2012 s 09:10. [8] Oskarsson, Johan. NoSQL debrief. San Francisco, June 2009. http://blog.oskarsson.nu/2009/06/nosql-debrief.html. Acessado em 01/03/2012 s 14:45. [9] Evans, Eric. NoSQL: What's in a name? http://blog.symlink.com/2009/10/30/nosql_whats_in_a_name.html. Acessado em 01/03/2012 s 20:40. [10] http://nosql-database.org/. 16:10. Acessado em 06/03/2012 s Acessado Acessado em em
11.
TRABALHOS FUTUROS
Foi explorado neste trabalho a performance de sistemas de armazenamento em cloud, levando em considerao throughput , latncia, consumo de memria e CPU. Porm, outro ponto muito importante que deve ser ponderado quando da adoo de alguma soluo NoSQL a escalabilidade e elasticidade do sistema. Precisa-se compreender como essas ferramentas fornecem essas propriedades e at que nvel elas so interessantes em relao ao custo operacional. Para realizar esse estudo, mais um vez o framework YCSB pode ser til, tendo em vista que ele possui uma camada especfica para realizao de teste de escalabilidade em sistemas cloud store. Outro trabalho interessante nesse cenrios , identificado o banco NoSQL que melhor se adeque a um propsito especfico, implementar um fornecedor JPA (Java Persistence API) [19] que disponibilize as funcionalidades desse banco atravs das interfaces do JPA ou testar framework's prontos nesse sentido, como o caso do Hibernate OGM (Object/Grid Mapper) [14].
[13] http://research.yahoo.com/Web_Information_Management/Y CSB. Acessado em 14/03/2012 s 21:40. [14] http://www.hibernate.org/subprojects/ogm.html. em 23/04/2012 s 02:35. [15] http://redis.io/. Acesso em 22/04/2012 s 23:10. [16] http://www.mongodb.org/. Acessado em 23/04/2012 s 23:45. [17] http://cassandra.apache.org/. Acessado em 24/04/2012 s 00:10. [18] http://project-voldemort.com/. Acessado em 24/04/2012 s 00:45. [19] http://jcp.org/aboutJava/communityprocess/final/jsr317/inde x.html. Acessado em 24/04/2012 s 02:38. Acessado
12.
REFERNCIAS
[20] http://dl.acm.org/citation.cfm?id=1993843. 26/05/2012 s 09:30. [21] http://dl.acm.org/citation.cfm?id=1294281. 26/05/2012 s 10:15. [22] http://dl.acm.org/citation.cfm?id=62528. 26/05/2012 s 11:30. [23] http://dl.acm.org/citation.cfm?id=2095583. 26/05/2012 s 13:150. [24] http://dl.acm.org/citation.cfm?id=1322433. 26/05/2012 s 14:00. [25] http://dl.acm.org/citation.cfm?id=2206879. 26/05/2012 s 15:30. [26] http://dl.acm.org/citation.cfm?id=2063973. 27/05/2012 s 09:40.
em em em em em em em
[1] http://www.ibm.com/developerworks/xml/library/xmatters8/index.html. Acessado em 26/02/2012 s 11:42. [2] Ted Cood, Edgar Frank. A Relational Model of Data for Large Shared Data Banks. Communications of the ACM, 1970. http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf. Acessado em 27/02/2012 s 07:50. [3] Elmasri, Ramez e Navathe, Shamkant B. Sistemas de Banco de Dados. Pearson Addison Wesley, 4 Edio, So Paulo, 2005. [4] Andr B. Bondi, Characteristics of scalability and their impact on performance, Proceedings of the 2nd international workshop on Software and performance, Ottawa, Ontario, Canada, 2000. http://dl.acm.org/citation.cfm?id=350391.350432. Acessado em 29/02/2012 s 11:00. [5] Brewer, Eric. Towards Robust Distributed Systems. Principles of Distributed Computing (PODC). Portland, OR. July 2000. http://www.cs.berkeley.edu/~brewer/cs262b2004/PODC-keynote.pdf. Acesso em 29/02/2012 s 16:40.