Bases de Dados NewSQL: uma avaliação experimental

Propaganda
Instituto Politécnico de Coimbra
Instituto Superior de Engenharia de Coimbra
Departamento de Engenharia Informática e de Sistemas
Bases de Dados NewSQL: uma
avaliação experimental
Débora Abigail Carvalho Ribeiro
Licenciatura em Engenharia Informática – Ramo de Sistemas de Informação
Coimbra, Novembro de 2013
Instituto Politécnico de Coimbra
Instituto Superior de Engenharia de Coimbra
Departamento de Engenharia Informática e de Sistemas
Licenciatura em Engenharia Informática
Ramo de Sistemas de Informação
Projecto
Relatório Final
Bases de Dados NewSQL: uma
avaliação experimental
Débora Abigail Carvalho Ribeiro
Orientador:
Professor Doutor Jorge Bernardino
DEIS - ISEC
Coimbra, Novembro de 2013
Ao meu namorado e à minha família
Bases de Dados NewSQL
Agradecimentos
Agradecimentos
Quero agradecer ao Professor Jorge Bernardino, o meu orientador de projecto, por
toda a ajuda e orientação que me deu ao longo deste projecto.
Agradeço também ao Professor Francisco Duarte, anterior presidente do
Departamento de Engenharia Informática e de Sistemas (DEIS), por ter
disponibilizado um computador que permitiu a realização dos testes necessários para
este projecto.
E por fim quero agradecer ao meu namorado e à minha família por todo o apoio que
me deram ao longo deste projecto, e pelo incentivo que me deram a nunca desistir e
continuar mesmo quando as coisas corriam menos bem.
v
Bases de Dados NewSQL
Resumo
Resumo
Com a evolução do mundo das tecnologias a capacidade de armazenamento de
informação e de processamento não consegue acompanhar o ritmo da informação
gerada sendo por isso necessário procurar alternativas para as tradicionais bases de
dados relacionais.
Uma das soluções actualmente existentes para resolver este problema foi o
aparecimento das bases de dados NoSQL. Apesar de terem bastante capacidade de
escalabilidade e processamento estas bases de dados têm duas limitações muito
grandes, não utilizam a linguagem SQL e não dão garantia de consistência dos dados,
isto é, não são ACID. Logo uma transição para sistemas NoSQL pode trazer muitas
dificuldades a qualquer organização, a começar por terem de reescrever todo o código
da base de dados. Assim depressa se chegou à conclusão que esta não é uma solução
viável para a maioria das organizações. Deste modo, surgiram as bases de dados
NewSQL.
As bases de dados NewSQL são um conjunto de novas bases de dados relacionais que
proporcionam melhor desempenho que os sistemas actualmente existentes, mantendo
no entanto a utilização da linguagem SQL. Devido às enormes quantidades de dados
geradas hoje em dia este tipo de bases de dados são adequadas para resolver os
tradicionais problemas no processamento desta informação. Neste projecto mostramos
as vantagens das bases de dados NewSQL através da avaliação sua experimental
utilizando o benchmark TPC-H. Nesta avaliação foram testadas as seguintes bases de
dados NewSQL: Drizzle, TokuDB, NuoDB, VoltDB e StormDB, utilizando como
base de comparação a base de dados MySQL. A avaliação experimental demonstrou a
superioridade das bases de dados NewSQL e como podem responder às actuais
necessidades de capacidade armazenamento de informação e de processamento.
Palavras–chave: Bases de dados, NewSQL, bases de dados open source, RDBMS,
NoSQL
vii
Bases de Dados NewSQL
Resumo
Abstract
With the evolution of the world of technologies the capacity to store information and
processing cannot keep up with the pace of information generated and is therefore
necessary search for alternatives to traditional relational databases.
One of the solutions currently exist to solve this problem was the emergence of
NoSQL databases. Although having enought capacity of scalibility and processing
this databases have two limitations too large, do not use SQL language and give no
guarantee of consistency of data, i.e., they are not ACID. So a transiction to NoSQL
systems can bring many difficulties to any organization, start with having to rewrite
all the code of the database. So quickly came to the conclusion that is not a viable
solution for most organizations. Thus, NewSQL databases emerged.
NewSQL databases are a group of new relational databases that provides better
performance than the currently existing systems, maintaining however the use of the
SQL language. Because of the large quantities of data generated nowadays this type
of databases are appropriate to solve the traditional problems in processing this
information. In this project we show the advantages of the NewSQL databases
through its experimental evaluation using the TPC-H benchmark. In this evaluation
the following NewSQL databases were tested: Drizzle, TokuDB, NuoDB, VoltDB
and StormDB, using as a basis of comparison the database MySQL. The experimental
evaluation demonstrated the superiority of NewSQL databases and how they can
respond to the current needs of storage capacity and information processing.
Key-words: Databases, NewSQL, open source databases, RDBMS, NoSQL
viii
Índice
Agradecimentos ............................................................................................................. v
Resumo ........................................................................................................................ vii
Abstract ....................................................................................................................... viii
Índice ............................................................................................................................ ix
Índice de Figuras ........................................................................................................xii
Índice de Tabelas ........................................................................................................ xv
Notação e Glossário .................................................................................................. xvii
1
Introdução ............................................................................................................. 1
2
O problema do crescimento dos dados ................................................................. 5
3
Evolução do SQL ao NewSQL............................................................................ 11
4
3.1
NoSQL ................................................................................................................... 12
3.2
NewSQL ................................................................................................................ 14
3.3
Porquê criar o NewSQL? .................................................................................... 16
3.4
Problemas do SQL ............................................................................................... 16
3.5
Características das soluções NewSQL ................................................................ 17
3.6
Categorias do NewSQL ....................................................................................... 18
3.6.1
Novas Arquitecturas ........................................................................................ 18
3.6.2
Novos motores de armazenamento MySQL .................................................. 19
3.6.3
Sharding Transparente ................................................................................... 19
3.6.4
NewSQL-as-a-Service ...................................................................................... 19
Sistemas NewSQL ............................................................................................... 21
4.1
MySQL .................................................................................................................. 22
4.2
Drizzle ................................................................................................................... 23
4.3
TokuDB ................................................................................................................. 24
4.4
NuoDB ................................................................................................................... 26
ix
4.5
VoltDB ................................................................................................................... 27
4.6
StormDB ............................................................................................................... 29
5
Ambiente experimental ....................................................................................... 33
5.1
TPC-H Benchmark .............................................................................................. 33
5.2
Características a avaliar ...................................................................................... 36
6
Principais dificuldades ........................................................................................ 37
7
Avaliação Experimental ...................................................................................... 39
7.1
Comparação de características técnicas............................................................. 39
7.2
Bases de dados com 1GB ..................................................................................... 41
7.2.1
MySQL vs Drizzle vs TokuDB ........................................................................ 45
7.2.2
NuoDB............................................................................................................... 49
7.2.3
VoltDB .............................................................................................................. 52
7.2.4
StormDB ........................................................................................................... 55
7.3
8
Bases de dados de com 10GB .............................................................................. 57
7.3.1
MySQL vs Drizzle vs TokuDB ........................................................................ 59
7.3.2
StormDB ........................................................................................................... 62
Conclusões e trabalho futuro ............................................................................. 65
Referências .................................................................................................................. 67
Anexo A
Tutorial de instalação do Ubuntu 12.04 ................................................. 71
Anexo B
Tutorial de instalação do MySQL e dos sistemas NewSQL .................. 75
B.1
MySQL .................................................................................................................. 75
B.2
Drizzle ................................................................................................................... 77
B.3
TokuDB ................................................................................................................. 78
B.4
NuoDB ................................................................................................................... 79
B.5
VoltDB ................................................................................................................... 80
Anexo C
Como utilizar o TPC-H ........................................................................... 81
Anexo D
Pesquisas do TPC-H ............................................................................... 83
x
Anexo E
Scripts utilizados no VoltDB ................................................................... 96
E.1
Script 1 .................................................................................................................. 96
E.2
Script 2 .................................................................................................................. 98
Anexo F
Resultados para a base de dados de 1GB ............................................. 100
Anexo G
Resultados da base de dados de 10GB.................................................. 106
Anexo H
Artigo Científico .................................................................................... 109
Anexo I
Proposta de Projecto ............................................................................. 119
xi
Índice de Figuras
Figura 2.1- Estimativa dos dados gerados em todo mundo entre 2005 e 2011, em exabytes, adaptado
de (Gantz & Reinsel, 2011) ---------------------------------------------------------------------------------------- 6
Figura 2.2 – Crescimento dos 3 Vs (Rouse, 2013) -------------------------------------------------------------- 7
Figura 2.3 - Armazenamento distribuído dos dados (Venkatesh & S, 2012) -------------------------------- 9
Figura 3.1 – Sharding de uma base de dados ------------------------------------------------------------------ 15
Figura 4.1 – Ecossistema NewSQL, (451 Group, 2012) ------------------------------------------------------ 21
Figura 4.2 – Interface do MySQL no Ubuntu ------------------------------------------------------------------ 23
Figura 4.3 – Interface do Drizzle -------------------------------------------------------------------------------- 24
Figura 4.4 – Interface do TokuDB ------------------------------------------------------------------------------- 26
Figura 4.5 – Interface do domain -------------------------------------------------------------------------------- 27
Figura 4.6 – Interface do NuoSQL ------------------------------------------------------------------------------- 27
Figura 4.7 – Interface do servidor do VoltDB------------------------------------------------------------------ 29
Figura 4.8 – Interface do sqlcmd do VoltDB ------------------------------------------------------------------- 29
Figura 4.9 – Interface StormDB --------------------------------------------------------------------------------- 31
Figura 4.10 – Gestão da base de dados no StormDB --------------------------------------------------------- 31
Figura 5.1 – Esquema da base de dados do TPC-H ----------------------------------------------------------- 34
Figura 7.1 – Tempo de criação das tabelas para 1GB -------------------------------------------------------- 42
Figura 7.2 – Erro ao definir uma chave forasteira no StormDB -------------------------------------------- 44
Figura 7.3 – Definição correcta de uma chave forasteira no StormDB ------------------------------------ 44
Figura 7.4 – Média dos tempos de execução para 1GB após executar as três sequências --------------- 46
Figura 7.5 – Tempo total de execução de todas as sequências para 1GB ---------------------------------- 48
Figura 7.6 - Média dos tempos de execução para 1GB após esxecutar as três sequências (NuoDB
MySQL, Drizzle e TokuDB) --------------------------------------------------------------------------------------- 50
Figura 7.7 - Tempo total de execução de todas as sequências para 1GB (NuoDB MySQL, Drizzle e
TokuDB) ------------------------------------------------------------------------------------------------------------- 51
Figura 7.8 - Erro VoltDB, order join ---------------------------------------------------------------------------- 52
Figura 7.9 – Erro VoltDB, condição having-------------------------------------------------------------------- 52
Figura 7.10 – Erro VoltDB, criar vistas e pesquisas com subpesquisas ------------------------------------ 53
Figura 7.11 – Erro VoltDB, espaço para tabela temporária excedido-------------------------------------- 53
xii
Figura 7.12 – Média do tempo de execução para 1GB após executar as três sequências (VoltDB
MySQL, Drizzle e TokuDB) --------------------------------------------------------------------------------------- 53
Figura 7.13 – Desvio padrão para 1GB (VoltDB MySQL, Drizzle e TokuDB) ---------------------------- 54
Figura 7.14 – Tempo total de execução para 1GB (VoltDB MySQL, Drizzle e TokuDB) ---------------- 54
Figura 7.15 – Erro StormDB ------------------------------------------------------------------------------------- 55
Figura 7.16 – Média do tempo de execução para 1GB após executar as três sequências (StormDB
MySQL, Drizzle e TokuDB) --------------------------------------------------------------------------------------- 55
Figura 7.17 – Desvio padrão para 1GB (StormDB MySQL, Drizzle e TokuDB) -------------------------- 56
Figura 7.18 – Tempo total de execução para 1GB (StormDB MySQL, Drizzle e TokuDB) -------------- 56
Figura 7.19 – Utilização de memória pelo NuoDB e VoltDB ------------------------------------------------ 57
Figura 7.20 – Tempo de criação das tabelas para 10GB ----------------------------------------------------- 57
Figura 7.21 – Média dos tempos de execução para 10GB --------------------------------------------------- 59
Figura 7.22 – Tempo total de execução para 10GB ----------------------------------------------------------- 61
Figura 7.23 - Tempo total de execução para 10GB (StormDB MySQL, Drizzle e TokuDB) ------------- 62
Figura 7.24 – Desvio padrão para 10GB (StormDB MySQL, Drizzle e TokuDB) ------------------------ 62
Figura 7.25 – Tempo total de execução para 10GB (StormDB MySQL, Drizzle e TokuDB) ------------ 63
Figura F.1 – Tempos de execução na sequência 1 para 1GB ---------------------------------------------- 100
Figura F.2 - Tempos de execução na sequência 2 para 1GB ---------------------------------------------- 100
Figura F.3 - Tempos de execução na sequência 3 para 1GB ---------------------------------------------- 100
Figura F.4 – Sequência 1 para 1GB (NuoDB vsMysql,Drizzle e TokuDB) ------------------------------ 101
Figura F.5 - Sequência 2 para 1GB (NuoDB vsMysql,Drizzle e TokuDB) ------------------------------- 101
Figura F.6 - Sequência 3 para 1GB (NuoDB vsMysql,Drizzle e TokuDB) ------------------------------- 102
Figura F.7 - Sequência 1 para 1GB (VoltDB vsMysql,Drizzle e TokuDB) ------------------------------- 103
Figura F.8 - Sequência 2 para 1GB (VoltDB vsMysql,Drizzle e TokuDB) ------------------------------- 103
Figura F.9 - Sequência 3 para 1GB (VoltDB vsMysql,Drizzle e TokuDB) ------------------------------- 104
Figura F.10 – Sequência 1 para 1GB (StormDB vsMysql,Drizzle e TokuDB) --------------------------- 104
Figura F.11 - Sequência 2 para 1GB (StormDB vsMysql,Drizzle e TokuDB) --------------------------- 104
Figura F.12 - Sequência 3 para 1GB (StormDB vsMysql,Drizzle e TokuDB) --------------------------- 105
Figura G.1 - Sequência 1 para 10G --------------------------------------------------------------------------- 106
Figura G.2 - Sequência 2 para 10GB -------------------------------------------------------------------------- 106
Figura G.3 – Sequência 3 para 10GB ------------------------------------------------------------------------- 107
xiii
Figura G.4 - Sequência 1 para 10GB (StormDB MySQL, Drizzle e TokuDB) --------------------------- 108
Figura G.5- Sequência 2 para 10GB (StormDB MySQL, Drizzle e TokuDB) --------------------------- 108
Figura G.6 - Sequência 3 para 10GB (StormDB MySQL, Drizzle e TokuDB) --------------------------- 108
xiv
Índice de Tabelas
Tabela 5.1 - Caracterização das tabelas do TPC-H para 1GB e 10GB ------------------------------------ 33
Tabela 7.1 – Comparação das características técnicas dos Sistemas NewSQL --------------------------- 40
Tabela 7.2 – Tempos de carregamento de dados para 1GB em segundos ---------------------------------- 42
Tabela 7.3 – Tempos obtidos para a criação de chaves primárias para 1GB ----------------------------- 43
Tabela 7.4 – Tempos obtidos para a criação de chaves forasteiras para 1GB ---------------------------- 43
Tabela 7.5 – Desvio padrão para 1GB -------------------------------------------------------------------------- 47
Tabela 7.6 – Desvio padrão para 1GB (NuoDB MySQL, Drizzle e TokuDB) ------------------------------ 50
Tabela 7.7 – Tempo de carregamento de dados para 10GB-------------------------------------------------- 58
Tabela 7.8 – Tempos obtidos para a criação de chaves primárias para 10GB ---------------------------- 58
Tabela 7.9 – Tempos obtidos para a criação de chaves forasteiras para 10GB --------------------------- 58
Tabela 7.10 – Desvio padrão para 10GB ----------------------------------------------------------------------- 60
Tabela F.1 – Valores da pesquisa Q14 para 1GB ----------------------------------------------------------- 101
Tabela F.2 - Valores da pesquisa Q15 (NuoDB vsMysql,Drizzle e TokuDB) ---------------------------- 102
Tabela F.3 - Valores da pesquisa Q18 (NuoDB vsMysql,Drizzle e TokuDB) ---------------------------- 102
Tabela F.4 - Valores da pesquisa Q22 (NuoDB vsMysql,Drizzle e TokuDB) ---------------------------- 103
Tabela G.1 – Valores da pesquisa Q9 para 10GB ----------------------------------------------------------- 107
Tabela G.2 – Valores da pesquisa Q14 para 10GB --------------------------------------------------------- 107
xv
Bases de Dados NewSQL
Notação e Glossário
Notação e Glossário
ACID – Atomicidade, Consistência, Isolamento e Durabilidade
ANSI – American National Standard Institute
DBMS – Database Management System
FK (Foreign Key) – Chave forasteira
ISO – International Organization for Standards
MVCC – Multiversion concurrency control
NoSQL – Not Only SQL
OLTP – Online Transaction Processing
PK (Primary Key) – Chave primária
RDBMS – Relational Database Management System
Sharding – é um tipo de particionamento de bases de dados que separa bases de
dados de grande de dimensão em particiçoes individuais, rápidas e fáceis de gerir
chamadas dados shard.
Shared-nothing – é uma arquitectura de computação distribuída, em que cada nó é
independente e auto-suficiente. Não há partilha de memória e de armazenamento em
disco entre cada um dos nós existentes.
SGBD – Sistema de Gestão de Bases de Dados
SQL – Structured Query Language
xvii
Bases de Dados NewSQL
Capítulo 1
1 Introdução
Uma base de dados é um sistema que tem como principais finalidades: registar,
actualizar, manter e disponibilizar a informação relevante para a actividade de uma
organização. Os componentes que constituem uma base de dados são: a estrutura
lógica e física, através da qual a informação é organizada e o Sistema de Gestão de
Bases de Dados (SGBD), que assegura a gestão da informação (Carriço, 1996). Hoje
em dia ter a informação armazenada em bases de dados é vital para qualquer
organização.
As bases de dados surgiram no início dos anos 60 mas eram pouco práticas pois a
informação era guardada em ficheiros. Para facilitar a utilização das bases de dados
surgiram no início dos anos 70 os SGBD relacionais. Estes sistemas tornaram-se
bastante populares pois utilizam o modelo relacional, constituído por relações e
também devido ao surgimento da linguagem SQL (Structured Query Language), uma
linguagem de fácil utilização e bastante eficiente (Caldeira, 2006). Com este modelo
não existe redundância dos dados e existe mais flexibilidade, isto é, devido à
independência entre os dados e os programas qualquer alteração a um destes
elementos não obriga a uma mudança drástica no outro elemento.
A linguagem SQL foi criada em 1974 para ser utilizada nos SGBD. Apesar de terem
aparecido outras linguagens esta tornou-se a mais utilizada em todas as bases de dados
relacionais, por isso foi criado um padrão para SQL em 1986 pelo American National
Standard Institute (ANSI) e em 1987 pela International Organization for Standards
(ISO). Apesar de ter sido criado um padrão para SQL existem pequenas diferenças de
sintaxe nos diferentes produtos na utilização do SQL, dependendo de quem está a
vender o produto.
Para além dos vendedores de bases de dados não seguirem o padrão existente para o
SQL quando fabricam os seus produtos existe outro problema cada vez mais evidente
a falta de capacidade de armazenamento e processamento para toda a informação que
existe disponível hoje em dia. Para tentar solucionar esta dificuldade surgiram as
bases de dados NoSQL (Not Only SQL).
O NoSQL foi utilizado pela primeira vez em 1998 por Carlo Strozzi para designar
uma base de dados de código aberto que não tinha um interface SQL. O termo foi
1
Bases de Dados NewSQL
Capítulo 1
reintroduzido em 2009 por Eric Evans num evento onde se pretendia falar de bases de
dados distribuídas de código aberto (NoSQL, 2013). As bases de dados NoSQL não
utilizam o modelo relacional, ou seja, são não relacionais e não têm as garantias
ACID (Atomicidade, Consistência, Isolamento e Durabilidade) que as bases de dados
relacionais têm, o que se torna uma grande desvantagem, pois apesar de terem
capacidade de armazenamento, as bases de dados NoSQL não conseguem garantir que
os dados que armazenam são consistentes. Outra limitação destas bases de dados é
facto de não utilizaram a linguagem SQL, daí o seu nome NoSQL.
Devido a estas grandes limitações das bases de dados NoSQL em 2011 falou-se pela
primeira vez em bases de dados NewSQL (NewSQL, 2013). Estas soluções tal como
o NoSQL oferecem grande capacidade de armazenamento mas além disso oferecem
as vantagens de serem relacionais, utilizarem a linguagem SQL e terem todas as
garantias ACID.
Assim tendo em consideração o desenvolvimento que a Internet e os sistemas de
armazenamento têm tido e o aparecimento de novos sistemas de bases de dados, o
objectivo deste projecto é analisar este novo tipo de bases de dados designadas
NewSQL. Esta análise consistiu em investigar quais as suas vantagens, as suas
características e quais os sistemas de bases de dados NewSQL actualmente existentes.
Após toda a análise teórica das bases de dados NewSQL, foi efectuada uma avaliação
experimental dos principais sistemas NewSQL (Drizzle, TokuDB, NuoDB, VoltDB e
StormDB), utilizando para isso a benchmark TPC-H.
A avaliação dos sistemas NewSQL mostrou que estes sistemas têm realmente uma
grande capacidade de armazenamento e processamento sendo sem dúvida mais
rápidos que as antigas bases de dados relacionais.
Este projecto foi realizado no Laboratório de Investigação e Inovação Tecnológica
(LIIT) localizado nas instalações do Instituto Superior de Engenharia de Coimbra
(ISEC).
A estrutura deste relatório encontra-se dividida em oito capítulos:
1. Introdução – enquadramento do projecto e quais os objectivos deste projecto;
2. O problema do crescimento dos dados – história da Internet e como esta se
desenvolveu até chegar aos dias de hoje e o que levou à necessidade de bases
de dados com maior capacidade de armazenamento e processamento;
2
Bases de Dados NewSQL
Capítulo 1
3. Evolução do SQL ao NewSQL – história do SQL e como este se tem
desenvolvido até à criação dos sistemas NewSQL. Apresentamos também as
motivações que levaram à criação destes novos sistemas;
4. Sistemas NewSQL – descrição dos sistemas NewSQL existentes e a que
categoria pertencem; apresentamos também detalhadamente os sistemas que
foram testados durante a realização deste projecto;
5. Ambiente Experimental – explicamos o ambiente em que os vários sistemas
NewSQL foram testados, a benchmark utilizada para testar os sistemas e quais
as características que era pretendido avaliar nos diversos sistemas;
6. Principais dificuldades – dificuldades que surgiram ao longo da realização
deste projecto e como resolvemos essas mesmas dificuldades;
7. Avaliação Experimental – avaliação de 5 bases de dados NewSQL utilizando
o benchmark TPC-H e a respectiva análise dos resultados.
8. Conclusões e trabalho futuro – principais conclusões retiradas da
investigação realizada durante o projecto assim como dos testes realizados, e
que trabalho se pode fazer futuramente nesta área.
3
Bases de Dados NewSQL
4
Capítulo 1
Bases de Dados NewSQL
Capítulo 2
2 O problema do crescimento dos dados
Em 1958 o Departamento de Defesa dos Estados Unidos da América criou a
Advanced Research Projects Agency (ARPA) para estabelecer a sua liderança em
ciência e tecnologia aplicada aos militares, isto veio a ser a “semente” da Internet. Os
E.U.A criaram esta agência em resposta ao lançamento do satélite Sputnik por parte
da Rússia, em 1957 (Zakon, 2011).
Poucos anos depois começaram a ser discutidos os primeiros planos da ARPANET
(Advanced Research Projects Agency Network), tendo sido criada em 1969. A
ARPANET foi uma das primeiras redes da história da Internet actual e consistia numa
rede de quatro computadores que ligava quatro universidades entre si. Essas quatro
universidades eram:

SRI - Stanford Research Institute's Augmentation Research Center;

UCLA - University of California, Los Angeles;

UCSB - University of California, Santa Barbara;

Utah - University of Utah's Computer Science Department.
Com o passar dos anos esta rede foi aumentando, em 1971 já era constituída por 15
nós com 23 computadores. Em 1973 foi feita a primeira ligação internacional através
da ARPANET à University College of London, Inglaterra.
Em 1983, a ARPANET foi dividida em duas redes: a MILNET, que servia as
necessidades militares, e a ARPANET, que suportava a investigação.
No ano de 1990 o Departamento de Defesa dos E.U.A decidiu acabar com a
ARPANET, substituindo-a pela rede da NSF (National Science Foundation), que mais
tarde passou a ser a NSFNET (National Science Foundation Network). Esta rede
popularizou-se em todo o mundo com a denominação Internet.
Para a expansão da Internet foi muito importante a criação da World Wide Web
(WWW). A WWW foi criada no CERN (Centre Européen por la Recherche
Nucléaire), por Tim Berners-Lee.
A Internet transformou-se num sistema mundial público, de redes de computadores,
ao qual qualquer pessoa ou computador, previamente autorizado, pode conectar-se.
5
Bases de Dados NewSQL
Capítulo 2
Obtida a conexão o sistema permite a transferência de informação entre
computadores. A infra-estrutura utilizada pela Internet é a rede mundial de
telecomunicações.
Com a globalização da Internet o volume de informação gerado mais que duplicou de
dois em dois anos, segundo a Lei de Moore (Moore, 1965). A lei de Moore surgiu em
1965 através de um conceito estabelecido por Gordon Earl Moore e diz que o poder
de processamento dos computadores duplica a cada dois anos. Assim mais poder de
processamento significa mais capacidade para gerar informação.
Segundo o estudo da IDC’s Digital Universe, de Junho de 2011, os dados criados em
2010 foram cerca de 1.200 exabytes, e vão continuar a crescer até aos 8.000 exabytes,
em 2015, sendo a Internet/Web o principal gerador e consumidor de dados, como é
mostrado na figura 2.1. Exabyte é uma unidade de armazenamento de dados em
computador,
260
bytes.
O
prefixo
exa
é
um
termo
decimal.
260 são
1,152,921,504,606,846,976 bytes em decimal, um pouco mais que 1018 bytes como é
explicado em (Rouse, 2005).
Figura 2.1- Estimativa dos dados gerados em todo mundo entre 2005 e 2011, em
exabytes, adaptado de (Gantz & Reinsel, 2011)
Toda esta quantidade de informação gerada pela Internet e por todos os meios de
comunicação que nos rodeiam levaram a um conceito designado por Big Data, termo
utilizado para descrever o crescimento, a disponibilidade e o uso exponencial de
informações estruturadas e não estruturadas. Volume, variedade e velocidade são as
três propriedades ou dimensões que definem este termo. Volume refere-se à
quantidade de dados, variedade ao número de tipo de dados e velocidade refere-se à
velocidade de processamento dos dados (Rouse, 2013). Como se pode ver na figura
2.2, estes 3 Vs estão a crescer rapidamente.
6
Bases de Dados NewSQL
Capítulo 2
Figura 2.2 – Crescimento dos 3 Vs (Rouse, 2013)
Nem todos os dados são úteis para fazer a análise de Big Data, no entanto há alguns
tipos de dados que estão particularmente desenvolvidos e que são bastante
interessantes para esta análise, como por exemplo (Big Data in 2020, 2012):

Videovigilância – normalmente são dados genéricos (data, hora, localização)
que são anexados automaticamente a um ficheiro de vídeo. Contudo, como a
utilização das câmaras IP continua a crescer, esta é uma boa oportunidade para
se adicionar mais inteligência à câmara e assim capturar imagens, analisá-las e
classificá-las em tempo real. Logo será possível, por exemplo, agilizar as
investigações criminais, definir um padrão de trânsito para os condutores e,
obviamente, melhorar a inteligência militar;

Dispositivos médicos – no futuro, sensores de todos os tipos (incluindo os que
podem ser implantados no corpo) irão medir a biometria vital e não vital,
acompanhar a eficácia da medicina, relacionar a actividade física com a saúde
e monitorizar possíveis surtos virais, tudo isto em tempo real;

Entretenimento e média social – tendências com base em multidões ou
grandes grupos de pessoas que podem ser uma grande fonte de Big Data para
ajudarem a trazer ao mercado a “próxima grande coisa”. Ajuda também a
definir possíveis vencedores e vencidos nos mercados de acções e até mesmo a
7
Bases de Dados NewSQL
Capítulo 2
prever resultados de eleições. Tudo isto com base na informação publicada
pelos utilizadores em redes sociais e outros tipos de sites de livre acesso.

Imagens do consumidor – podemos dizer muito acerca de nós mesmos
quando publicamos fotografias nossas ou da nossa família ou amigos. A
imagem utilizada vale mais que mil palavras, e o início da Big Data introduziu
um multiplicador significativo. A chave para este tipo de dados é a introdução
de sofisticados algoritmos que permitem a identificação e análise das imagens
em tempo real.
Um exemplo do grande volume de dados gerados na Internet é o YouTube que tem
mais de mil milhões de utilizadores individuais que visitam o seu site todos os meses,
onde são visualizadas mais de 6 mil milhões de horas por mês, o que equivale quase
uma hora por cada pessoa na Terra e mais 50% em relação ao ano anterior e onde são
carregadas 100 horas de vídeo por minuto (YouTube, s.d.).
Desde a sua criação o Twitter demorou 3 anos 2 meses e 1 dia para atingir o
bilionésimo tweet, no entanto em Julho deste ano eram precisos apenas 5 dias para
que isso acontecesse; por segundo são partilhados 9.100 novos tweets e a média de
tweets por dia é de 58 milhões e são feitas 2.1 biliões de pesquisas (Twitter Statistics,
2013).
Em Junho deste ano existiam no Facebook 50.000.000 de páginas e a cada vinte
minutos eram partilhados 1.000.000 de links, enviavam-se 2.000.000 de pedidos de
amizade e eram enviadas 3.000.000 de mensagens, (Facebook Statistics, 2013).
Mas não são só as redes sociais que geram uma enorme quantidade de informação.
Actualmente existem sensores que ligados à Internet permitem monitorizar trânsito,
disponibilidade de estacionamento, poluição do ar, qualidade das estradas e muito
mais, tudo em tempo real gerando por isso enormes quantidades de dados.
O sensor mais comum e poderoso é o telemóvel. Com GPS e acesso à Internet os
smartphones são uma importante fonte de informação para fornecer, por exemplo,
dados acerca do trânsito. O Google Maps, por exemplo, utiliza muito dados recolhidos
através de utilizadores que utilizam telemóvel (Autopia Blog, 2011).
8
Bases de Dados NewSQL
Capítulo 2
A continuidade da disponibilidade dos dados tornou-se mais importante que nunca.
Vivemos num tempo em que esperamos que os dados estejam disponíveis 24h por dia,
7 dias por semana e a partir de qualquer local.
Em (Venkatesh & S, 2012) é referido que este crescimento está a levar a que a
capacidade de armazenamento esteja a esgotar-se, e leva ao aparecimento de novos
sistemas de gestão de informação onde os dados são armazenados de forma
distribuída mas manipulados como se estivessem todos na mesma máquina, tal como
mostra a figura 2.3.
Figura 2.3 - Armazenamento distribuído dos dados (Venkatesh & S, 2012)
Para além de ser necessário resolver o problema do crescente volume de dados
gerados, é necessário ter em conta os requisitos de desempenho para a assegurar que
os dados são processados dentro do tempo pretendido. Infelizmente, o aumento do
poder de processamento não se traduz num acesso mais rápido aos dados, o que acaba
por se reflectir nos sistemas de bases de dados existentes.
Isto conduz à terceira dimensão da alta disponibilidade e durabilidade dos dados, ou
seja, temos de ter em consideração a alta disponibilidade sem qualquer falha, o que
tem sido um ponto forte das telecomunicações. Estes desafios têm gerado uma onda
de novas soluções de processamento de bases de dados, que gerem os dados de
maneira estruturada e não-estruturada.
Michael Stonebraker no seu artigo (Stonebraker, 2012) aborda as possíveis soluções
de processamento:
9
Bases de Dados NewSQL

Capítulo 2
Tradicionais OLTP (Online Transaction Processing) – Estas soluções
registam todas as transacções efectuadas na organização, no entanto não são a
solução ideal para o problema de armazenamento existente por dois motivos.
Primeiro, a quantidade de dados que se pretende carregar para a base de dados
pode exceder as capacidades do velho SQL; segundo, não são capazes de
proporcionar pesquisas e análises aos dados em tempo real;

NoSQL (Not Only SQL) – Os fornecedores deste tipo de solução afirmam
que podem proporcionar uma grande escalabilidade e alto desempenho através
da diminuição ou até mesmo da eliminação do suporte a transacções,
eliminando o SQL. Esta solução tem também dois problemas. Primeiro, a
grande maioria das aplicações pretende bases de dados ACID (Atomicidade,
Consistência, Isolamento e Durabilidade), ou seja, querem maior capacidade
de armazenamento mas também querem garantir a integridade e consistência
dos dados e o NoSQL não garante esta consistência; segundo, a ausência de
SQL torna as pesquisas de dados mais trabalhosas;

NewSQL – Soluções que começam a aparecer e que preservam o SQL e
oferecem também grande escalabilidade e alto desempenho enquanto
preservam a noção de ACID nas transacções.
Tendo em conta a análise de Michael Stonebraker as soluções NewSQL parecem ser
as melhores para o problema de armazenamento e processamento que existe
actualmente.
No capítulo seguinte iremos fazer a análise histórica desde o surgimento do SQL até à
criação das bases de dados NewSQL.
10
Bases de Dados NewSQL
Capítulo 3
3 Evolução do SQL ao NewSQL
Neste capítulo vamos explicar como surgiu o SQL e como os sistemas que utilizam
esta linguagem se foram desenvolvendo até chegarmos ao NewSQL.
A tecnologia de bases de dados relacionais foi inventada em 1970 por Edgar Frank
Codd, quando trabalhava para a IBM, onde demonstrou a utilidade e funcionalidade
trazida por esta nova tecnologia (Codd, 1970). Juntamente com esta proposta foi
desenvolvida a linguagem SQL - Structured Query Language (Chamberlin e Boyce,
1974), que se tornou a linguagem padrão na manipulação de dados armazenados em
bases de dados relacionais (Plew & Stephens, 2002).
Embora as ideias de Codd fossem marcantes, a IBM decidiu não as implementar
imediatamente. No entanto, outros grupos aperceberam-se das publicações de Codd e
começaram a trabalhar para pôr em prática as suas ideias.
Ingres foi a primeira base de dados relacional não-comercial desenvolvida em 1974
por um grupo da Universidade da Califórnia.
A primeira base de dados relacional comercial foi a Oracle V2 desenvolvida em 1979
pela Software Relational, que mais tarde passou a ser a Oracle Corporation. Poucas
semanas depois a IBM também lançou um novo sistema de bases de dados, o System
R, que utilizava uma nova linguagem de pesquisas, o SEQUEL. Em 1981 lançaram o
SQL/DS e em 1983 lançaram o DB2, principal produto RDBMS (Relational Database
Management System) da IBM até aos dias de hoje.
O SQL tornou-se a linguagem mais utilizada em bases de dados relacionais pelas
enormes vantagens que tem para quem utiliza esta linguagem (More Process, 2013):

É possível executar o SQL em computadores, portáteis, servidores e até
mesmo em telemóveis; e é muito fácil mover de um dispositivo para outro,
bases de dados que utilizem SQL;

A maioria dos vendedores de DBMS (Database Management System) utiliza
SQL nos seus produtos;

Existe um padrão para a linguagem SQL criado pela ANSI e ISO;

É a linguagem mais utilizada em bases de dados relacionais;
11
Bases de Dados NewSQL

Capítulo 3
É muito fácil aprender e entender o SQL pois as suas pesquisas consistem
principalmente em declarações em inglês;

É uma linguagem interactiva que pode ser utilizada para comunicar com bases
de dados e obter respostas a questões complexas em pouco tempo;

O SQL pode ser ao mesmo tempo tanto uma linguagem de programação como
uma linguagem interactiva;

É uma linguagem completa, isto é, o SQL é utilizado tanto para criar bases de
dados como gerir a segurança da mesma. Assim como para actualizar,
recuperar ou partilhar informação da base de dados com os utilizadores;

Dependendo das permissões do utilizador que está a utilizar a base de dados é
possível mostrar a cada um informação diferente do conteúdo da base de
dados através da criação de vistas;

É uma linguagem cliente /servidor, que serve para ligar um servidor de bases
de dados a um computador cliente que apenas pretende interagir com a base de
dados;

É também uma linguagem dinâmica pois permite a alteração do conteúdo da
base de dados mesmo quando vários utilizadores estão a aceder à base de
dados;

Desde há algum tempo o SQL suporta também a programação orientada a
objectos.
Apesar de ter todas estas vantagens o SQL tem também muitas limitações que são
abordadas na secção 3.4, no entanto a maior desvantagem do SQL é que apesar do
padrão criado pela ANSI e ISO nem todos os vendedores de bases de dados utilizam
esse padrão, isto é, utilizam o SQL nas suas bases de dados mas não utilizam o padrão
na sua totalidade o que é torna as bases de dados de difícil utilização pois cada vez
que muda de produtos é necessário aprender novos conceitos para aceder à base de
dados.
3.1 NoSQL
O NoSQL foi utilizado pela primeira vez em 1998 por Carlo Strozzi para designar
uma base de dados de código aberto que não tinha um interface SQL. O termo foi
12
Bases de Dados NewSQL
Capítulo 3
reintroduzido em 2009 por Eric Evans num evento onde se pretendia falar de bases de
dados distribuídas de código aberto. Em (NoSQL, s.d.) é definido como sendo a
próxima geração de bases de dados que tem as seguintes características: ser não
relacional, distribuída, open source e escalável horizontalmente. A intenção original
era ter uma base de dados web escalável e moderna. As características que mais vezes
se aplicam são: não ter esquemas de tabelas fixas, fácil suporte de replicação, API
(Application Programming Interface) simples, eventualmente consistente (BASE –
Basically Available, Soft state, Eventual consistency) mas não é ACID.
Muitos sistemas empresariais que tratam dados de grande importância (por exemplo,
sistemas financeiros) também têm necessidade de aumentar o seu tamanho mas são
incapazes de utilizar soluções NoSQL (aplicações que utilizam bases de dados que
seguem a definição anteriormente apresentada para NoSQL), porque as mesmas não
podem oferecer requisitos transaccionais robustos e consistentes. Anteriormente, as
únicas soluções possíveis para estas empresas passava por comprar uma mais máquina
com maior capacidade ou desenvolver um middleware personalizado que distribuísse
as consultas feitas na tradicional DBMS (Database Management System). Estas
soluções são demasiado dispendiosas e por isso não são solução para muitas das
empresas.
Apesar de todos os benefícios que as bases de dados NoSQL podem oferecer têm
também desvantagens e quando pretende fazer a transição de uma base de dados
relacional para uma base de dados NoSQL é necessário analisar muito e planear bem
essa transição porque pode revelar-se uma mudança bastante difícil e trabalhosa uma
vez que as bases de dados NoSQL, como o próprio nome indica, não utilizam
linguagem SQL.
Para além de a transição de bases de dados relacionais para bases de dados NoSQL ser
uma tarefa bastante difícil existem ainda outras desvantagens que nos devem fazer
pensar antes de avançar para uma mudança tão radical (Silva, 2010):
 Modelos de integridade fracos;
 Eventualmente consistente, ou seja, as bases de dados NOSQL não têm
garantias de que os dados sejam consistentes. O que significa que as bases de
dados NoSQL não são ACID;
 Transacções só podem ser feitas através de código;
13
Bases de Dados NewSQL
Capítulo 3
 Pesquisas à base de dados são muito complexas;
 Não existe uma linguagem padrão;
 Controlo de acesso desorganizado.
Por causa de todas as desvantagens que o NoSQL apresenta começaram a surgir
novos sistemas de bases de dados, sistemas NewSQL, que voltam ao original modelo
relacional e ao uso da linguagem padrão SQL mas que pretendem oferecer alguns dos
benefícios das bases de dados NoSQL como a escalabilidade e a capacidade de
processamento.
3.2 NewSQL
O termo NewSQL foi utilizado pela primeira vez pelo analista Matthew Aslett, do 451
Group, em 2011 no seu relatório “NoSQL, NewSQL and Beyond”. Matthew Aslett
utilizou o termo NewSQL para classificar a nova alternativa de sistemas de bases de
dados.
O NewSQL é descrito em (Aslett, 2011) como sendo um atalho para os vários
fornecedores das novas alternativas de sistemas de bases de dados de alta performance
e escaláveis. Antes referiram-se a estes produtos como “ScalableSQL” para os
diferenciar dos outros produtos de bases de dados relacionais. Uma vez que esta
implica uma escalabilidade horizontal, que não é necessariamente uma característica
de todos os produtos, adoptaram o nome “NewSQL”.
Aslett esclarece também, que tal como o NoSQL, o NewSQL não é para ser traduzido
literalmente: o que é novo no NewSQL são os fornecedores, e não o SQL.
O NewSQL é um conjunto de vários fornecedores da nova alternativa de sistemas de
bases de dados SQL, de alto desempenho e escalável. Estes fornecedores têm vindo a
desenhar soluções que tenham os benefícios do modelo relacional da arquitectura
distribuída, e que melhore o desempenho das bases de dados relacionais para que o
aumento de tamanho das bases de dados não seja um problema (Venkatesh & S,
2012).
Em (NewSQL, 2013) é explicado que o NewSQL é também uma classe de gestão de
bases de dados relacionais que visa proporcionar o mesmo desempenho que os
sistemas NoSQL para carregamentos de OLTP e ainda assim manter as garantias
14
Bases de Dados NewSQL
Capítulo 3
ACID das bases de dados tradicionais. Pretende-se ainda eliminar as tarefas que estão
sujeitas a erros de gestão como por exemplo o sharding manual, sem ter de
interromper o funcionamento da base de dados (Mehta, 2013). Sharding é um tipo de
particionamento de bases de dados que separa bases de dados de grande dimensão em
partições individuais, rápidas e fáceis de gerir chamadas dados shard (figura 3.1).
Assim o sharding manual implica fazer o particionamento das bases de dados
manualmente sem recorrer a qualquer aplicação para o fazer.
Figura 3.1 – Sharding de uma base de dados
Na apresentação do relatório do grupo de investigação 451 Group (Aslett 2, 2011),
Matthew Aslett diz que as bases de dados NewSQL foram projectadas para atender os
requisitos de escalabilidade das arquitecturas distribuídas ou para melhorar o
desempenho de tal forma que a escalabilidade horizontal deixe de ser uma
necessidade, incluindo novos mecanismos de armazenamento MySQL, tecnologias de
sharding transparente e bases de dados completamente novas. O NewSQL é assim
utilizado para descrever o desenvolvimento de novas bases de dados relacionais e
serviços desenhados para que as arquitecturas distribuídas tenham todos os benefícios
do modelo relacional, e melhorando o desempenho das bases de dados relacionais
para que já não seja necessário escalabilidade horizontal.
Logo pode dizer-se que o NewSQL pretende preservar o SQL, oferecer alto
desempenho e escalabilidade enquanto preserva a noção de ACID para transacções.
15
Bases de Dados NewSQL
Capítulo 3
3.3 Porquê criar o NewSQL?
O SQL tem muitos problemas quer ao nível de gestão de bases de dados quer ao nível
da linguagem que permite aceder às bases de dados, tais como a escalabilidade, o
desempenho e o tamanho reduzido das bases de dados. Com o aumento do volume de
dados as bases de dados SQL estão a perder poder de processamento e a ficar muito
aquém do desempenho esperado. A capacidade de armazenamento das bases de dados
SQL está a esgotar-se. Para além disso tem também o problema de ter certas coisas
que mudam de produto para produto e fornecedor para fornecedor. Em seguida são
apresentados alguns dos problemas existentes no SQL e que o NewSQL pretende
solucionar (Sourceforge, s.d.)
3.4 Problemas do SQL
Tal como já foi referido antes, o SQL não possui só vantagens também tem limitações
(Sourceforge, s.d.). O principal problema do SQL é a existência de diferenças nas
regras de sintaxe em cada produto, mesmo nas coisas mais simples. Estas diferenças
dificultam quem está a começar a utilizar o SQL pois não consegue detectar
rapidamente estas diferenças.
Quando se utilizam diferentes bases de dados num mesmo trabalho é possível que o
programador se depare com o problema da impossibilidade de importar os diferentes
tipos de dados de uma base de dados para outra. Para além disso não é possível
utilizar dados com um tamanho qualquer pois o SQL tem restrição no tamanho dos
tipos de dados, enquanto, por exemplo no Java não há restrições. Estas restrições
podem levar a perdas de tempo porque os programadores no início definem colunas
varchar com um tamanho pequeno, que podem vir a ser insuficientes e leva a que
mais tarde seja necessário alterar o tamanho.
Outro problema do SQL é não existir um padrão para incremento automático de
colunas/sequências e não ser fácil fazer pesquisas nas bases de dados quando se
pretende procurar por algum campo que esteja a NULL.
Quando se pretende utilizar o SQL para integrar noutra linguagem de programação é
necessário escolher com cuidado a linguagem de programação que se vai utilizar
porque o SQL é difícil de integrar numa linguagem de programação como o Java.
16
Bases de Dados NewSQL
Capítulo 3
Se pretender fazer a distinção entre letras maiúsculas e minúsculas, no SQL, não vai
conseguir fazê-lo pois não é case sensitive, isto é, tanto faz usar letras maiúsculas
como minúsculas que o SQL não as diferencia. E para além disto também permite
espaços nos nomes. Outras linguagens de programação não suportam espaços nos
nomes pois parece não haver uma boa razão para isso.
Outra dificuldade do SQL é que se uma tabela tiver muitas colunas é necessário uma
contagem de colunas, ou seja, é necessário saber todas as colunas existentes.
Exemplo, Insert INTO (muitas colunas) Values (muitos valores), o que pode ser muito
demorado quando se quer inserir muitos dados. Para além de ter se saber todas as
colunas existentes também não é fácil comparar linhas completas, porque é necessário
listar a coluna completa.
Não existe uma maneira padrão de verificar se uma tabela (índice, etc.) já existe, o
que por vezes poderia facilitar a vida do gestor da base de dados. Assim como não
existe sintaxe para gerir a base de dados como um todo e um comando UPSERT
padrão. Insert se a coluna não existir e Update se existir.
Os diferentes produtos que existem no mercado têm diferentes mecanismos de
namespace (esquemas, catálogos, bases de dados). O namespace contém um conjunto
de identificadores (nomes) que permitem a desambiguação de identificadores
homónimos de namespaces diferentes.
3.5 Características das soluções NewSQL
Segundo (Venkatesh & S, 2012) as principais características das soluções NewSQL
são:

O SQL é o principal mecanismo de interacção com as aplicações;

Suporta ACID para as transacções;

Mecanismo de controlo de não-bloqueio simultâneo, para que a leitura em
tempo real não entre em conflito com a escrita, e assim fazê-los parar;

Uma arquitectura que proporcione um desempenho mais alto por nó do que as
tradicionais soluções RDBMS;

Uma arquitectura shared-nothing, expansiva, capaz de funcionar no maior
número de nós sem bloquear. Arquitectura shared-nothing é uma arquitectura
17
Bases de Dados NewSQL
Capítulo 3
de computação distribuída, em que cada nó é independente e auto-suficiente.
Não há partilha de memória e de armazenamento em disco entre cada um dos
nós existentes.
Com estas características espera-se que o NewSQL seja mais rápido que os
tradicionais sistemas RDBMS.
3.6 Categorias do NewSQL
Embora os sistemas NewSQL variem muito na sua arquitectura interna, há duas
características distintas que são comuns a todos eles e que são o suporte ao modelo de
dados relacional e o uso de SQL como principal interface.
Os sistemas NewSQL podem ser agrupados em quatro categorias:

Novas Arquitecturas;

Novos motores de armazenamento MySQL;

Sharding Transparente;

NewSQL-as-a-Service.
3.6.1 Novas Arquitecturas
A primeira categoria sistemas de NewSQL são plataformas de bases de dados
completamente novas. São projectados para funcionar num grupo distribuído de nós
shared-nothing, uma arquitectura em que cada nó é independente e auto-suficiente, ou
seja, nenhum dos nós partilha memória ou espaço em disco. Os nós normalmente
possuem um subconjunto de dados. As consultas SQL são divididas em fragmentos de
consultas e enviadas para os nós que possuem os dados. Estas bases de dados têm a
capacidade de aumentar o seu tamanho linearmente quando são acrescentados nós
adicionais.
Esta categoria está dividida em duas subcategorias, que são:

Bases de dados tradicionais – Mantêm as funcionalidades das tradicionais
bases de dados, manipulando todos os tipos de consultas. As bases de dados
são completamente reformuladas assumindo que assentam num sistema
distribuído e incluem componentes tais como controlo de concorrência
18
Bases de Dados NewSQL
Capítulo 3
distribuída, controlo de fluxo e processador de consultas distribuídas. Google
Spanner e Clustrix são exemplos deste tipo de bases de dados.

Bases de dados em memória – As aplicações alvo destes sistemas NewSQL
são caracterizadas por ter um grande número de transacções que:
o 1 – São de curta duração;
o 2 – Trabalham com um pequeno subconjunto de dados através de
índices (não existe análise à tabela completa);
o 3 – São repetitivas, isto é, fazem sempre as mesmas consultas mas com
dados diferentes.
Estes sistemas NewSQL atingem um alto desempenho e têm grande capacidade de
mudar de tamanho e fazem-no contrariando muita da herança recebida da arquitectura
do sistema System R, que é um sistema de bases de dados construído através de um
projecto de pesquisa no Laboratório San Jose Research, da IBM, no início do ano de
1974. Dois exemplos deste tipo de sistemas são o VoltDB e o SQLFire (NewSQL,
2013)
3.6.2 Novos motores de armazenamento MySQL
A segunda categoria são mecanismos de armazenamento altamente optimizados para
o MySQL. Estes sistemas têm o mesmo interface de programação que o MySQL, mas
aumentam o seu tamanho melhor que os motores incorporados, como o InnoDB.
Exemplos destes novos mecanismos de armazenamento incluem o ScaleDB, TokuDB,
MemSQL e Akiban (NewSQL, 2013).
3.6.3 Sharding Transparente
Este sistema tem uma camada intermédia de sharding (sharding middleware) que
divide automaticamente as bases de dados em múltiplos nós. Exemplos destes tipos de
sistemas são dbShards, Scalearc e ScaleBase (NewSQL, 2013).
3.6.4 NewSQL-as-a-Service
Um software as-a-Service é uma forma de distribuição e comercialização desse
mesmo software. Neste modelo o fornecedor do software responsabiliza-se por toda a
estrutura necessária para a disponibilização do sistema (servidores, conectividade,
19
Bases de Dados NewSQL
Capítulo 3
cuidados com a segurança da informação) e o cliente utiliza o software via internet,
tendo apenas de pagar pela utilização do serviço.
Não é necessariamente a tecnologia utilizada que determina o modelo. O software
utilizado pode ser 100% web (utilizado via browser) ou pode ter alguma instalação
local (como antivírus ou sistemas de backup). As características principais são a não
aquisição das licenças (mas sim pagar pelo seu uso como um "serviço") e a total
responsabilidade do fornecedor pela disponibilização do sistema em produção.
Um exemplo deste tipo de sistemas é o StormDB.
No capítulo seguinte iremos fazer uma breve descrição das características de todos os
sistemas testados durante a realização deste projecto e ainda apresentar o ecossistema
NewSQL.
20
Bases de Dados NewSQL
Capítulo 4
4 Sistemas NewSQL
Neste capítulo mostramos todos os sistemas NewSQL que existem actualmente mas
abordamos principalmente os sistemas que foram testados dando a conhecer cada um
deles. Fazemos a apresentação da base de dados MySQL, que apesar de não ser um
sistema NewSQL, é a base de dados open source mais utilizada no mundo (DBEngines Ranking, 2013), sendo por isso utilizada como referência na avaliação das
bases de dados NewSQL.
Na figura 4.1 podemos ver o ecossistema NewSQL, isto é, como estão distribuídos os
vários sistemas pelas categorias NewSQL.
Figura 4.1 – Ecossistema NewSQL, (451 Group, 2012)
Como é possível ver existem quatro grandes categorias por onde se distribuem os
diversos sistemas NewSQL:

Novas bases de dados (New Databases);

Motores de armazenamento (Storage engines);

Clustering/Sharding;

NewSQL-as-a-Service;
Os sistemas testados e que iremos descrever de seguida pertencem às categorias New
Databases (Drizzle, VoltDB, NuoDB), Storage engines (TokuDB) e NewSQL-as-aService (StormDB)
21
Bases de Dados NewSQL
Capítulo 4
4.1 MySQL
O MySQL foi criado em 1995 por David Axmark, Allan Larsson and Michael
"Monty" Widenius da empresa MySQL AB e o seu site é http://www.mysql.com/.
Actualmente o MySQL é propriedade da Oracle Foundation.
Um dos grandes objectivo para o MySQL é que este seja:

A melhor base de dados e a mais utilizado em todo o mundo;

Disponível e acessível para todos;

Rápido, seguro e confiável através de pequenas melhorias;

Fácil de usar;

Livre de erros.
A versão testada do MySQL foi a que estava disponível quando os testes foram
realizados, a 5.6.13. De referir que a partir da versão 5.6 o MySQL foi bastante
melhorado em relação às versões anteriores em aspectos, tais como (Ulin & Young,
2013):

Performance e escalabilidade:
o Aumentou para 48 CPU Threads. Threads são as sequências de
instrução que são executadas num programa;

Em relação à versão 5.5 a performance aumentou 230%;

INNODB, módulo de armazenamento que oferece transacções do tipo ACID:

Melhor rendimento nas transacções e mais disponibilidade;

Optimização:
o Melhor tempo na execução de consultas e melhor ajuste das consultas;
o Melhor desempenho, disponibilidade e integridade dos dados;

Nova Funcionalidade:
o Acesso NoSQL para INNODB.
Com estas melhorias significativas pretendeu-se eliminar os erros existentes nas
versões anteriores e ainda melhorar o desempenho do MySQL.
Na figura 4.2 é mostrado o interface do MySQL.
22
Bases de Dados NewSQL
Capítulo 4
Figura 4.2 – Interface do MySQL no Ubuntu
4.2 Drizzle
O Projecto Drizzle teve o seu início em 2008 e está disponível em
http://www.drizzle.org/. O Drizzle é uma base de dados transaccional, relacional e
open source que deriva da base de dados MySQL. A versão utilizada nos testes foi a
7.2.4-alpha.
O Drizzle foi desenhado para ambientes modernos de 64 bits, arquitectura multi-core,
com gigabytes de memória e para executar várias transacções ao mesmo tempo,
(Drizzle Documentation, 2010).
Embora o Drizzle seja uma derivação do MySQL não foi feito para o substituir mas
sim para atrair os utilizadores que querem a confiabilidade, bases de dados ACID e a
fácil utilização que o MySQL proporciona mas não precisam de todos os recursos que
este tem como por exemplos, procedimentos, triggers ou vistas.
As principais diferenças entre Drizzle e o MySQL são as seguintes, (Getting Started
with Drizzle and PHP, 2009):

Motor de armazenamento é o InnoDB em vez do MyISAM;

Suporta menos tipos de dados;

Utiliza um protocolo diferente de comunicação cliente/servidor;

Suporta uma arquitectura de módulos extensível que permite aos
programadores compilar apenas os módulos necessários (muito parecido com
o Apache ou com o PHP).
23
Bases de Dados NewSQL
Capítulo 4
O Drizzle está optimizado para ter várias conexões em simultâneo à base de dados; e
não é possível utilizá-lo em plataformas Windows.
A equipa que programou o Drizzle retirou código que achava desnecessário do
MySQL e converteu o restante código para a linguagem C++ e para bibliotecas mais
modernas.
Em termos técnicos, o Drizzle é baseado num micro-kernel projectado para bases de
dados a que se possam acrescentar novos módulos sempre que necessário. E os seus
objectivos relacionais e de durabilidade estão construídos no kernel como projecto
padrão.
O Drizzle suporta um variado número de interfaces como plugins e assim o kernel faz
o menos possível e é o mais claro possível para os utilizadores. Desta forma é
permitido aos utilizadores aumentar a base de dados escrevendo simples plugins.
Historicamente, os servidores de bases de dados é que definem a infra-estrutura – o
utilizador deve utilizar o sistema de autenticação e de login existentes. O Drizzle tenta
uma abordagem diferente, tem como objectivo a integração com a infra-estrutura
existente tornando-se parte dela e não uma ilha.
Na figura 4.3 é mostrado o interface do Drizzle.
Figura 4.3 – Interface do Drizzle
4.3 TokuDB
O TokuDB pertence à empresa Tokutek e a sua primeira versão open source foi
lançada em Abril de 2013, o seu site é http://www.tokutek.com/. A versão do TokuDB
utilizada para executar os testes foi a 5.5.30-tokudb-7.0.4.
24
Bases de Dados NewSQL
Capítulo 4
O TokuDB é um mecanismo de armazenamento para MySQL que foi especialmente
criado para ter um alto desempenho em carregamentos de escrita intensiva, utilizando
para isso a indexação Fractal Tree, (TokuDB, s.d.).
A indexação Fractal Tree implementa as mesmas operações que a indexação B-Tree,
forma mais comum de indexação. A diferença está na performance, pois a Fractal
Tree substitui I/O (entradas/saídas) aleatórias por I/O sequenciais; isto é feito para que
a largura de banda do disco tenha uma taxa de utilização máxima, mesmo quando a
base de dados cresce. Como resultado é possível ter mais índices sem haver perda de
desempenho; quanto maior for a tabela mais vantagem o TokuDB consegue obter em
relação ao mecanismo de armazenamento B-Tree, ou seja, mesmo em grande tabelas o
TokuDB oferece um bom desempenho sem particionamento ou sharding pois foi
projectado para tabelas muito grandes.
TokuDB é escalável, ACID e tem um mecanismo de armazenamento compatível com
MVCC (Multiversion concurrency control) que proporciona melhorias em consultas
através de índices. MVCC é um método de controlo de concorrência normalmente
utilizado em sistemas de gestão de bases de dados que proporciona simultaneamente
acesso às bases de dados e às linguagens de programação para implementação de
memória transaccional.
As principais vantagens do TokuDB em relação ao motor de armazenamento MySQL
são as seguintes, (TokuDB Documentation, n.d.):

Fazer inserções e pesquisas mais rapidamente em condições reais;

Escalabilidade máxima, isto é, a base de dados pode ter muitos terabytes de
tamanho;

Controlo de concorrência, ou seja, permite a leitura e escrita simultânea na
base de dados sem que esta fique inconsistente;

Melhoramento no backup de falhas.
Com estas características a equipa que desenhou o TokuDB pretende torná-lo numa
base de dados bastante eficiente e capaz de competir com o MySQL.
Na figura 4.4 é mostrado o interface do TokuDB.
25
Bases de Dados NewSQL
Capítulo 4
Figura 4.4 – Interface do TokuDB
4.4 NuoDB
O NuoDB foi fundado em 2008 com o nome de NimbusDB e em 2011 o seu nome foi
mudado para NuoDB. Este sistema foi projectado em 2008 por Jim Starkey e em 2010
juntou-se a ele neste projecto Barry Morris, (NuoDB, 2013). O site do NuoDB é
http://www.nuodb.com/. E a versão utilizada nos testes foi a 1.2.
O NuoDB é solução NewSQL que oferece alto desempenho e escalabilidade, com
inexistência de tempo de inactividade e gestão de bases de dados que podem estar
distribuídas por vários locais, como é explicado em (NuoDB without compromisse,
2013).
É um DBMS que lida com transacções, interacções e observações em qualquer lado. E
suporta linguagens de programação como Java, .NET, PHP e Phyton, entre outras.
O NuoDB é uma base de dados distribuída desenhada com alguns desafios em mente.
Tem todas as propriedades do SQL: tem garantias ACID em todas as suas
transacções, suporta a linguagem SQL e a lógica relacional. Foi desenhado desde o
início como um sistema distribuído que tem escalabilidade tal como um serviço na
Cloud tem, oferecendo alta disponibilidade sem um único ponto de falha.
Ao contrário das tradicionais arquitecturas shared-nothing, o NuoDB oferece uma
arquitectura ponto-a-ponto, onde cada ponto funciona tanto como servidor como
cliente, o que gera alta disponibilidade dos dados.
26
Bases de Dados NewSQL
Capítulo 4
A arquitectura do NuoDB está dividida em três camadas: administrativa, transaccional
e de armazenamento. Esta divisão em camadas é fundamental para que se possa ter
um sistema relacional escalável (The Architecture & Motivation for NuoDB, 2013).
O NuoDB tem duas interfaces na linha de comandos, uma onde se inicia a Storage
Manager e a Transaction Engine, o domain (figura 4.5) e outra interface que é o
NuoSQL (figura 4.6).
Figura 4.5 – Interface do domain
Figura 4.6 – Interface do NuoSQL
4.5 VoltDB
O VoltDB é uma base de dados em memória (in-memory), ou seja, depende da
memória principal para armazenamento de dados. Este sistema foi desenhado por
conhecidos pesquisadores de sistemas de bases de dados, incluindo Michael
Stonebraker, Sam Madden e Daniel Abadi, em 2010. O site deste sistema é
http://voltdb.com/ e a versão utilizada nos testes foi a 3.2.
O VoltDB é uma base de dados relacional ACID e que utiliza uma arquitectura
shared-nothing, (VoltDB, 2013).
O VoltDB tem seis características chave (Technology of VoltDB, 2013):
1. ACID - o VoltDB garante que os dados estão 100% correctos, em 100% das
vezes não sendo por isso necessário trocar a consistência dos dados por
escalabilidade. O VoltDB tem ambos através de:
27
Bases de Dados NewSQL
Capítulo 4

Dados organizados em partições na memória;

Envio de transacções por clientes conectados à base de dados;

Transacções recebidas são direccionadas para os dados e executadas
em série.
2. Escalabilidade horizontal – a base de dados VoltDB pode aumentar o seu
tamanho em duas dimensões:

Aumentado a capacidade dos nós da base de dados existentes;

Aumentando o número de nós num cluster shared-nothing;
3. Alta disponibilidade – enquanto a maioria dos produtos de bases de dados
oferece alta disponibilidade através de módulos complexos e bastante caros, o
VoltDB foi desenhado para ter alta disponibilidade a partir do zero. É fácil de
utilizar e completamente transparente para as aplicações. As partições são
replicadas de forma transparente por vários servidores, e se um falhar todos os
dados permanecem disponíveis e consistentes para a operação continuar;
4. Desempenho em memória com durabilidade em disco – todos sabemos que
acidentes podem acontecer mas isso não tem de afectar a aplicação ou o
negócio de uma empresa. Com o Command Logging e o Snapshot do VoltDB
é possível recuperar a base de dados de uma forma rápida e fácil;
5. Replicação da base de dados para recuperação de perdas – tempo de
inactividade não é uma opção com o VoltDB. A funcionalidade de replicação
da base de dados do VoltDB faz uma replicação assíncrona na WAN (Wide
Area Network) para a recuperação de perdas. A cópia remota é apenas de
leitura enquanto não for considerada como sendo a base de dados principal,
que armazena os dados em disco se o controlo remoto estiver temporariamente
inacessível;
6. VoltDB export – integrar os dados de transacções com os dados analíticos ou
outro tipo de dados é uma exigência fundamental para aplicações de alto
desempenho. O VoltDB tem incluída uma funcionalidade de extracção
transaccional: o VoltDB export.
28
Bases de Dados NewSQL
Capítulo 4
O VoltDB também tem dois interfaces, um para iniciar o servidor (figura 4.7) e outro
para o sqlcmd (figura 4.8).
Figura 4.7 – Interface do servidor do VoltDB
Figura 4.8 – Interface do sqlcmd do VoltDB
4.6 StormDB
Este sistema pertence à empresa TransLattice que foi fundada em 2007 por Fank
Huerta, Mike Lyle e Robert Geiger.
O StormDB é uma base de dados na Cloud e pode ser encontrado no site
http://www.stormdb.com/. No entanto este não é um sistema open source. Permite um
período experimental de 30 dias mas depois desse período é necessário começar a
pagar o alojamento da base de dados.
O StormDB é um serviço de gestão de base de dados relacionais que proporciona um
desempenho confiável e uma escalabilidade perfeita. Ao contrário das típicas bases de
dados na Cloud, o StormDB tem uma abordagem diferente para armazenar os dados
na Cloud. Em vez de executar a base de dados numa máquina virtual, perdendo
desempenho e confiabilidade, o StormDB é uma Cloud de bases de dados (StormDB
29
Bases de Dados NewSQL
Capítulo 4
overview, 2013). Semelhante às clouds de armazenamento, não existe virtualização
dos dados. É tudo executado directamente a partir de um computador dando ao
utilizador performance, escalabilidade e confiabilidade.
Numa típica base de dados na Cloud existe limitação no aumento do tamanho da
instância virtual que se utiliza, enquanto no StormDB os dados são automaticamente
divididos por clusters de servidores ajustando o seu tamanho à necessidade da base de
dados. Tudo isto sem a necessidade de instalar complexas soluções de replicação de
dados ou aumentar a consistência dos dados para poder ampliar o tamanho da base de
dados na Cloud.
Muitas bases de dados na Cloud desempenham bem algumas das tarefas necessárias
na gestão da base de dados à custa de se tornarem piores noutras tarefas, o StormDB
não faz este tipo de compromisso. Qualquer tipo de base de dados complexa, seja um
exigente sistema transaccional ou uma data warehouse complicada, podem ser
executador no StormDB (StormDB overview, 2013).
Alguns dos benefícios do StormDB são (Why StormDB, 2013):

Não há necessidade de ajustar o desempenho da base de dados para aumentar
o tamanho da aplicação;

A base de dados está pronta para utilização em poucos segundos sem
necessitar de configurar complicadas opções de alta disponibilidade e
replicação de dados;

Tudo o que é necessário para a base de dados está na Cloud. Basta apenas
aceder ao browser para a utilizar;

Sistema baseado no PostgreSQL por isso não é necessário reescrever
pesquisas e aplicações. Apenas tem de se utilizar o SQL ANSI que já
conhecemos;

Não existe a necessidade de sacrificar os recursos para obter escalabilidade e o
desempenho que se pretende para a base de dados. O StormDB permite que se
faça tudo desde a pesquisa mais simples à mais complexa.
O StormDB tem um interface onde é possível ver as bases de dados existentes (figura
4.9) e outro onde é possível gerir a base de dados (figura 4.10).
30
Bases de Dados NewSQL
Capítulo 4
Figura 4.9 – Interface StormDB
Figura 4.10 – Gestão da base de dados no StormDB
No próximo capítulo fazemos a análise do ambiente experimental utilizado para a
avaliação dos sistemas anteriormente descritos, descrevemos a benchmark utilizada e
as características que pretendemos avaliar.
31
Bases de Dados NewSQL
32
Capítulo 4
Bases de Dados NewSQL
Capítulo 5
5 Ambiente experimental
Para avaliar as bases dados NewSQL utilizou-se a benchmark TPC-H (Transaction
Performance Council). Os testes foram realizados num computador com sistema
operativo Ubuntu 12.04 LTS 64-bit, memória (RAM) de 8GB, processador Intel®
Core™ i7 CPU 920 @ 2.67GHz x 8 e disco Samsung HD502HJ 500GB SATA.
5.1 TPC-H Benchmark
O TPC-H é uma benchmark de apoio à decisão que consiste num conjunto de
pesquisas ad-hoc orientadas ao negócio.
Esta benchmark avalia o desempenho de vários sistemas de apoio à decisão através da
execução de um conjunto de pesquisas, em condições controladas, nas bases de dados
em teste. As pesquisas do TPC-H dão respostas para questões de negócio reais e
simulam as tradicionais pesquisas ad-hoc dos sistemas de apoio à decisão. Estas
pesquisas são muito mais complexas que a maioria das transacções OLTP e incluem
um vasto conjunto de operadores e restrições de selectividade. As pesquisas geram
também uma intensa actividade por parte do servidor de base de dados do sistema que
está a ser testado e são executadas numa base de dados de acordo com uma população
específica e requisitos de tamanho (TPC-H Documentation, 2013).
O TPC-H possui oito tabelas, que são apresentadas na tabela 5.1 assim como o
número de registos que cada uma possui para 1GB e 10GB e cujo esquema se
apresenta na figura 5.1.
Tabela 5.1 - Caracterização das tabelas do TPC-H para 1GB e 10GB
1GB
10GB
Nation
25
25
Region
5
5
Part
200 000
2 000 000
Supplier
10 000
100 000
Partsupp
800 000
8 000 000
Customer
150 000
1 500 000
33
Bases de Dados NewSQL
Capítulo 5
Orders
1 500 000
15 000 000
Lineitem
6 001 215
59 986 052
TOTAL
8 661 245
86 586 082
Figura 5.1 – Esquema da base de dados do TPC-H
O TPC-H tem vinte e duas pesquisas que designamos Q1 a Q22, as quais explicamos
de seguida:

Q1 – volume de negócios que foi facturado e enviado;

Q2 – procura que fornecedor deve ser seleccionado para fazer o pedido de
uma determinada peça numa determinada região;

Q3 – retorna as 10 encomendas com o valor mais alto que não foram enviadas;

Q4 – determina se o sistema de ordem de prioridade está a funcionar
correctamente e dá uma avaliação da satisfação do cliente;

34
Q5 – lista o volume de receitas feito através de fornecedores locais;
Bases de Dados NewSQL

Capítulo 5
Q6 – quantifica quanto aumentam as receitas se se eliminar descontos de uma
determinada empresa num determinado intervalo percentual num dado
intervalo de tempo;

Q7 – determina o valor de mercadorias enviadas entre determinadas nações
para ajudar na renegociação de contractos de transporte;

Q8 – determina como o mercado de uma determinada nação dentro de uma
determinada região se alterou em dois anos em relação a uma determinada
peça;

Q9 – determina o lucro feito com determinada linha de peças dividido por
nação fornecedora e ano;

Q10 – identifica clientes que possam ter problemas com as peças que lhes
foram enviadas;

Q11 – procura os fornecedores mais importantes de determinada nação;

Q12 – determina se seleccionar o tipo de envio mais barato afecta
negativamente os pedidos com ordem de prioridade urgente fazendo com que
mais clientes recebam as suas encomendas depois da data definida;

Q13 – faz a relação entre os clientes e o tamanho das suas encomendas;

Q14 – monitoriza a resposta do mercado a promoções como por exemplo
anúncios de televisão ou campanhas especiais;

Q15 – identifica o melhor fornecedor para que este possa ser recompensado
através de mais negócios ou um reconhecimento especial;

Q16 – procura os fornecedores que podem fornecer peças com determinados
atributos. Isto pode ser utilizado, por exemplo, para determinar se um
fornecedor que é muito procurado tem número suficiente de peças disponíveis;

Q17 – calcula a receita média anual que seria perdida se não se pudesse fazer
pequenas encomendas de determinadas peças;

Q18 – classifica os clientes tendo como critério o facto de terem feito grandes
encomendas;
35
Bases de Dados NewSQL

Capítulo 5
Q19 – receita bruta com desconto de peças seleccionadas e tratadas de
maneira particular;

Q20 – identifica fornecedores que tenham peças seleccionadas que possam ser
candidatas a uma oferta promocional;

Q21 – identifica os fornecedores que não seriam capazes de enviar as peças
pretendidas em tempo útil;

Q22 – identifica áreas onde existem clientes propensos a fazer compras.
De referir que a pesquisa Q20 não foi utilizada devido a problemas na sua execução
no TokuDB.
No anexo C apresentamos como gerar os dados para carregar as tabelas com o DBgen
e como gerar as pesquisas com o Qgen e no anexo D o código de todas as pesquisas.
5.2 Características a avaliar
Para se poder comparar os diversos sistemas é necessário definir as características que
se pretende avaliar.
As características que se pretende avaliar são:

O tempo que cada sistema demora a carregar dados para a base dados;

O tempo que demora a executar uma consulta à base de dados;

O interface, isto é, se é de fácil utilização;

Existência de manuais de utilização;

Existência de fóruns onde se possam esclarecer eventuais dúvidas;
A análise ao resultado da avaliação destas características será feita no capítulo de
avaliação experimental.
No capítulo seguinte descrevemos as dificuldades encontradas ao longo da execução
deste projecto e as soluções encontradas para ultrapassar essas mesmas dificuldades.
36
Bases de Dados NewSQL
Capítulo 6
6 Principais dificuldades
No início deste projecto foi decidido utilizar uma máquina virtual com o sistema
operativo Ubuntu 12.04 LTS mas à medida que fomos desenvolvendo o projecto
apercebemo-nos que não seria possível executá-lo numa máquina virtual devido aos
requisitos de memória do VoltDB e do NuoDB, por isso tivemos que solicitar ao
presidente do DEIS que disponibilizasse um computador com mais memória RAM
para podermos testar um maior número de sistemas, o qual nos foi cedido
prontamente.
O Ubuntu 12.04 LTS já tem no seu repositório de aplicações o MySQL pronto a ser
instalado, no entanto não é a versão mais recente. Após fazermos o download da
versão mais recente que existia no site do MySQL procedemos à sua instalação mas
aparecia sempre o aviso de que existia uma versão no repositório do Ubuntu e que era
essa que devia ser instalada. Percebemos com isso que não bastava fazer uma
instalação simples para conseguir utilizar a versão mais recente do MySQL. Após
alguma
pesquisa
encontramos
a
resolução
do
problema
em
http://www.peterchen.net/2013/02/20/en-how-to-install-mysql-5-6-on-ubuntu-12-04precise/ que consistia em remover completamente a versão do MySQL que o Ubuntu
tem no seu repositório, mover a pasta my.cnf da localização utilizada por defeito pelo
MySQL para uma nova localização e colocar o novo scrip de inicialização do MySQL
que está incluído na versão recente, que fizemos download do site, na directoria
correcta para que o MySQL funcionasse correctamente.
Outro sistema testado foi o Drizzle e para procedermos à sua instalação recorremos à
documentação disponibilizada no site deste sistema. Mas de cada vez que seguíamos
os passos indicados não obtinhamos uma instalação correcta, chegando por isso à
conclusão de que esta documentação é pouco clara. Conseguimos instalar
correctamente
o
Drizzle
através
dos
passos
disponibilizados
http://devzone.zend.com/1504/getting-started-with-drizzle-and-php/
e
através
em
da
instalação de pacotes extras que foram sendo pedidos ao longo da instalação.
No VoltDB foram várias as dificuldades encontradas:

Os dados para carregar as tabelas estão armazenados em vários ficheiros,
sendo que a separação de cada campo é feita através do caracter “|”. No
37
Bases de Dados NewSQL
Capítulo 6
VoltDB esse caracter só é utilizado para separar os campos de cada linha da
tabela e para saber que chegou ao final de uma linha e se vai iniciar outra basta
que seja carregada a tecla “Enter” (\n na programação). No entanto os
ficheiros gerados pelo DBgen do TPC-H têm o caracter “|” também para
separar uma linha da outra, por isso foi necessário criar um script que retirasse
esse caracter do fim da cada linha, para se fazer o carregamento dos dados
correctamente no VoltDB, uma vez que não é possível retirar o caracter
manualmente pois existem tabelas que contêm milhões de registos. O script
utilizado é apresentado no anexo E.1.

O VoltDB não suporta o tipo de dados date, apenas o tipo de dados timestamp.
Não tem no entanto uma função que permita a transformação do formato date
em timestamp e por isso foi necessário criar um script que fizesse essa
transformação desses dados contidos nas tabelas Orders e Lineitem. O script é
apresentado no anexo E.2.

O principal problema encontrado no VoltDB foram as diversas limitações ao
nível da linguagem SQL tendo sido necessário reescrever algumas pesquisas e
não tendo sido possível sequer executar todas as pesquisas.
Alguns dos sistemas não indicam em quanto tempo foi executada cada pesquisa o que
se tornou complicado para registar os tempos de execução de cada pesquisa. A
solução encontrada para este problema foi criar uma tabela temporária com os campos
query (onde se colocava o número da pesquisa), data (colocava-se a data e hora do
sistema) e obs (onde se colocava se estava a iniciar ou terminar a execução da
pesquisa). E antes de cada pesquisa e após cada pesquisa inseria-se um registo nesta
tabela sendo possível determinar a que hora iniciou e terminou a execução das
pesquisas.
No próximo capítulo será feita a análise das características técnicas de cada base de
dados bem como a análise dos resultados obtidos após testarmos as bases de dados.
38
Bases de Dados NewSQL
Capítulo 7
7 Avaliação Experimental
Nesta secção apresentamos os resultados experimentais obtidos nos testes realizados
no MySQL e nos sistemas NewSQL (Drizzle, TokuDB, NuoDB, VoltDB e StormDB)
e uma fazemos a análise desses mesmos resultados. A avaliação experimental foi
realizada para dois conjuntos de dados, isto é, bases de dados com tamanho de 1GB e
10GB.
Os testes foram realizados para cada uma das bases de dados através da execução de
três sequências de pesquisas (S1 a S3) geradas no random.org:

S1 – Q9, Q18, Q8, Q5, Q21, Q2, Q14, Q16, Q13, Q12, Q15, Q19, Q3, Q7,
Q22, Q10, Q11, Q1, Q6, Q17, Q4;

S2 – Q18, Q15, Q21, Q8, Q6, Q14, Q2, Q22, Q10, Q12, Q17, Q1, Q13, Q16,
Q3, Q11, Q19, Q9, Q7, Q5, Q4;

S3 – Q14, Q8, Q13, Q5, Q11, Q22, Q4, Q10, Q1, Q9, Q6, Q3, Q15, Q12, Q2,
Q21, Q18, Q16, Q7, Q17, Q19;
Deste modo pretendemos evitar possíveis efeitos de armazenamento em cache dos
resultados das pesquisas, executando três vezes cada pesquisa de forma aleatória e
obtendo depois o valor médio da execução de cada uma. De referir que foram
utilizadas todas as vinte e duas pesquisas do TPC-H com excepção da pesquisa Q20
que foi retirada dos testes devido a alguns problemas na sua execução no TokuDB
pois para uma base de dados de 1GB passados dois dias a executar a pesquisa, ainda
não tínhamos obtido qualquer resultado.
Todos os valores aqui apresentados estão em segundos.
7.1 Comparação de características técnicas
Para além de fazermos a avaliação experimental de cada sistema NewSQL fizemos
também uma comparação de algumas características técnicas desses sistemas que
apresentamos na tabela 7.1. As características pretendidas foram escolhidas do site
http://vschart.com/compare/drizzle-database/vs/mysql.
39
Bases de Dados NewSQL
Capítulo 7
Tabela 7.1 – Comparação das características técnicas dos Sistemas NewSQL
Modelo da
Base de Dados
Drizzle
TokuDB
NuoDB
Relacional
Relacional
Relacional
SQL
SQL
SQL
ACID /
ACID /
MVCC
MVCC
VoltDB
StormDB
Relacional Relacional
Linguagem
para
SQL/Rest
SQL
ACID
MVCC
pesquisas
Modelo de
Integridade
MVCC
ACID
Sim
Sim
Sim
Sim
Sim
Transacções
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Não
Não
Sim
Sim
Sim
Desconhecido
Não
Sim
Sim
2GB
1GB
4GB
4GB
Cloud
Sim
Sim
Sim
Sim
Não
Sim
Sim
Sim
+/-
Sim
Sim
Sim
Sim
Sim
Não
Sim
Sim
Não
Escalabilidade
Horizontal
Sharding
Arquitectura
Sharednothing
Memória
mínima
Open source
Fácil de
utilizar
Manual de
utilização
Fóruns de
dúvidas
40
Sim mas
pouco
esclarecedor
Não
Bases de Dados NewSQL
Capítulo 7
Nesta tabela é possível ver algumas das características técnicas que se pretende que os
sistemas testados tenham.
A escalabilidade horizontal é a capacidade de ligar várias unidades de hardware ou
software entre si, tais como servidores, para que funcionem como uma única unidade
lógica.
Sharding é a possibilidade de dividir a base de dados por vários computadores sem
afectar no entanto a consistência dos dados.
Arquitectura shared-nothing é uma arquitectura de computação distribuída, em que
cada nó é independente e auto-suficiente. Não há partilha de memória e de
armazenamento em disco entre cada um dos nós existentes.
MVCC é um método de controlo de concorrência normalmente utilizado em sistemas
de gestão de bases de dados que proporciona simultaneamente acesso às bases de
dados e às linguagens de programação para implementação de memória transaccional.
A linguagem REST (Representational State Transfer) é uma técnica de engenharia de
software para sistemas hipermédia distribuídos como a World Wide Web. O termo
começou a ser utilizado em 2000, na tese de doutoramento de Roy Fielding. Este
termo originalmente referia-se a um conjunto de princípios de arquitectura, na
actualidade utiliza-se num sentido mais amplo para descrever qualquer interface web
simples que utiliza XML e HTTP (ou YAML, JSON, ou texto puro), sem as
abstracções adicionais dos protocolos baseados em padrões de trocas de mensagem
como o protocolo de serviços web SOAP.
Através da análise desta tabela é possível verificar que todos os sistemas cumprem
quanto ao facto de serem uma base de dados relacional e terem todas as garantias
ACID e têm também a escalabilidade horizontal tal como as bases de dados NoSQL,
que era o que se pretendia ao introduzir estes novos sistemas de bases de dados no
mercado. Na avaliação experimental analisamos se realmente os sistemas NewSQL
têm maior capacidade de processamento em relação às tradicionais bases de dados
relacionais.
7.2 Bases de dados com 1GB
Nesta secção apresentamos todos os gráficos com os resultados da avaliação
experimental para uma base de dados com 1GB.
41
Bases de Dados NewSQL
Capítulo 7
Figura 7.1 – Tempo de criação das tabelas para 1GB
Neste gráfico não é apresentado o VoltDB porque para criar as tabelas é necessário
criar um ficheiro .sql que depois é compilado e utilizado para iniciar o servidor do
VoltDB, assim não foi possivel contabilizar o tempo que demora a criar cada tabela
pois são todas criadas ao mesmo tempo.
É possível verificar que quando não é necessário muita capacidade de processamento,
o que acontece a criar tabelas, o MySQL e o TokuDB são os que demoram mais a
fazê-lo por serem os dois sistemas mais semelhantes entre si.
Tabela 7.2 – Tempos de carregamento de dados para 1GB em segundos
Nation Region
Part
Supplier Partsupp Customer Orders Lineitem
MySQL
0.19
0.06
7.74
2.07
32.39
8.16
49.85
248.54
Drizzle
0.05
0.05
4.98
0.2
33.84
6.25
58.21
312.34
TokuDB
0.05
0.22
2.11
0.32
8.34
2.04
13.01
66.08
NuoDB
1.5
0.34
5.4
0.63
18.44
4.06
44.12
238.94
VoltDB
0.16
0.19
58.7
2.99
256.34
50.71
506.89
2148.07
StormDB
0.65
0.62
21.42
1.89
90
13.54
128.78
523.6
42
Bases de Dados NewSQL
Capítulo 7
Tabela 7.3 – Tempos obtidos para a criação de chaves primárias para 1GB
Nation Region
Part
Supplier Partsupp Customer Orders Lineitem
MySQL
0.95
0.78
11.09
4.3
76.55
13.41
87.27
718.49
Drizzle
1.11
1.36
19.05
3.68
191.97
27.07
276.64
1178.75
TokuDB
1.21
0.89
7.31
1.6
52.95
9.39
79.11
366.01
NuoDB
0.01
0.02
0.79
0.04
3.36
0.59
6.07
25.61
StormDB
0.63
0.66
0.57
0.57
0.77
0.5
1.28
3.2
Tabela 7.4 – Tempos obtidos para a criação de chaves forasteiras para 1GB
Nation Supplier Partsupp Customer Orders Lineitem
MySQL
1.48
5.30
59.82
15.86
192.98
3732.32
Drizzle
0.21
0.55
56.58
4.48
75.86
2534.74
TokuDB
1.42
1.95
53.4
9.51
80.34
367.86
Os valores anteriores estão apresentados na forma de tabela porque têm tanto valores
muito pequenos como valores muito grandes e isso dificulta a visualização desses
mesmos valores na forma de gráfico.
Como é possível ver as operações que demoram mais tempo a ser realizadas são as
que são efectuadas nas tabelas Partsupp, Orders e Lineitem. Isto deve-se ao facto de
serem as tabelas que contêm mais registos.
Na tabela das chaves primárias (PK) não consta o VoltDB porque estas são definidas
ao mesmo tempo que se criam as tabelas na compilação do ficheiro .sql que é
necessário compilar para obter um ficheiro .jar para se poder iniciar o servidor do
VoltDB.
Em relação às chaves forasteiras (FK) só possível defini-las para o MySQL, Drizzle e
TokuDB. Ao analisar a documentação disponibilizada tanto pelo NuoDB como pelo
VoltDB é possível verificar que estes dois sistemas não suportam a utilização de FK,
o que é uma limitação destes sistemas.
43
Bases de Dados NewSQL
Capítulo 7
Em relação ao StormDB não foi possível definir as FK porque os campos têm nomes
diferentes, isto é, o nome do campo que pretendemos que seja FK é diferente do
campo da tabela que estamos a referenciar. Por exemplo para a tabela Nation, o
campo n_regionkey é FK, fazendo referência ao campo r_regionkey da tabela Region.
Ao fazermos o comando necessário para definir a FK:
ALTER TABLE nation ADD CONSTRAINT nation_fk FOREIGN KEY
(n_regionkey) REFERENCES region (r_regionkey) MATCH FULL;
Obtivemos o erro que é mostrado na figura 7.2.
Figura 7.2 – Erro ao definir uma chave forasteira no StormDB
Assim fizemos a experiência de criar uma tabela que continha apenas um campo
designado r_regionkey, inserimos alguns valores e definimos FK e já foi possível
defini-la como mostra a figura 7.3.
Figura 7.3 – Definição correcta de uma chave forasteira no StormDB
44
Bases de Dados NewSQL
Capítulo 7
Com esta experiência verificamos que o StormDB tem também uma limitação ao
nível da definição de FK, ou seja, se o nome do campo não for igual nas duas tabelas
não é possível definir FK.
Analisando as tabelas anteriores é possível ver que a inserir dados o sistema que
demora mais tempo é o VoltDB devido a ser um sistema in-memory, ou seja, faz
muita utilização da memória do computador o que faz com que à medida que o
tamanho da base de dados vai aumento o sistema começa a utilizar mais memória e
torna-se mais lento e pode levar mesmo à utilização total da memória disponível
fazendo com que o computador deixe de responder e seja necessário reiniciá-lo.
Para definir as PK o sistema que demorou mais foi o Drizzle devido a ter sido
desenhado para privilegiar a escalabilidade, executando várias tarefas em simultâneo.
Esta base de dados apesar de ter 1GB não é um tamanho muito grande e definir
chaves primárias em cada tabela não necessita de várias transacções feitas em
simultâneo.
Já na definição das FK o sistema que demorou mais tempo foi o MySQL devido a ser
preciso uma maior capacidade processamento já que para definir FK é necessário
comparar as tabelas linha a linha para verificar se os valores inseridos na tabela onde
se quer definir a FK estão correctos.
7.2.1 MySQL vs Drizzle vs TokuDB
Nestes sistemas foi possível executar a totalidade das pesquisas permitindo uma
comparação mais detalhada entre eles. Em seguida apresentamos os gráficos com os
tempos de execução para cada sequência, o total do tempo de execução após executar
as três sequências e ainda a média do tempo de execução e o desvio padrão. O desvio
padrão mostra-nos a variação que existe em relação à média, sendo que um desvio
padrão com um valor baixo significa que todos os valores estão próximos do valor da
média e um valor alto significa valores dispersos que variam muito entre si.
45
Bases de Dados NewSQL
Capítulo 7
Figura 7.4 – Média dos tempos de execução para 1GB após executar as três
sequências
A pesquisa Q14 para o MySQL e para o Drizzle apresenta valores muito grandes o
que dificulta a correcta visualização do gráfico por haver também valores muito
pequenos assim não foram colocados no gráfico os resultados desta pesquisa. A média
obtida foi de 219, 271 e 3 segundos para o MySQL, Drizzle e TokuDB,
respectivamente.
Analisando o gráfico anterior é possível verificar que as pesquisas mais demoradas
são as pesquisas Q9, Q10, Q13, Q14, Q18 e Q21, pois são aquelas que pesquisam
informação em mais tabelas e que necessitam de fazer cálculos para chegar a um
resultado final. As restantes pesquisas vão pesquisar num menor número de tabelas e
algumas têm de fazer a pesquisa apenas num determinado intervalo de tempo, o que
leva a que a quantidade de informação a pesquisar seja menor.
Os valores do desvio padrão são apresentados em tabela porque alguns valores são tão
pequenos que no gráfico apareciam com o valor zero não sendo possível ver o
verdadeiro valor do desvio padrão para determinadas pesquisas.
46
Bases de Dados NewSQL
Capítulo 7
Tabela 7.5 – Desvio padrão para 1GB
MySQL
Drizzle
TokuDB
Q1
0.08
0.88
0.23
Q2
0.74
0.04
0.33
Q3
0.68
0.03
0.18
Q4
0.10
0.10
1.42
Q5
0.96
0.05
1.53
Q6
0.03
0.02
0.01
Q7
0.28
0.03
1.25
Q8
1.00
0.15
0.53
Q9
41.72
9.43
1.22
Q10
6.19
0.11
1.64
Q11
0.06
0.01
0.22
Q12
0.05
0.06
0.21
Q13
4.54
0.64
0.58
Q14
5.32
0.37
0.20
Q15
0.06
0.24
0.21
Q16
0.11
0.44
0.11
Q17
0.02
0.06
0.33
Q18
4.48
2.00
0.30
Q19
0.06
0.10
0.26
Q21
4.80
0.03
0.47
Q22
0.01
0.03
0.26
Ao observarmos a tabela anterior é possível constatar que a pesquisa cujo resultado se
desvia mais do seu valor médio é a Q9 no MySQL e Drizzle e a Q10 no TokuDB. Na
47
Bases de Dados NewSQL
Capítulo 7
primeira sequência a pesquisa a ser executada primeiro é a Q9 e isso influenciou o
valor do desvio padrão desta pesquisa no MySQL e no Drizzle pois é o valor obtido
nesta execução que influencia o valor de desvio padrão obtido. Apesar das pesquisas
terem sido executadas aleatoriamente para diminuir os efeitos dos dados que ficam em
cache acabam sempre por ficar dados em cache que podem ser úteis para as pesquisas
seguintes e é o que acontece com a pesquisa Q10 no TokuDB. Na primeira e segunda
sequência a pesquisa Q10 é executada após a pesquisa Q22 que utiliza apenas uma
das tabelas que são utilizadas na Q10 tendo por isso demorado mais alguns segundos
a ser executada que na terceira sequência, pois é executada logo após a pesquisa Q4,
sendo que esta pesquisa utiliza duas das tabelas utilizadas na Q10. Nesta pesquisa é
possível ver que se houver dados em cache que possam ser utilizados na pesquisa
seguinte isso afecta o tempo de execução ainda que seja só por um ou dois segundos
de diferença.
Figura 7.5 – Tempo total de execução de todas as sequências para 1GB
Considerando o tempo total de execução para o conjunto das três sequências é
possível verificar que o Drizzle é o que demora mais a executar todas as pesquisas,
seguido do MySQL com uma diferença de 187.52 segundos (3min 7.52seg) de
execução.
O mais rápido dos três é o TokuDB demorando apenas 904.98 segundos (15min
4.98seg) a executar todas as pesquisas. Assim tendo em consideração os resultados
48
Bases de Dados NewSQL
Capítulo 7
experimentais é possível concluir que o TokuDB é mais rápido 47% que o MySQL e
52% mais rápido que o Drizzle a executar as sequências de pesquisas. Por outro lado
o Drizzle é 10% mais lento que o MySQL.
O Drizzle torna-se mais lento que o MySQL nas bases de dados de 1GB devido a ter
sido desenhado para privilegiar a escalabilidade, executando várias transacções em
simultâneo, o que não acontece neste conjunto de experiências. Nesta avaliação
experimental não se executaram várias transacções em simultâneo e um tamanho de
1GB ainda não é uma base de dados que se possa considerar de grande dimensão e
por isso o Drizzle acaba por ser mais lento.
Como foi referido na definição do TokuDB, este foi desenhado para conseguir
efectuar pesquisas mais rapidamente e para trabalhar com tabelas muito grandes.
Apesar de na base de dados de 1GB não haver tabelas muito grandes nota-se
claramente que mesmo assim o TokuDB conseguiu atingir o objectivo de ter uma
velocidade de execução superior aos restantes.
7.2.2 NuoDB
Nesta subsecção apresentamos os resultados do NuoDB. Estes não são apresentados
em conjunto com os sistemas anteriores porque não foi possível testar todas as
pesquisas. No NuoDB não foi possível obter resultados para as pesquisas Q1, Q2,
Q11, Q13, Q17 e Q19.
O NuoDB por ser um sistema novo ainda não tem implementado todas as
optimizações do MySQL na análise de subpesquisas. O que fez com que nas referidas
pesquisas não retornassem resultados pois todas elas, com excepção da pesquisa Q1,
têm subpesquisas, vão procurar a sua informação a várias tabelas e não limitam essa
informação a um intervalo de tempo, o que faz com que seja necessário procurar em
toda a tabela a informação pretendida. A pesquisa Q1 apesar de não ter subpesquisas
faz muitas operações aritméticas e vais procurar a informação pretendida na tabela
Lineitem, que é a tabela que contém mais registos.
Como não possível executar todas as pesquisas fazemos a comparação do NuoDB em
relação aos anteriores sistemas (MySQL, Drizzle, TokuDB) mas apenas com as
pesquisas que foram executadas no NuoDB.
49
Bases de Dados NewSQL
Capítulo 7
Figura 7.6 - Média dos tempos de execução para 1GB após esxecutar as três
sequências (NuoDB MySQL, Drizzle e TokuDB)
Por termos obtido resultados muito elevados para as pesquisas Q14, Q15, Q18 e Q22
não foi possível colocar os seus valores no gráfico. A pesquisa Q14 foi devido ao
valor alcançado no MySQL e no Drizzle, as restantes foi devido aos valores no
NuoDB.
A Q14 teve de média 219, 271, 3 e 19 segundos; Q15 obteve uma média de 7, 11, 5 e
83792 segundos; Q18 tem uma média de 46, 35, 96 e 16085 segundos; por fim a Q22
tem uma média de 0.31, 0.35, 0.45 e 6794 segundos para o MySQL, Drizzle, TokuDB
e NuoDB respectivamente.
Tabela 7.6 – Desvio padrão para 1GB (NuoDB MySQL, Drizzle e TokuDB)
50
MySQL
Drizzle
TokuDB
NuoDB
Q3
0.68
0.03
0.18
9.76
Q4
0.10
0.10
1.42
33.42
Q5
0.96
0.05
1.53
0.52
Q6
0.03
0.02
0.01
0.43
Q7
0.28
0.03
1.25
35.30
Q8
1.00
0.15
0.53
17.10
Q9
41.72
9.43
1.22
24.01
Bases de Dados NewSQL
Capítulo 7
Q10
6.19
0.11
1.64
26.80
Q12
0.05
0.06
0.21
16.84
Q14
5.32
0.37
0.20
25.84
Q15
0.06
0.24
0.21
15741.37
Q16
0.11
0.44
0.11
26.65
Q18
4.48
2.00
0.30
538.03
Q21
4.80
0.03
0.47
32.33
Q22
0.01
0.03
0.26
470.17
Olhando para a tabela 7.6 é possível verificar que os valores do desvio padrão do
NuoDB são bastante altos para a maioria das pesquisas, o que significa que existe uma
grande variação entre os valores de execução das pesquisas em cada sequência. Isto
pode ser explicado em parte porque o NuoDB faz uma grande utilização da memória
do computador e quanto mais dados precisa pesquisar e tem em cache começa a
utilizar cada vez mais memória do computador o que torna a execução das pesquisas
mais lentas.
Figura 7.7 - Tempo total de execução de todas as sequências para 1GB (NuoDB
MySQL, Drizzle e TokuDB)
Devido ao elevado tempo de execução das pesquisas Q15, Q18 e Q22 o tempo total
de execução do NuoDB é também bastante elevado sendo mais lento 31344, 27439 e
64898 vezes que o MySQL, Drizzle e TokuDB, respectivamente, nas pesquisas
executadas.
51
Bases de Dados NewSQL
Capítulo 7
Com estes resultados é possível concluir que o NuoDB ainda precisa ser melhorado a
nível de performance pois apenas executou as pesquisas mais simples e dessas
demorou bastante tempo em três pesquisas por serem talvez as mais complicadas que
conseguiu executar. Outro ponto que torna o NuoDB mais lento em relação aos outros
três sistemas é o significativo uso de memória, o que começa a tornar o computador
mais lento nas operações que tem de executar.
7.2.3 VoltDB
À semelhança do que aconteceu com o NuoDB também no VoltDB não foi possível
executar todas as pesquisas, embora por motivos diferentes. A linguagem SQL
utilizada pelo VoltDB está ainda muito longe de ser o SQL padrão e por isso tem
inúmeras limitações.
Em pesquisas que utilizassem mais de 6 tabelas dava erro e informava que era
necessário indicar um order join, figura 7.8. Essa indicação só pode ser feita através
de um procedimento em java. Na documentação do VoltDB explica como fazer esses
procedimentos e por isso decidimos fazer os procedimentos de maneira a ser possível
executar o maior número de pesquisas no VoltDB. No entanto sempre que
compilávamos o procedimento dava erro pois a ordem indicada não estava correcta e
assim não possível executar pesquisas com mais de 6 tabelas.
Figura 7.8 - Erro VoltDB, order join
Outra limitação é o facto de não suportar a condição having, figura 7.9.
Figura 7.9 – Erro VoltDB, condição having
52
Bases de Dados NewSQL
Capítulo 7
Também se observou outra dificuldade tanto a criar vistas como com pesquisas que
contêm subpesquisas. Ao criar vistas, mesmo seguindo a documentação do VoltDB
dava erro e o mesmo acontecia com as pesquisas com subpesquisas, figura 7.10.
Figura 7.10 – Erro VoltDB, criar vistas e pesquisas com subpesquisas
Outra situação é facto de quando está a efectuar uma pesquisa só ter espaço de
100MB para criar uma tabela temporária, sendo que se esse espaço for excedido dá
erro, figura 7.11.
Figura 7.11 – Erro VoltDB, espaço para tabela temporária excedido
Assim com todas estas limitações só foi possível executar as pesquisas Q1, Q4, Q6,
Q12, Q14 e Q16.
Figura 7.12 – Média do tempo de execução para 1GB após executar as três
sequências (VoltDB MySQL, Drizzle e TokuDB)
Por termos obtido resultados muito elevados para as pesquisas Q14 no MySQL e no
Drizzle, este não foram colocados no gráfico. A pesquisa Q14 teve de média 219, 271,
3 e 1 segundos para o MySQL, Drizzle, TokuDB e VoltDB respectivamente.
53
Bases de Dados NewSQL
Capítulo 7
Figura 7.13 – Desvio padrão para 1GB (VoltDB MySQL, Drizzle e TokuDB)
Figura 7.14 – Tempo total de execução para 1GB (VoltDB MySQL, Drizzle e
TokuDB)
Fazendo a análise dos gráficos anteriores é possível verificar que se o VoltDB
melhorar a utilização do SQL, isto é, se se aproximar mais do SQL padrão será um
bom sistema NewSQL pois tendo em conta as poucas pesquisas que foi possível
executar mesmo assim obteve melhores resultados que os restantes sistemas, sendo
93%, 95% e 45% mas rápido que o MySQL, Drizzle e TokuDB, respectivamente, nas
pesquisas executadas. E também se nota que os tempos obtidos para cada sequência
andam sempre próximos da média pois os valores de desvio padrão são muito baixos,
isto significa que seja qual for a ordem de execução das pesquisas demora quase
sempre o mesmo tempo a executar as pesquisas.
54
Bases de Dados NewSQL
Capítulo 7
7.2.4 StormDB
O StormDB é uma base de dados na Cloud mas como foi a única na Cloud que
testámos iremos compará-la com o MySQL, Drizzle e TokuDB até por uma questão
de perceber se é mais eficiente ter uma base de dados na Cloud ou no nosso
computador.
À primeira vista o StormDB começa logo a perder em relação aos outros sistemas
porque só executou pesquisas simples, que fossem limitadas a um intervalo de tempo
e que procurassem a informação necessária, no máximo em quatro tabelas das oito
existentes. Sendo que sempre que tentámos executar uma das restantes pesquisas deu
erro, figura 7.15.
Figura 7.15 – Erro StormDB
Devido a este erro só foi possível executar as pesquisas Q1, Q4, Q6, Q11, Q12, Q13,
Q14, Q15, Q16, Q18 e Q22.
Figura 7.16 – Média do tempo de execução para 1GB após executar as três
sequências (StormDB MySQL, Drizzle e TokuDB)
55
Bases de Dados NewSQL
Capítulo 7
Por termos obtido resultados muito elevados para as pesquisas Q14 no MySQL e no
Drizzle, este não foram colocados no gráfico. A pesquisa Q14 teve de média 219, 271,
3 e 26 segundos para o MySQL, Drizzle, TokuDB e StormDB respectivamente.
Figura 7.17 – Desvio padrão para 1GB (StormDB MySQL, Drizzle e TokuDB)
Figura 7.18 – Tempo total de execução para 1GB (StormDB MySQL, Drizzle e
TokuDB)
Também neste sistema, mesmo não tendo executado todas as pesquisas, obteve-se
melhores resultados, tendo sido 77%, 79% e 43% mais rápido que o MySQL, Drizzle
e TokuDB, respectivamente. Assim se o sistema for melhorado por forma a permitir a
execução de pesquisas mais complicados seria uma possível solução para quem
56
Bases de Dados NewSQL
Capítulo 7
pretende grande escalabilidade e ao mesmo tempo capacidade de processamento, no
entanto é preciso ter em conta que a utilização deste sistema tem custos associados.
7.3 Bases de dados de com 10GB
Para a base de dados de 10GB só foi possível testar o MySQL, Drizzle, TokuDB e
StormDB devido a limitações de memória do computador utilizado. O NuoDB e o
VoltDB são dois sistemas que utilizam muito a memória do computador e verificou-se
que quanto maior a base de dados mais memória do computador era utilizada.
Estávamos ainda na fase de carregamento de dados para estes dois sistemas e a
utilização de memória já estava praticamente no máximo, como se pode ver na figura
7.19, não sendo sequer possível terminar o carregamento dos dados tanto para um
sistema como para outro pois o computador acabou por deixar de responder e teve de
ser reiniciado para funcionar novamente.
Figura 7.19 – Utilização de memória pelo NuoDB e VoltDB
Figura 7.20 – Tempo de criação das tabelas para 10GB
57
Bases de Dados NewSQL
Capítulo 7
Tabela 7.7 – Tempo de carregamento de dados para 10GB
Nation Region
Part
Supplier Partsupp Customer
Orders
Lineitem
MySQL
0.27
0.07
54.30
5.21
275.56
54.44
411.46
1935.52
Drizzle
0.07
0.04
55.27
1.92
293.70
58.69
501.62
2349.74
TokuDB
0.18
0.20
11.32
0.81
52.79
10.15
82.86
413.44
StormDB
0.68
0.67
690.36
23.30
4321.41
1087.75
4264.00
8947.41
Tabela 7.8 – Tempos obtidos para a criação de chaves primárias para 10GB
Nation Region
Part
Supplier Partsupp Customer
Orders
Lineitem
6656.58
MySQL
1.37
3.16
162.46
9.49
878.57
134.04
1243.90
Drizzle
0.17
0.58
63.08
5.00
1217.49
63.09
2834.16 28787.11
TokuDB
1.02
0.92
41.94
5.04
358.44
56.87
515.75
StormDB
0.61
0.54
1.09
0.77
4.06
0.84
5.55
2842.49
20.64
Tabela 7.9 – Tempos obtidos para a criação de chaves forasteiras para 10GB
Nation Supplier Partsupp Customer
Orders
Lineitem
83253.01
MySQL
4.53
9.51
1267.18
132.37
7521.12
Drizzle
1.80
1601.00
60.89
1332.07
9068.99 154731.66
TokuDB
2.78
4.88
341.66
57.84
520.77
2895.35
Para as tabelas de 10GB os tempos de execução aumentam consideravelmente mas
mantêm-se a situação das operações demorarem mais tempo a executar nas tabelas
Partsupp, Orders e Lineitem porque mais uma vez são as tabelas que têm mais
registos.
58
Bases de Dados NewSQL
Capítulo 7
7.3.1 MySQL vs Drizzle vs TokuDB
Figura 7.21 – Média dos tempos de execução para 10GB
A média da pesquisa Q9 é de 35276, 25500 e de 590; já a média da pesquisa Q14 é de
159103, 75704 e de 65 para MySQL, Drizzle e TokuDB, respectivamente. Estes
valores não são apresentados no gráfico porque os resultados para MySQL e Drizzle
são muito elevados e iam tornar o gráfico pouco perceptível.
Nesta base de dados, por já ter uma dimensão considerável, a pesquisa Q3 que apesar
de ir procurar a sua informação a apenas três das oito tabelas mas que tem de fazer
cálculos para chegar ao resultado final já demora um tempo considerável a executar. E
o mesmo acontece com a Q7 e Q8 que apesar de pesquisarem num dado intervalo de
datas, ainda é um intervalo considerável (dois anos), pesquisam informação em cinco
e sete tabelas respectivamente e necessitam de fazer cálculos complexos para obter o
resultado final.
As pesquisas Q9, Q10, Q13, Q14 e Q18 mantêm nesta base de dados os seus valores
elevados devido ao aumento da quantidade de informação e porque são pesquisas que
não limitam a sua procura a um intervalo de tempo, utilizando toda a informação
contida nas tabelas.
59
Bases de Dados NewSQL
Capítulo 7
Tabela 7.10 – Desvio padrão para 10GB
MySQL
Drizzle
TokuDB
Q1
4
18
8
Q2
55
31
8
Q3
2165
2209
19
Q4
21
18
18
Q5
360
263
144
Q6
4
46
6
Q7
1207
3385
15
Q8
265
738
177
Q9
11788
290
27
Q10
435
1987
134
Q11
1
59
9
Q12
4
44
14
Q13
228
197
18
Q14
14182
6163
11
Q15
12
8
7
Q16
65
6
1
Q17
63
32
33
Q18
43
99
11
Q19
179
145
14
Q21
10
53
2
Q22
5
19
4
Ao contrário do que que acontece com as bases de dados de 1GB que não são as
pesquisas mais demoradas que apresentam um maior desvio padrão, nas bases de
10GB é isso que acontece. Tanto para o MySQL como para o Drizzle a pesquisa que
60
Bases de Dados NewSQL
Capítulo 7
mais tempo demora a ser executada é a Q14, já no TokuDB a pesquisa que demora
mais tempo na sua execução é a Q8. Por serem pesquisas demoradas e por nesta base
de dados as tabelas já conterem bastante informação, o tempo que estas pesquisas
demoram executar varia um pouco de sequência para sequência, sendo também
influenciadas pelos dados que possam estar em cache das pesquisas executadas
anteriormente.
Figura 7.22 – Tempo total de execução para 10GB
Com base nos resultados experimentais é possível concluir que quando se aumenta a
capacidade de armazenamento das bases de dados de 1GB para 10GB o MySQL
torna-se mais lento em relação às bases de dados NewSQL testadas, o que significa
que o MySQL apesar de ter capacidade de armazenamento perde capacidade de
desempenho em bases de dados de grande dimensão.
Tal como já foi referido anteriormente, o Drizzle privilegia escalabilidade e esse é um
factor que se mostra decisivo numa base de dados com um tamanho de 10GB, que se
pode considerar de dimensão considerável, fazendo com que o Drizzle em relação ao
MySQL tenha uma melhoria de 39%.
Na base de dados de 10GB é possível ver ainda melhor a capacidade do TokuDB
fazer as suas pesquisas mais rapidamente. Pois nesta base de dados já temos tabelas
com um tamanho considerável e é possível verificar que o TokuDB foi realmente
projectado para ser mais rápido que os outros sistemas uma vez que nestas bases de
61
Bases de Dados NewSQL
Capítulo 7
dados o TokuDB destaca-se ainda mais, com uma melhoria de 95% em relação ao
MySQL e 92% em relação ao Drizzle.
Também é possível concluir que o aumento da dimensão da base de dados leva a que
demore muito mais tempo a execução das pesquisas. Apesar da dimensão destas bases
de dados ser dez vezes maior que as anteriores, o aumento do tempo de execução não
é proporcional pois aumenta 391 vezes, 213 vezes e 35 vezes para o MySQL, Drizzle
e TokuDB respectivamente. Assim verifica-se que a base de dados menos afectada
pelo aumento da dimensão foi o TokuDB que continuou a ter um melhor desempenho
em relação às outras bases de dados.
7.3.2 StormDB
Figura 7.23 - Tempo total de execução para 10GB (StormDB MySQL, Drizzle e
TokuDB)
A média da pesquisa Q14 é de 159103, 75704, 65 e de251 para MySQL, Drizzle,
TokuDB e StormDB, respectivamente.
Figura 7.24 – Desvio padrão para 10GB (StormDB MySQL, Drizzle e TokuDB)
62
Bases de Dados NewSQL
Capítulo 7
Figura 7.25 – Tempo total de execução para 10GB (StormDB MySQL, Drizzle e
TokuDB)
Apesar de não ter executado as pesquisas todas quando comparado com outros
sistemas relativamente às pesquisas que executou nota-se que este sistema é mais
rápido na execução das mesmas. Sendo assim basta que melhore o problema de não
executar determinadas pesquisas e é um bom sistema para utilizar em qualquer
organização.
No capítulo seguinte mostramos as conclusões retiradas com a avaliação feita a cada
sistema e também abordamos um possível trabalhar para desenvolver no futuro.
63
Bases de Dados NewSQL
64
Capítulo 7
Bases de Dados NewSQL
Capítulo 8
8 Conclusões e trabalho futuro
Este trabalho permitiu concluir que as bases de dados NewSQL são as mais indicadas
para solucionar o problema de falta de capacidade de armazenamento e
processamento, pois seguem o modelo relacional, utilizam linguagem SQL e têm
todas as garantias ACID para que os dados contidos nas bases de dados estejam
consistentes.
Foram testados os sistemas NewSQL: Drizzle, TokuDB, NuoDB, VoltDB e
StormDB. Os resultados dos testes mostram que existem situações em que alguns
sistemas obtêm melhores resultados.
Se não se pode gastar dinheiro num bom computador que tenha bastante memória
RAM, o VoltDB e o NuoDB não são os sistemas indicados para esta situação. Pois,
ambos necessitam de muita memória e quanto maior for a base de dados mais
memória consomem. No caso de não terem muita memória disponível poderão levar a
que o computador deixe de funcionar.
O StormDB é uma base de dados na Cloud e por isso não é open source, é necessário
pagar pela sua utilização. Não conseguimos neste sistema testar todas as pesquisas
possíveis mas acreditamos que se o sistema for melhorado e começar a ser possível
testar todas as pesquisas é um bom sistema. Pois nas pesquisas que executou foi
melhor que os restantes sistemas tanto na base de dados de 1GB como na base de
dados de 10GB.
No entanto se pretendemos ter um sistema completamente open source em que os
dados fiquem armazenados no nosso próprio computador, temos duas opções o
Drizzle e o TokuDB. No entanto, o TokuDB é bastante melhor que o Drizzle pois
obteve resultados melhores tanto na base de dados de 1GB como na de 10GB. O
Drizzle nos testes executados demonstrou ser um sistema preparado para bases de
dados de grande dimensão, pois para as bases de dados de 1GB não teve tão bom
desempenho como nas bases de dados de 10GB.
Também foi possível concluir que mesmo executando as pesquisas aleatoriamente
acabam por ficar dados em cache que influenciam a execução da pesquisa seguinte,
no entanto os efeitos observados são mínimos.
65
Bases de Dados NewSQL
Capítulo 8
Assim é possível concluir que dos sistemas utilizados o que tem melhor performance
e reage melhor ao aumento do tamanho da base de dados é o TokuDB. Pois, neste
sistema é possível executar todas as pesquisas. Nas bases de dados de 1GB o TokuDB
é mais rápido 47% que o MySQL e 52% mais rápido que o Drizzle, e nas bases de
dados de 10GB o TokuDB destaca-se ainda mais, com uma melhoria de 95% em
relação ao MySQL e 92% em relação ao Drizzle.
Neste projecto abordámos apenas as bases de dados NewSQL mas, como foi escrito
ao longo deste relatório, existem também os novos sistemas NoSQL que pretendem
dar escalabilidade às bases de dados e capacidade de processamento, não garantindo
no entanto que os dados que a base de dados contém sejam consistentes. Deste modo
propomos para um trabalho futuro testar as bases de dados NoSQL e fazer a
comparação dos resultados com as bases de dados NewSQL para avaliarmos qual
fornece melhor resposta à falta de capacidade de armazenamento e processamento.
66
Bases de Dados NewSQL
Referências
Referências
451 Group (2012) NoSQL, NewSQL, Big Data… Total Data – The Future of
Entreprise Data Management. Consultado em 24-03-2013, no site
http://nosqlroadshow.com/dl/NoSQL-Road-Show/slides/NoSQLBasel/mattNosqlRoadshowBasel.pdf
Aslett, Matthew (2011) What we talk about whe we talk about NewSQL. Consultado
em
25
de
Fevereiro
de
2013,
no
site
http://blogs.the451group.com/information_management/2011/04/06/what-we-talkabout-when-we-talk-about-newsql/
Aslett, Matthew (2011) NoSQL, NewSQL and Beyond: The answer to SPRAINed
relational databases. Consultado em 24 de Março de 2013, no site
http://blogs.the451group.com/information_management/2011/04/15/nosql-newsqland-beyond/
Autopia Blog (2011) Cellphone Networks and the Future of Traffic. Consultado em
10 de Novembro de 2013, no site http://www.wired.com/autopia/2011/03/cell-phonenetworks-and-the-future-of-traffic/
Big Data in 2020 (2012) Consultado em 22 de Novembro de 2013, no site
http://www.emc.com/leadership/digital-universe/iview/big-data-2020.htm
Caldeira, Teresa (2006). Bases de Dados. Consultado em 8 de Novembro de 2013, no
site http://docentes.esa.ipcb.pt/tmlc/PGSIG-BD.pdf
Carriço, José António (1996) Desenho de Bases de Dados – CTI (Centro de
Tecnologias de Informação, Lda)
Chamberlin, Donald D. and Boyce Raymond F.. 1974. SEQUEL: A structured
English query language. In Proceedings of the 1974 ACM SIGFIDET workshop on
Data description, access and control (now SIGMOD)). ACM, New York, NY, USA,
249-264.
Codd, E. F. (Junho de 1970) A Relational Model of Data for Large Shared Banks.
Communications of ACM13, 6 (June 1970), 377-387. Doi=10.1145/362384.362685.
DB-Engines Ranking (2013) Consultado em 11 de Novembro de 2013, no site
http://db-engines.com/en/ranking
Drizzle Documentation (2010). Consultado em 3 de Outubro de 2013, no site
http://docs.drizzle.org/index.html
67
Bases de Dados NewSQL
Referências
Facebook Statistics (2013) Consultado em 10 de Novembro de 2013, no site
http://www.statisticbrain.com/facebook-statistics/
Gantz, John & Reinsel, David (2011). Extracting value from chaos. Consultado em
06-03-2012, no site http://www.emc.com/collateral/analyst-reports/idc-extractingvalue-from-chaos-ar.pdf
Getting Started with Drizzle and PHP (2009). Consultado em 3 de Outubro de 2013,
no site http://devzone.zend.com/1504/getting-started-with-drizzle-and-php/
Mehta, Chirag (2013). A Journey from SQL to NoSQL to NewSQL. Consultado em
28 de Fevereiro de 2013, no site http://www.cloudave.com/25272/a-journey-from-sqlto-nosql-to-newsql/
More Process (2013) Pros, advantages of SQL (Structured Query Language).
Consultado
em
11
de
Novembro
de
2013,
no
site
http://www.moreprocess.com/sql/pros-advantages-of-sql-structured-query-language
Moore, Gordon E., “Cramming More Components onto Integrated Circuits,”
Electronics, Volume 38, Number 8, April 19, 1965
NewSQL - Wikipédia (2013). Consultado em 25 de Fevereiro de 2013, no site
http://en.wikipedia.org/wiki/NewSQL
NoSQL (s.d.). Consultado em 24 de Março de 2013, no site http://nosqldatabases.org/
NoSQL – Wikipédia (2013). Consultado em 20 de Novembro de 2013, no site
http://pt.wikipedia.org/wiki/NoSQL
NuoDB - Wikipédia (2013). Consultado em 7 de Agosto de 2013, no site
http://en.wikipedia.org/wiki/NuoDB
NuoDB without compromisse (2013) Consultado em 7 de Agosto de 2013, no site
http://go.nuodb.com/rs/nuodb/images/NuoDB_Product_Brochure_Final.pdf
Plew, Ron & Stephens, Ryan (2002) What is SQL? Consultado em 12 de Setembro de
2013,
no
site
http://www.informit.com/library/content.aspx?b=STY_Sql_24hours&seqNum=9
Rouse, Margaret (2005). Exabyte (EB). Consultado em 6 de Março de 2013, no site
http://searchstorage.techtarget.com/definition/exabyte
Rouse, Margaret (2013). 3 Vs (Volume, variety and velocity). Consultado em 10 de
Novembro de 2013, no site http://whatis.techtarget.com/definition/3Vs
68
Bases de Dados NewSQL
Referências
Silva, José da (2013) Moving from SQL to NoSQL. Consultado em 11 de Novembro
de 2013, no site http://blog.josedasilva.net/moving-from-sql-to-nosql/
Stonebraker, Michael (Novembro de 2012). New Opportunities for NewSQL.
Communications of the ACM, Vol. 55 No. 11, Pages 10-11
10.1145/2366316.2366319
Sourceforge (s.d.). NewSQL. Consultado em 25 de Fevereiro de 2013, no site
http://newsql.sourceforge.net/
StormDB overview (2012) Consultado em 22 de Novembro de 2013, no site
http://www.stormdb.com/sites/default/files/downloads/StormDB_Datasheet.pdf
Technology of VoltDB (2013) Consultado em 26 de Novembro de 2013, no site
http://voltdb.com/products/technology
The Architecture & Motivation for NuoDB (2013). Consultado em 11 de Novembro
de
2013,
no
site
http://go.nuodb.com/rs/nuodb/images/TechnicalWhitepaper.pdf?mkt_tok=3RkMMJW
WfF9wsRonvqvBZKXonjHpfsX56OwtX6K%2BlMI%2F0ER3fOvrPUfGjI4JSMp0a
PyQAgobGp5I5FEJSbnYRbBrt6EFXg%3D%3D
TokuDB Documentation (s.d.). Consultado em 2 de Outubro de 2013 no site
http://www.tokutek.com/2011/02/1773/
TPC-H Documentation (2013). Consultado em 11 de Novembro de 2013, no site
http://www.tpc.org/tpch/spec/tpch2.15.0.pdf
Twitter Statistics (2013) Consultado em 10 de Novembro de 2013, no site
http://www.statisticbrain.com/twitter-statistics/
Ulin, Tomas & Young, Rob (2013). Developer and DBA Guide to What´s New in
MySQL 5.6. Consultado em 3 de Abril de 2013, no site http://www.mysql.com/whymysql/white-papers/whats-new-mysql-5-6/
Venkatesh, Prasanna & S, Nirmala (2012). NewSQL – The new way to handle big
data.
Consultado
em
1
de
Março
de
2013,
no
site
http://www.linuxforu.com/2012/01/newsql-handle-big-data/
VoltDB
- Wikipedia (2013).
http://en.wikipedia.org/wiki/VoltDB
Consultado
em
04-04-2013,
no
site
Why StormDB (2013) Consultado em 22 de Novembro de 2013, no site
http://www.stormdb.com/
69
Bases de Dados NewSQL
Referências
YouTube (s.d.) Estatísticas. Consultado em 10 de Novembro de 2013, no site
http://www.youtube.com/yt/press/pt-PT/statistics.html
Zakon, Robert H’obbes’ (2011) Hobbes’ Internet TimeLine 10.2. Consultado em 8 de
Novembro de 2013, no site http://www.zakon.org/robert/Internet/timeline/
70
Bases de Dados NewSQL
Anexo A
Anexos
Tutorial
de
instalação
do
Ubuntu 12.04
Alguns dos sistemas utilizados só funcionam em sistemas operativos Linux e como tal
poderá ser necessário fazer a instalação do mesmo. Neste anexo mostramos o tutorial
de como instalar o Ubuntu 12.04, o sistema operativo utilizado para fazer os testes aos
vários sistemas. Pode fazer o download da versão desejada do sistema operativo
Ubuntu no site http://www.ubuntu.com/
Se já tem o Windows instalado no seu computador poderá querer fazer um dual boot e
para
tal
poderá
seguir
os
tutoriais
disponibilizados
em
http://linuxelement.blogspot.pt/.
Mas poderá também utilizar uma máquina virtual ou instalar apenas o Ubuntu 12.04
no seu computador. Como a primeira opção para testar os sistemas foi a utilização de
uma máquina virtual, o tutorial que se apresenta em seguida é instalação do Ubuntu
12.04 na máquina virtual. No entanto a instalação de raiz no seu computador não será
diferente.
Escolher o idioma pretendido, no caso foi English e seleccionar Install Ubuntu.
71
Bases de Dados NewSQL
Anexos
Se pretender fazer o download de novas actualizações enquanto instala o Ubuntu deve
seleccionar a opção “Download updates while installing”. Neste caso não
seleccionamos nenhuma opção e clicamos em Continue.
Clique em Continue.
Cliquem em Install Now.
72
Bases de Dados NewSQL
Anexos
Escolha o fuso horário do local onde se encontra e clique em Continue.
Clique em Detect Keyboard Layout, prima uma das teclas pedidas e em seguida
clique em Continue.
Em seguida defina o seu nome de utilizador e a password pretendida e clique em
Continue.
73
Bases de Dados NewSQL
Anexos
Aguarde até que a instalação esteja concluída e lhe seja pedido para reiniciar o
computador. Após isto o computador está pronto a ser utilizado.
74
Bases de Dados NewSQL
Anexo B
Anexos
Tutorial
de
instalação
do
MySQL e dos sistemas NewSQL
Neste anexo apresentamos um tutorial de como instalar cada um dos sistemas testados
durante a realização deste projecto.
B.1 MySQL
O Ubuntu tem uma versão do MySQL pronta a instalar mas nem sempre é a versão
mais actual.
Se pretender instalar a versão que vem no Ubuntu basta seguir os passos seguintes:
shell> sudo apt-get install mysql-server
shell> mysql –u root –p
75
Bases de Dados NewSQL
Anexos
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.6.13 MySQL Community Server (GPL)
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names by trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql>
Se pretender instalar a versão mais actual do MySQL que pode ser encontrada no site
http://dev.mysql.com/downloads/mysql/ terá de seguir os seguintes passos:
shell> sudo su
shell> dpkg – i mysql-5.6.13-debian6.0-x86_64.deb
shell> rm mysql-5.6.13-debian6.0-x86_64.deb
shell> service mysql stop && cp -rp /var/lib/mysql /var/lib/mysql.old
shell>
apt-get
remove
mysql-server
mysql-server-5.5
mysql-server-
core-5.5
shell> mv /etc/mysql/my.cnf /etc/my.cnf
shell>
cp
/opt/mysql/server-5.6/support-files/mysql.server
/etc/init.d/mysql.server && update-rc.d mysql.server defaults
shell> apt-get install libaio1
shell> chown -R mysql /opt/mysql/server-5.6/
shell> chgrp -R mysql /opt/mysql/server-5.6/
shell> nano /etc/my.cnf
E deve alterar as seguintes linhas no ficheiro my.cnf:
basedir = /opt/mysql/server-5.6
lc-messages-dir = /opt/mysql/server-5.6/share
Guarde as alterações feitas ao ficheiro.
shell> /opt/mysql/server-5.6/scripts/mysql_install_db --user=mysql -datadir=/var/lib/mysql
shell> rm /opt/mysql/server-5.6/my.cnf
shell> service mysql.server start
shell> mysql –u root –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
76
Bases de Dados NewSQL
Anexos
Your MySQL connection id is 15
Server version: 5.6.13 MySQL Community Server (GPL)
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names by trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql>
B.2 Drizzle
Para
instalar
o
Drizzle
é
necessário
fazer
o
download
do
libdrizzle
(https://launchpad.net/libdrizzle/5.1) e do Drizzle (https://launchpad.net/drizzle/7.2).
Depois de fazer o download destes dois pacotes é necessário descompactar e fazer a
instalação é também necessário fazer a instalação de alguns pacotes do Linux que
serão necessários para que a instalação seja feita correctamente.
shell> sudo su
shell> apt-get install libpcre3-dev libevent-dev autoconf automake
bison ncurses-dev \ libtool librealine-dev libz-dev g++ libssl-dev
uuid-de libpam0g libpam0g-dev gperf \ libboost-all-dev libcloog-ppl0
libprotobuf-dev
shell> tar -xzvf libdrizzle-5.1.4.tar.gz
shell> cd libdrizzle-0.3
shell> ./configure
shell> make
shell> make install
shell> tar -xzvf drizzle-7.2.4-alpha.tar.gz
shell> cd drizzle-7.2.4-alpha
shell> ./configure --with-libprotobuf-prefix=/usr/local
shell> make
shell> make install
shell> groupadd drizzle
shell> useradd -g drizzle drizzle
shell> mkdir /usr/local/drizzle
shell> mkdir /usr/local/drizzle/data
shell> cd /usr/local/drizzle
77
Bases de Dados NewSQL
Anexos
shell> chown -R drizzle .
shell> chgrp -R drizzle .
shell> /home/debora/drizzle-7.2.4-alpha/drizzled/drizzled \
--user=drizzle --basedir=/usr/local/drizzle/ \
--datadir=/usr/local/drizzle/data/ &
shell> /usr/local/bin/drizzle
Welcome to the Drizzle client..
Commands end with ; or \g.
Your Drizzle connection id is 3
Server version: 7.2.4-alpha Source distribution (Trunk)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
drizzle>
/home/debora/drizzle-7.2.4-alpha/drizzled/drizzled é a dirctoria para onde foi
descompactada a pasta do Drizzle e onde está o servidor que se deve executar após a
instalação para ser possivel executar o cliente Drizzle para se utilizar a base de dados.
B.3 TokuDB
O
download
do
TokuDB
pode
ser
feito
através
do
link
http://www.tokutek.com/products/downloads/enterprise-edition-downloads/.
Se nunca tiver criado nenhum grupo utuilizador designado mysql o primeiro passo é a
sua criação.
shell> sudo su
shell> groupadd -g
mysql
shell> useradd -r -u -g mysql mysql
Se já tiver tanto o grupo como o utiluzador mysql criados pode passar este passo à
frente.
shell> mkdir -pv /opt/tokutek
shell> cd /opt/tokutek
shell>
tar
xvzf
/path/to/mysql-5.5.30-tokudb-7.0.4-linux-
x86_64.tar.gz
shell> ln -sv mysql-5.5.30-tokudb-7.1.0-linux-x86_64 mysql
shell> cd mysql
shell> chown -Rv mysql:mysql .
shell> cp -v support-files/my-small.cnf /etc/my.cnf
shell> nano /etc/my.cnf
78
Bases de Dados NewSQL
Anexos
No ficheiro my.cnf vai acrescentar as seguintes linhas na secção [mysqld]:
datadir = /var/lib/mysql
basedir = /opt/tokutek/mysql
user = mysql
Guarde as alterações efectuadas ao ficheiro e feche-o.
shell> scripts/mysql_install_db --user=mysql
shell>
ln
-sv
/opt/tokutek/mysql/support-files/mysql.server
/etc/init.d/mysql
shell> service mysql start
shell> mysql –u mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30-tokudb-7.0.4 MySQL Community Server (GPL)
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names by trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql>
B.4 NuoDB
O
download
do
NuoDB
pode
ser
feito
no
link
http://www.nuodb.com/register/request/developer. Sendo que é necessário efectuar
primeiro o registo e só depois terá acesso ao download.
Faça download do ficheiro .deb que é para o Ubuntu. Após o download é só proceder
à instalação.
shell> sudo dpkg –i nuodb-1.2.linux.x64.deb
E após este simples comando o NuoDb está pronto a ser utilizado.
shell> java -jar /opt/nuodb/jar/nuoagent.jar --broker & (cada vez que
se liga o computador é necessário iniciar o broker)
shell> java -jar /opt/nuodb/jar/nuodbmanager.jar --broker localhost -password bird
nuodb [domain] > start process sm host localhost database 10gb
Process command-line options:
79
Bases de Dados NewSQL
Archive
directory:
Anexos
/opt/nuodb/samples/10gb
(é
necessário
dar
privilégios de escrita para esta pasta senão a inicialização falha)
Initialize archive: true (primeira vez) false (restantes vezes)
Started process: ....... [ pid = 9950 ]
nuodb [domain] > start process te host localhost database 10gb
Process
command-line
options:
--dba-user
dba
--dba-password
dba
(quando se inicia pela primeira vez, depois já não é necessário)
Started process: ...... [ pid = 9961 ]
shell> /opt/nuodb/bin/nuosql 10gb@localhost --user dba --password dba
SQL>
B.5 VoltDB
O download pode ser feito em http://go.voltdb.com/software-downloads. Terá
de se registar e após isso irá receber um e-mail com o link para fazer o seu download.
Deverá clicar no link do Open Source Linux. Após isso é só fazer a instalação.
shell> sudo tar -zxvf voltdb-3.2.tar.gz -C /opt
shell> cd /opt
shell> sudo mv voltdb-3.2 voltdb
shell> export PATH="$PATH:$/opt/voltdb/bin
80
Bases de Dados NewSQL
Anexo C
Anexos
Como utilizar o TPC-H
O TPC-H pode ser encontrado em http://www.tpc.org/tpch/.
Após fazer o download é necessário descompactar a pasta obtida e depois fazer
algumas alterações no ficheiro makefile.suite nas linhas CC, DATABASE, MACHINE,
WORKLOAD.
shell> cd tpch_2_15_0/dbgen
shell> nano makefile.suite
################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC
=
gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#
SQLSERVER, SYBASE, ORACLE,
VECTORWISE
# Current values for MACHINE are:
ATT, DOS, HP, IBM, ICL, MVS,
#
SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are:
TPCH
DATABASE= SQLSERVER
MACHINE = LINUX
WORKLOAD = TPCH
shell> cp makefile.suite makefile
shell> make
shell> ./dbgen –vf –s 1 (-s dá-nos o tamanho da base de dados, neste
caso é de 1GB)
TPC-H Population Generator (Version 2.15.0)
Copyright Transaction Processing Performance Council 1994 - 2010
Generating data for suppliers table/
Preloading text ... 100%
done.
Generating data for customers tabledone.
Generating data for orders/lineitem tablesdone.
Generating data for part/partsupplier tablesdone.
Generating data for nation tabledone.
Generating data for region tabledone.
81
Bases de Dados NewSQL
Anexos
Para gerar as pesquisas é necessário copiar o qgen e o ficheiro dists.dss para dentro da
pasta queries e depois é só executar o qgen para obter o código de cada pesquisa.
shell> ./qgen [numero da pesquisa]
82
Bases de Dados NewSQL
Anexo D
Anexos
Pesquisas do TPC-H
Aqui são apresentadas as pesquisas do TPC-H utilizadas para testar os vários
sistemas.
Q1 - Pricing Summary Report Query
select
l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as
sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
lineitem
where
l_shipdate <= date '1998-12-01' - interval '64' day
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus;
Q2 - Minimum Cost Supplier Query
select
s_acctbal,
s_name,
n_name,
p_partkey,
p_mfgr,
s_address,
s_phone,
s_comment
from
part,
supplier,
partsupp,
nation,
region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and p_size = 13
and p_type like '%BRASS'
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
83
Bases de Dados NewSQL
and r_name = 'AMERICA'
and ps_supplycost = (
select
min(ps_supplycost)
from
partsupp,
supplier,
nation,
region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'AMERICA'
)
order by
s_acctbal desc,
n_name,
s_name,
p_partkey
limit 100;
Q3 - Shipping Priority Query
select
l_orderkey,
sum(l_extendedprice * (1 - l_discount)) as revenue,
o_orderdate,
o_shippriority
from
customer,
orders,
lineitem
where
c_mktsegment = 'MACHINERY'
and c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate < date '1995-03-10'
and l_shipdate > date '1995-03-10'
group by
l_orderkey,
o_orderdate,
o_shippriority
order by
revenue desc,
o_orderdate
limit 10;
Q4 - Order Priority Checking Query
select
o_orderpriority,
count(*) as order_count
from
orders
where
o_orderdate >= date '1995-10-01'
and o_orderdate < date '1995-10-01' + interval '3' month
84
Anexos
Bases de Dados NewSQL
Anexos
and exists (
select
*
from
lineitem
where
l_orderkey = o_orderkey
and l_commitdate < l_receiptdate
)
group by
o_orderpriority
order by
o_orderpriority;
Q5 - Local Supplier Volume Query
select
n_name,
sum(l_extendedprice * (1 - l_discount)) as revenue
from
customer,
orders,
lineitem,
supplier,
nation,
region
where
c_custkey = o_custkey
and l_orderkey = o_orderkey
and l_suppkey = s_suppkey
and c_nationkey = s_nationkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'AFRICA'
and o_orderdate >= date '1993-01-01'
and o_orderdate < date '1993-01-01' + interval '1' year
group by
n_name
order by
revenue desc;
Q6 - Forecasting Revenue Change Query
select
sum(l_extendedprice * l_discount) as revenue
from
lineitem
where
l_shipdate >= date '1997-01-01'
and l_shipdate < date '1997-01-01' + interval '1' year
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
and l_quantity < 24;
85
Bases de Dados NewSQL
Anexos
Q7 - Volume Shipping Query
select
supp_nation,
cust_nation,
l_year,
sum(volume) as revenue
from
(
select
n1.n_name as supp_nation,
n2.n_name as cust_nation,
extract(year from l_shipdate) as l_year,
l_extendedprice * (1 - l_discount) as volume
from
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2
where
s_suppkey = l_suppkey
and o_orderkey = l_orderkey
and c_custkey = o_custkey
and s_nationkey = n1.n_nationkey
and c_nationkey = n2.n_nationkey
and (
(n1.n_name = 'VIETNAM' and n2.n_name
= 'IRAQ')
or (n1.n_name = 'IRAQ' and n2.n_name
= 'VIETNAM'
)
)
and l_shipdate between date '1995-01-01' and
date '1996-12-31'
) as shipping
group by
supp_nation,
cust_nation,
l_year
order by
supp_nation,
cust_nation,
l_year;
Q8 - National Market Share Query
select
o_year,
sum(case
when nation = 'CHINA' then volume
else 0
end) / sum(volume) as mkt_share
from
(
select
extract(year from o_orderdate) as o_year,
l_extendedprice * (1 - l_discount) as volume,
n2.n_name as nation
from
86
Bases de Dados NewSQL
Anexos
part,
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2,
region
where
p_partkey = l_partkey
and s_suppkey = l_suppkey
and l_orderkey = o_orderkey
and o_custkey = c_custkey
and c_nationkey = n1.n_nationkey
and n1.n_regionkey = r_regionkey
and r_name = 'ASIA'
and s_nationkey = n2.n_nationkey
and o_orderdate between date '1995-01-01' and
date '1996-12-31'
and p_type = 'LARGE BURNISHED STEEL'
) as all_nations
group by
o_year
order by
o_year;
Q9 - Product Type Profit Measure Query
select
nation,
o_year,
sum(amount) as sum_profit
from
(
select
n_name as nation,
extract(year from o_orderdate) as o_year,
l_extendedprice * (1 - l_discount) ps_supplycost * l_quantity as amount
from
part,
supplier,
lineitem,
partsupp,
orders,
nation
where
s_suppkey = l_suppkey
and ps_suppkey = l_suppkey
and ps_partkey = l_partkey
and p_partkey = l_partkey
and o_orderkey = l_orderkey
and s_nationkey = n_nationkey
and p_name like '%maroon%'
) as profit
group by
nation,
87
Bases de Dados NewSQL
o_year
order by
nation,
o_year desc;
Q10 - Returned Item Reporting Query
select
c_custkey,
c_name,
sum(l_extendedprice * (1 - l_discount)) as revenue,
c_acctbal,
n_name,
c_address,
c_phone,
c_comment
from
customer,
orders,
lineitem,
nation
where
c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate >= date '1993-02-01'
and o_orderdate < date '1993-02-01' + interval '3' month
and l_returnflag = 'R'
and c_nationkey = n_nationkey
group by
c_custkey,
c_name,
c_acctbal,
c_phone,
n_name,
c_address,
c_comment
order by
revenue desc
limit 20;
Q11 - Important Stock Identification Query
select
ps_partkey,
sum(ps_supplycost * ps_availqty) as value
from
partsupp,
supplier,
nation
where
ps_suppkey = s_suppkey
and s_nationkey = n_nationkey
and n_name = 'UNITED KINGDOM'
group by
ps_partkey having
sum(ps_supplycost * ps_availqty) > (
select
88
Anexos
Bases de Dados NewSQL
Anexos
sum(ps_supplycost * ps_availqty) *
0.0000100000
from
partsupp,
supplier,
nation
where
ps_suppkey = s_suppkey
and s_nationkey = n_nationkey
and n_name = 'UNITED KINGDOM'
)
order by
value desc;
Q12 - Shipping Modes and Order Priority Query
select
l_shipmode,
sum(case
when o_orderpriority = '1-URGENT'
or o_orderpriority = '2-HIGH'
then 1
else 0
end) as high_line_count,
sum(case
when o_orderpriority <> '1-URGENT'
and o_orderpriority <> '2-HIGH'
then 1
else 0
end) as low_line_count
from
orders,
lineitem
where
o_orderkey = l_orderkey
and l_shipmode in ('REG AIR', 'SHIP')
and l_commitdate < l_receiptdate
and l_shipdate < l_commitdate
and l_receiptdate >= date '1997-01-01'
and l_receiptdate < date '1997-01-01' + interval '1' year
group by
l_shipmode
order by
l_shipmode;
Q13 - Customer Distribution Query
select
c_orders.c_count,
count(*) as custdist
from
(
89
Bases de Dados NewSQL
Anexos
select
c_custkey,
count(o_orderkey) as c_count
from
customer left outer join orders on
c_custkey = o_custkey
and o_comment not like
'%pending%accounts%'
group by
c_custkey
) as c_orders
group by
c_count
order by
custdist desc,
c_count desc;
Q14 - Promotion Effect Query
select
100.00 * sum(case
when p_type like 'PROMO%'
then l_extendedprice * (1 - l_discount)
else 0
end) / sum(l_extendedprice * (1 - l_discount)) as
promo_revenue
from
lineitem,
part
where
l_partkey = p_partkey
and l_shipdate >= date '1996-10-01'
and l_shipdate < date '1996-10-01' + interval '1' month;
Q15 - Top Supplier Query
create view revenue0 (supplier_no, total_revenue) as
select
l_suppkey,
sum(l_extendedprice * (1 - l_discount))
from
lineitem
where
l_shipdate >= date '1996-04-01'
and l_shipdate < date '1996-04-01' + interval '3'
month
group by
l_suppkey;
select
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
from
90
Bases de Dados NewSQL
Anexos
supplier,
revenue0
where
s_suppkey = supplier_no
and total_revenue = (
select
max(total_revenue)
from
revenue0
)
order by
s_suppkey;
drop view revenue0;
Q16 - Parts/Supplier Relationship Query
select
p_brand,
p_type,
p_size,
count(distinct ps_suppkey) as supplier_cnt
from
partsupp,
part
where
p_partkey = ps_partkey
and p_brand <> 'Brand#51'
and p_type not like 'SMALL BRUSHED%'
and p_size in (33, 43, 46, 20, 9, 40, 45, 1)
and ps_suppkey not in (
select
s_suppkey
from
supplier
where
s_comment like '%Customer%Complaints%'
)
group by
p_brand,
p_type,
p_size
order by
supplier_cnt desc,
p_brand,
p_type,
p_size;
Q17 - Small-Quantity-Order Revenue Query
select
sum(l_extendedprice) / 7.0 as avg_yearly
from
lineitem,
91
Bases de Dados NewSQL
Anexos
part
where
p_partkey = l_partkey
and p_brand = 'Brand#24'
and p_container = 'SM PACK'
and l_quantity < (
select
0.2 * avg(l_quantity)
from
lineitem
where
l_partkey = p_partkey
);
Q18 - Large Volume Customer Query
select
c_name,
c_custkey,
o_orderkey,
o_orderdate,
o_totalprice,
sum(l_quantity)
from
customer,
orders,
lineitem
where
o_orderkey in (
select
l_orderkey
from
lineitem
group by
l_orderkey having
sum(l_quantity) > 313
)
and c_custkey = o_custkey
and o_orderkey = l_orderkey
group by
c_name,
c_custkey,
o_orderkey,
o_orderdate,
o_totalprice
order by
o_totalprice desc,
o_orderdate
limit 100;
Q19 - Discounted Revenue Query
select
sum(l_extendedprice* (1 - l_discount)) as revenue
from
lineitem,
part
where
(
92
Bases de Dados NewSQL
Anexos
p_partkey = l_partkey
and p_brand = 'Brand#31'
and p_container in ('SM CASE', 'SM BOX', 'SM PACK',
'SM PKG')
and
and
and
and
l_quantity >= 5 and l_quantity <= 5 + 10
p_size between 1 and 5
l_shipmode in ('AIR', 'AIR REG')
l_shipinstruct = 'DELIVER IN PERSON'
)
or
(
p_partkey = l_partkey
and p_brand = 'Brand#43'
and p_container in ('MED BAG', 'MED BOX', 'MED PKG',
'MED PACK')
and
and
and
and
l_quantity >= 20 and l_quantity <= 20 + 10
p_size between 1 and 10
l_shipmode in ('AIR', 'AIR REG')
l_shipinstruct = 'DELIVER IN PERSON'
)
or
(
p_partkey = l_partkey
and p_brand = 'Brand#15'
and p_container in ('LG CASE', 'LG BOX', 'LG PACK',
'LG PKG')
and
and
and
and
l_quantity >= 27 and l_quantity <= 27 + 10
p_size between 1 and 15
l_shipmode in ('AIR', 'AIR REG')
l_shipinstruct = 'DELIVER IN PERSON'
);
Q20 - Potential Part Promotion Query
select
s_name,
s_address
from
supplier,
nation
where
s_suppkey in (
select
ps_suppkey
from
partsupp
where
ps_partkey in (
select
p_partkey
from
part
where
p_name like 'coral%'
)
and ps_availqty > (
93
Bases de Dados NewSQL
Anexos
select
0.5 * sum(l_quantity)
from
lineitem
where
l_partkey = ps_partkey
and l_suppkey = ps_suppkey
and l_shipdate >= date '199501-01'
and l_shipdate < date '199501-01' + interval '1' year
)
)
and s_nationkey = n_nationkey
and n_name = 'IRAN'
order by
s_name;
Q21 - Suppliers Who Kept Orders Waiting Query
select
s_name,
count(*) as numwait
from
supplier,
lineitem l1,
orders,
nation
where
s_suppkey = l1.l_suppkey
and o_orderkey = l1.l_orderkey
and o_orderstatus = 'F'
and l1.l_receiptdate > l1.l_commitdate
and exists (
select
*
from
lineitem l2
where
l2.l_orderkey = l1.l_orderkey
and l2.l_suppkey <> l1.l_suppkey
)
and not exists (
select
*
from
lineitem l3
where
l3.l_orderkey = l1.l_orderkey
and l3.l_suppkey <> l1.l_suppkey
and l3.l_receiptdate > l3.l_commitdate
)
and s_nationkey = n_nationkey
and n_name = 'UNITED KINGDOM'
group by
s_name
order by
numwait desc,
s_name
limit 100;
94
Bases de Dados NewSQL
Anexos
Q22 - Global Sales Opportunity Query
select
cntrycode,
count(*) as numcust,
sum(c_acctbal) as totacctbal
from
(select
substring(c_phone from 1 for 2) as cntrycode,
c_acctbal
from
customer
where
substring(c_phone from 1 for 2) in
('35', '37', '25', '21', '39', '41',
'22')
and c_acctbal > (select
avg(c_acctbal)
from
customer
where
c_acctbal > 0.00
and substring(c_phone from 1
for 2) in
('35', '37', '25',
'21', '39', '41', '22')
)
and not exists (
select
*
from
orders
where
o_custkey = c_custkey
)
) as custsale
group by
cntrycode
order by
cntrycode;
95
Bases de Dados NewSQL
Anexo E
Anexos
Scripts utilizados no VoltDB
Neste anexo apresentamos os scripts que foram necessários criar para uma correcta
utilização do VoltDB.
E.1 Script 1
package script;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Script {
public static void main(String[] args) throws FileNotFoundException, IOException {
Scanner ler1 = new Scanner(new FileInputStream("partsupp.tbl"));
Scanner ler2 = new Scanner(new FileInputStream("orders.tbl"));
Scanner ler3 = new Scanner(new FileInputStream("lineitem.tbl"));
Scanner ler4 = new Scanner(new FileInputStream("nation.tbl"));
Scanner ler5 = new Scanner(new FileInputStream("region.tbl"));
Scanner ler6 = new Scanner(new FileInputStream("part.tbl"));
Scanner ler7 = new Scanner(new FileInputStream("supplier.tbl"));
Scanner ler8 = new Scanner(new FileInputStream("customer.tbl"));
BufferedWriter novo1 = new BufferedWriter(new FileWriter("partsupp2.tbl"));
BufferedWriter novo2 = new BufferedWriter(new FileWriter("orders2.tbl"));
BufferedWriter novo3 = new BufferedWriter(new FileWriter("lineitem2.tbl"));
BufferedWriter novo4 = new BufferedWriter(new FileWriter("nation2.tbl"));
BufferedWriter novo5 = new BufferedWriter(new FileWriter("region2.tbl"));
BufferedWriter novo6 = new BufferedWriter(new FileWriter("part2.tbl"));
BufferedWriter novo7 = new BufferedWriter(new FileWriter("supplier2.tbl"));
BufferedWriter novo8 = new BufferedWriter(new FileWriter("customer2.tbl"));
String linha;
String []campos;
int i=0;
while(ler1.hasNextLine())
{
linha = ler1.nextLine();
campos=linha.split("\\|");
novo1.write(campos[0]+"|");
novo1.write(campos[1]+"|");
novo1.write(campos[2]+"|");
novo1.write(campos[3]+"|");
novo1.write(campos[4]+"\n");
}
while(ler2.hasNextLine())
{
linha = ler2.nextLine();
campos=linha.split("\\|");
novo2.write(campos[0]+"|");
novo2.write(campos[1]+"|");
novo2.write(campos[2]+"|");
novo2.write(campos[3]+"|");
novo2.write(campos[4]+"|");
novo2.write(campos[5]+"|");
novo2.write(campos[6]+"|");
novo2.write(campos[7]+"|");
novo2.write(campos[8]+"\n");
}
while(ler3.hasNextLine())
{
linha = ler3.nextLine();
campos=linha.split("\\|");
novo3.write(campos[0]+"|");
novo3.write(campos[1]+"|");
novo3.write(campos[2]+"|");
novo3.write(campos[3]+"|");
novo3.write(campos[4]+"|");
novo3.write(campos[5]+"|");
96
Bases de Dados NewSQL
Anexos
novo3.write(campos[6]+"|");
novo3.write(campos[7]+"|");
novo3.write(campos[8]+"|");
novo3.write(campos[9]+"|");
novo3.write(campos[10]+"|");
novo3.write(campos[11]+"|");
novo3.write(campos[12]+"|");
novo3.write(campos[13]+"|");
novo3.write(campos[14]+"|");
novo3.write(campos[15]+"\n");
}
while(ler4.hasNextLine())
{
linha = ler4.nextLine();
campos=linha.split("\\|");
novo4.write(campos[0]+"|");
novo4.write(campos[1]+"|");
novo4.write(campos[2]+"|");
novo4.write(campos[3]+"\n");
}
while(ler5.hasNextLine())
{
linha = ler5.nextLine();
campos=linha.split("\\|");
novo5.write(campos[0]+"|");
novo5.write(campos[1]+"|");
novo5.write(campos[2]+"\n");
}
while(ler6.hasNextLine())
{
linha = ler6.nextLine();
campos=linha.split("\\|");
novo6.write(campos[0]+"|");
novo6.write(campos[1]+"|");
novo6.write(campos[2]+"|");
novo6.write(campos[3]+"|");
novo6.write(campos[4]+"|");
novo6.write(campos[5]+"|");
novo6.write(campos[6]+"|");
novo6.write(campos[7]+"|");
novo6.write(campos[8]+"\n");
}
while(ler7.hasNextLine())
{
linha = ler7.nextLine();
campos=linha.split("\\|");
novo7.write(campos[0]+"|");
novo7.write(campos[1]+"|");
novo7.write(campos[2]+"|");
novo7.write(campos[3]+"|");
novo7.write(campos[4]+"|");
novo7.write(campos[5]+"|");
novo7.write(campos[6]+"\n");
}
while(ler8.hasNextLine())
{
linha = ler8.nextLine();
campos=linha.split("\\|");
novo8.write(campos[0]+"|");
novo8.write(campos[1]+"|");
novo8.write(campos[2]+"|");
novo8.write(campos[3]+"|");
novo8.write(campos[4]+"|");
novo8.write(campos[5]+"|");
novo8.write(campos[6]+"|");
novo8.write(campos[7]+"\n");
}
ler1.close();
ler2.close();
ler3.close();
ler4.close();
ler5.close();
97
Bases de Dados NewSQL
Anexos
ler6.close();
ler7.close();
ler8.close();
novo1.close();
novo2.close();
novo3.close();
novo4.close();
novo5.close();
novo6.close();
novo7.close();
novo8.close();
}
}
E.2 Script 2
package datetotimestamp;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import java.text.*;
public class DateToTimestamp {
public
static
void
main(String[]
args)
throws
ParseException,
FileNotFoundException, IOException {
Scanner ler = new Scanner(new FileInputStream("lineitem.tbl"));
Scanner ler2 = new Scanner(new FileInputStream("orders.tbl"));
BufferedWriter novo = new BufferedWriter(new FileWriter("lineitem2.tbl"));
BufferedWriter novo2 = new BufferedWriter(new FileWriter("orders2.tbl"));
String linha;
String []campos;
while(ler.hasNextLine())
{
linha = ler.nextLine();
campos=linha.split("\\|");
String str_date=campos[10];
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd");
date = (Date)formatter.parse(str_date);
Calendar c = Calendar.getInstance();
c.setTime(date);
String str_date2=campos[11];
Date date2 ;
date2 = (Date)formatter.parse(str_date2);
Calendar c2 = Calendar.getInstance();
c2.setTime(date2);
String str_date3=campos[12];
Date date3 ;
date3 = (Date)formatter.parse(str_date3);
Calendar c3 = Calendar.getInstance();
c3.setTime(date3);
novo.write(campos[0]+"|");
novo.write(campos[1]+"|");
novo.write(campos[2]+"|");
novo.write(campos[3]+"|");
novo.write(campos[4]+"|");
novo.write(campos[5]+"|");
novo.write(campos[6]+"|");
novo.write(campos[7]+"|");
novo.write(campos[8]+"|");
novo.write(campos[9]+"|");
novo.write((c.getTimeInMillis()+3600000)*1000+"|");
novo.write((c2.getTimeInMillis()+3600000)*1000+"|");
novo.write((c3.getTimeInMillis()+3600000)*1000+"|");
novo.write(campos[13]+"|");
novo.write(campos[14]+"|");
novo.write(campos[15]);
novo.write("\n");
}
while(ler2.hasNextLine())
{
linha = ler2.nextLine();
98
Bases de Dados NewSQL
Anexos
campos=linha.split("\\|");
String str_date=campos[4];
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd");
date = (Date)formatter.parse(str_date);
Calendar c = Calendar.getInstance();
c.setTime(date);
novo2.write(campos[0]+"|");
novo2.write(campos[1]+"|");
novo2.write(campos[2]+"|");
novo2.write(campos[3]+"|");
novo2.write((c.getTimeInMillis()+3600000)*1000+"|");
novo2.write(campos[5]+"|");
novo2.write(campos[6]+"|");
novo2.write(campos[7]+"|");
novo2.write(campos[8]);
novo2.write("\n");
}
ler.close();
ler2.close();
novo.close();
novo2.close();
}
}
99
Bases de Dados NewSQL
Anexo F
Anexos
Resultados para a base de
dados de 1GB
Por uma questão de não colocarmos resultados repetidos no capítulo da avaliação
experimental decidimos colocar em anexo estes resultados.
Figura F.1 – Tempos de execução na sequência 1 para 1GB
Figura F.2 - Tempos de execução na sequência 2 para 1GB
Figura F.3 - Tempos de execução na sequência 3 para 1GB
100
Bases de Dados NewSQL
Anexos
Tabela F.1 – Valores da pesquisa Q14 para 1GB
S1
S2
S3
MySQL
222.44
212.76
221.42
Drizzle
270.72
270.84
270.15
TokuDB
3.03
2.65
2.75
NuoDB
3.71
3.71
48.47
VoltDB
0.8
1.49
1.38
StormDB
26.25
25.57
26.07
Figura F.4 – Sequência 1 para 1GB (NuoDB vsMysql,Drizzle e TokuDB)
Figura F.5 - Sequência 2 para 1GB (NuoDB vsMysql,Drizzle e TokuDB)
101
Bases de Dados NewSQL
Anexos
Figura F.6 - Sequência 3 para 1GB (NuoDB vsMysql,Drizzle e TokuDB)
Tabela F.2 - Valores da pesquisa Q15 (NuoDB vsMysql,Drizzle e TokuDB)
S1
S2
S3
MySQL
6.95
7
6.89
Drizzle
11.36
11.07
10.89
TokuDB
5.54
5.15
5.23
NuoDB
78387.48
101523.5
71464.52
Tabela F.3 - Valores da pesquisa Q18 (NuoDB vsMysql,Drizzle e TokuDB)
102
S1
S2
S3
MySQL
50.15
47.14
41.33
Drizzle
37.45
34.03
33.96
TokuDB
96.16
95.56
95.77
NuoDB
16347.82
16441.85
15466.51
Bases de Dados NewSQL
Anexos
Tabela F.4 - Valores da pesquisa Q22 (NuoDB vsMysql,Drizzle e TokuDB)
S1
S2
S3
MySQL
0.31
0.31
0.32
Drizzle
0.33
0.35
0.38
TokuDB
0.29
0.75
0.3
NuoDB
7336.45
6550.7
6496.23
Figura F.7 - Sequência 1 para 1GB (VoltDB vsMysql,Drizzle e TokuDB)
Figura F.8 - Sequência 2 para 1GB (VoltDB vsMysql,Drizzle e TokuDB)
103
Bases de Dados NewSQL
Anexos
Figura F.9 - Sequência 3 para 1GB (VoltDB vsMysql,Drizzle e TokuDB)
Figura F.10 – Sequência 1 para 1GB (StormDB vsMysql,Drizzle e TokuDB)
Figura F.11 - Sequência 2 para 1GB (StormDB vsMysql,Drizzle e TokuDB)
104
Bases de Dados NewSQL
Anexos
Figura F.12 - Sequência 3 para 1GB (StormDB vsMysql,Drizzle e TokuDB)
105
Bases de Dados NewSQL
Anexo G
Anexos
Resultados da base de dados
de 10GB
Conforme o que foi feita para as bases de dados de 1GB também para 10GB
colocámos em anexo os resultados obtidos em cada sequência dos vários sistemas de
forma a não colocarmos informação repetida na avaliação experimental
Figura G.1 - Sequência 1 para 10GB
Figura G.2 - Sequência 2 para 10GB
106
Bases de Dados NewSQL
Anexos
Figura G.3 – Sequência 3 para 10GB
Tabela G.1 – Valores da pesquisa Q9 para 10GB
S1
S2
S3
MySQL
48886.18
28602.72
28337.84
Drizzle
27763.26
27560.68
27190.87
TokuDB
578.32
571.30
621.12
Tabela G.2 – Valores da pesquisa Q14 para 10GB
S1
S2
S3
MySQL
164050.16
143110.42
170149.63
Drizzle
70212.9
74529.20
82370.12
TokuDB
73.38
52.89
70.05
StormDB
253.25
250.22
248.81
107
Bases de Dados NewSQL
Anexos
Figura G.4 - Sequência 1 para 10GB (StormDB vsMysql,Drizzle e TokuDB)
Figura G.5- Sequência 2 para 10GB (StormDB vsMysql,Drizzle e TokuDB)
.
Figura G.6 - Sequência 3 para 10GB (StormDB vsMysql,Drizzle e TokuDB)
108
Bases de Dados NewSQL
Anexo H
Anexos
Artigo Científico
Artigo submetido à Revista RISTI (Revista Ibérica de Sistemas e Tecnologias de
Informação). Até ao momento presente não sabemos o resultado desta submissão.
Avaliação Experimental de Bases de Dados NewSQL para
Organizações Virtuais
Débora Ribeiro 1, Jorge Bernardino 1
[email protected], [email protected]
Instituto Politécnico de Coimbra – Instituto Superior de Engenharia de Coimbra, Rua Pedro Nunes, 3030-199,
Coimbra, Portugal
1
DOI: 10.4304/risti.n.pi-pf
Resumo: As bases de dados NewSQL são um conjunto de novas bases de dados
relacionais que proporcionam melhor desempenho que os sistemas actualmente
existentes, mantendo no entanto a utilização da linguagem SQL. Devido às enormes
quantidades de dados armazenadas pelas organizações virtuais este tipo de bases de dados
são adequadas para resolver os tradicionais problemas no processamento desta
informação. Neste artigo mostramos as vantagens das bases de dados NewSQL para as
organizações virtuais, através da avaliação experimental utilizando o benchmark TPC-H.
Nesta avaliação foram utilizadas duas das mais conhecidas bases de dados NewSQL,
Drizzle e TokuDB, utilizando como base de comparação a base de dados MySQL. A
avaliação experimental demonstrou a superioridade das bases de dados NewSQL e como
podem responder às necessidades das organizações virtuais.
Palavras-chave: Bases de dados, NewSQL, Organizações virtuais
Abstract: NewSQL databases are a group of new relational databases that provides better
performance than the currently existing system, maintaining however the use of SQL
language. Because of the large quantities of data stored by virtual organizations this type
of databases are appropriate to solve the traditional problems in processing this
information. In this article we show the advantages of NewSQL databases for the virtual
organizations, through experimental evaluation using the benchmark TPC-H. In this
evaluation were used two of the most know NewSQL databases, Drizzle and TokuDB,
using as basis of comparison the database MySQL. The experimental evaluation has
demonstrated the superiority of NewSQL databases and how they can meet the needs of
virtual organizations.
Key-words: Databases, NewSQL, Virtual organizations
1. Introdução
Hoje em dia a Internet é o principal meio de comunicação utilizado em todo o mundo e por
isso muitas empresas tendem a transformar os seus serviços localizados em espaços físicos em
lojas e espaços virtuais.
109
Bases de Dados NewSQL
Anexos
Desta transformação das empresas, de espaços físicos em espaços virtuais resulta a criação de
Organizações Virtuais. Estas organizações recorrem a redes para ligar pessoas e ideias, de
modo a criar e distribuir serviços e produtos sem as tradicionais limitações físicas das
organizações.
No entanto estas organizações têm como grande desafio conseguir processar e armazenar toda
a informação que necessitam para que a organização funcione correctamente.
Com a Internet disponível para todos, a quantidade de informação transmitida começou a
aumentar a cada ano que passa. Este aumento causa problemas no processamento e
armazenamento de toda essa informação, o que fez com que procurassem novas soluções de
bases de dados. Uma das soluções mais recentes foi proposta com a designação de bases de
dados NewSQL (Stonebraker, 2012). Este novo tipo de bases de dados oferece grande
escalabilidade e alto desempenho com a vantagem de continuarem a preservar a utilização da
linguagem SQL. E para esclarecer, o NewSQL não deve ser tomado à letra, o que existe de
novo sobre os fornecedores NewSQL é o vendedor, e não o SQL. O NewSQL é assim utilizado
para descrever o desenvolvimento de novas bases de dados relacionais e serviços desenhados
para que as arquitecturas distribuídas tenham todos os benefícios do modelo relacional, e
melhorando o desempenho das bases de dados relacionais para que já não seja necessário
escalabilidade horizontal, (Aslett 2, 2011)
De acordo com (Stonebraker, 2012) as soluções NewSQL são as mais viáveis para resolver o
problema de processamento e armazenamento de grandes quantidades de dados como
aquelas que existem nas organizações virtuais.
Assim, neste artigo, pretende-se avaliar bases de dados NewSQL para organizações virtuais
comparando experimentalmente estes sistemas com as soluções actualmente existentes. Para
a avaliação experimental foram consideradas duas das mais utilizadas bases de dados
NewSQL: Drizzle e TokuDB. De salientar que neste trabalho apenas estamos interessados em
analisar soluções NewSQL open-source, por forma a diminuir os gastos de software nas
empresas. A avaliação experimental utilizando o TPC-H benchmark mostrou ganhos
significativos das bases de dados NewSQL quando comparadas com o desempenho da
tradicionalmente mais utilizada base de dados open-source MySQL.
Este artigo está estruturado da seguinte forma: na secção 2 será efectuada uma descrição do
que é o NewSQL e como surgiu. Serão também descritas as principais características das
soluções NewSQL e as respectivas categorias. A secção 3 descreve as bases de dados NewSQL
analisadas: Drizzle e TokuDB, comparando com a bem conhecida MySQL. A secção 4 descreve
sucintamente o ambiente experimental e o TPC-H que foi a benchmark utilizada na avaliação
das várias bases de dados. A secção 5 apresenta os resultados da avaliação experimental.
Finalmente, as conclusões e trabalho futuro são apresentadas na secção 6.
2. Evolução do SQL ao NewSQL
A tecnologia de bases de dados relacionais foi inventada em 1970 por Edgar Frank Codd,
quando trabalhava para a IBM, onde demonstrou a utilidade e funcionalidade trazida por esta
nova tecnologia (Codd, 1970). Juntamente com esta proposta, foi desenvolvida a linguagem
SQL - Structured Query Language (Chamberlin e Boyce, 1974), que se tornou a linguagem
padrão na manipulação de dados armazenados em bases de dados relacionais, (Plew &
Stephens, 2002).
O NewSQL surge assim para designar o conjunto de novas bases de dados relacionais que
visam proporcionar o mesmo desempenho que os sistemas NoSQL para carregamentos de
OLTP e ainda assim manter as garantias ACID (Atomicity, Consistency, Isolation, Durability)
para as bases de dados tradicionais. O NewSQL pretende ainda eliminar as tarefas pesadas
que estão sujeitas a erros de gestão como por exemplo o sharding manual, sem ter de
interromper o funcionamento da base de dados, como é referido em (Mehta, 2013). Sharding
é um tipo de particionamento de bases de dados que separa bases de dados muito grandes em
partes mais pequenas, rápidas e fáceis de gerir chamadas dados shard. A palavra shard
significa uma pequena parte de um todo. Assim o sharding manual implicaria fazer este
particionamento das bases de dados manualmente sem recorrer a qualquer aplicação para o
fazer.
110
Bases de Dados NewSQL
Anexos
Em (Aslett, 2011), é ainda referido que as bases de dados NewSQL foram projectadas para
atender os requisitos de escalabilidade das arquitecturas distribuídas e para melhorar o
desempenho de tal forma que a escalabilidade horizontal deixe de ser uma necessidade,
incluindo novos mecanismos de armazenamento MySQL, tecnologias de sharding
transparente, isto é, dividir os dados horizontalmente, dividir as tabelas por várias máquinas
diminuindo assim o número de registos em cada tabela.
Assim pode dizer-se que o NewSQL pretende preservar o SQL, oferecendo alto desempenho e
escalabilidade enquanto preserva a noção de ACID para transacções.
Segundo (Venkatesh & S, 2012) as principais características das soluções NewSQL são:
 O SQL é o principal mecanismo de interacção com as aplicações;
 Suporta ACID para as transacções;
 Mecanismo de controlo de não-bloqueio simultâneo, para que a leitura em tempo real
não entre em conflito com a escrita;
 Uma arquitectura que proporcione um maior desempenho por nó do que as
tradicionais soluções RDBMS (Relational DataBase Management System);
 Uma arquitectura shared-nothing, expansiva, capaz de funcionar com o maior
número de nós sem bloquear. Arquitectura shared-nothing é uma arquitectura de
computação distribuída, em que cada nó é independente e auto-suficiente. Não há
partilha de memória e de armazenamento em disco entre cada um dos nós existentes.
Com estas características espera-se que o NewSQL seja mais rápido que os tradicionais
sistemas RDBMS.
Embora os sistemas NewSQL variem muito na sua arquitectura interna, há duas
características distintas que são comuns a todos eles e que são o suporte ao modelo de dados
relacional e o uso de SQL como principal interface. Ainda, segundo (Venkatesh & S, 2012) os
sistemas NewSQL podem ser agrupados em três categorias:
 Novas Arquitecturas;
 Novos motores de armazenamento MySQL;
 Sharding Transparente.
As bases de dados testadas, Drizzle e TokuDB, pertencem à categoria Novas Arquitecturas e
Novo motores de armazenamento MySQL, respectivamente.
3. Bases de Dados avaliadas
Para avaliar as bases dados NewSQL e perceber quais as mais-valias que estas podem trazer às
organizações virtuais testámos as bases de dados Drizzle e TokuDB e como base de
comparação utilizámos o MySQL. Nesta secção descrevemos de forma sucinta estas três bases
de dados testadas.
3.1. MySQL
Avaliou-se a base de dados MySQL, como já foi referido anteriormente, para termos uma base
de comparação com uma base de dados que não seja NewSQL. Escolhemos o MySQL por ser
considerado o sistema de base de dados open-source mais utilizado no mundo, (DBEngines
Ranking, 2013).
A versão testada do MySQL foi a última actualmente disponibilizada, a 5.6.13. De referir que a
partir da versão 5.6 o MySQL foi bastante melhorado em relação às versões anteriores em
aspectos, tais como (Ulin & Young, 2013):
 Performance e escalabilidade:
111
Bases de Dados NewSQL
Anexos
o Aumentou para 48 CPU Threads. Threads são as sequências de instrução que são
executadas num programa;
o Em relação à versão 5.5 a performance aumentou 230%;
 INNODB, módulo de armazenamento que oferece transacções do tipo ACID:
o Melhor rendimento nas transacções e mais disponibilidade;
 Optimização:
o Melhor tempo na execução de consultas e melhor ajuste das consultas;
 Melhor desempenho, disponibilidade e integridade dos dados;
 Nova Funcionalidade:
o Acesso NoSQL para INNODB.
Com estas melhorias significativas pretendeu-se eliminar os erros existentes nas versões
anteriores e ainda melhorar o desempenho do MySQL.
3.2.Drizzle
O Projecto Drizzle teve o seu início em 2008. O Drizzle é uma base de dados transaccional,
relacional e open-source que deriva da base de dados MySQL.
O Drizzle foi desenhado para ambientes modernos de 64 bits, arquitectura multi-core, com
gigabytes de memória e para executar várias transacções ao mesmo tempo, (Drizzle
Documentation, 2010).
Embora o Drizzle seja uma derivação do MySQL não foi feito para o substituir mas sim para
atrair os utilizadores que querem a confiabilidade, bases de dados ACID e a fácil utilização que
o MySQL proporciona mas não precisa de todos os recursos que este tem como por exemplos,
procedimentos, triggers ou vistas.
As principais diferenças entre Drizzle e o MySQL são as seguintes, (Getting Started with
Drizzle and PHP, 2009):
 Motor de armazenamento é o InnoDB em vez do MyISAM;
 Suporta menos tipos de dados;
 Utiliza um protocolo diferente de comunicação cliente/servidor;
 Suporta uma arquitectura de módulos extensível que permite aos programadores
compilar apenas os módulos necessários (muito parecido com o Apache ou com o
PHP).
O Drizzle está optimizado para ter várias conexões em simultâneo à base de dados; e não é
possível utilizá-lo em plataformas Windows.
A equipa que programou o Drizzle retirou código que achava desnecessário do MySQL e
converteu o restante código para a linguagem C++ e para bibliotecas mais modernas.
Em termos técnicos, o Drizzle é baseado num micro-kernel projectado para bases de dados a
que se possam acrescentar novos módulos sempre que necessário. E os seus objectivos
relacionais e de durabilidade estão construídos no kernel como projecto padrão.
O Drizzle suporta um número de interfaces como pluggins e assim o kernel faz o menos
possível e é o mais claro possível para os utilizadores. Desta forma é permitido aos
utilizadores aumentar a base de dados escrevendo simples plugins.
Historicamente, os servidores de bases de dados é que definem a infra-estrutura – o utilizador
deve utilizar o sistema de autenticação e de login existentes. O Drizzle tenta uma abordagem
diferente; tem como objectivo a integração com a infra-estrutura existente tornando-se parte
dela e não uma ilha.
112
Bases de Dados NewSQL
Anexos
3.3.TokuDB
O TokuDB é um mecanismo de armazenamento para MySQL que foi especialmente criado
para ter um alto desempenho em carregamentos de escrita intensiva, utilizando para isso a
indexação Fractal Tree, (TokuDB Documentation, s.d.).
A indexação Fractal Tree implementa as mesmas operações que a indexação B-Tree, forma
mais comum de indexação. A diferença está na performance, pois a Fractal Tree substitui I/O
(entradas/saídas) aleatórias por I/O sequenciais; isto é feito para que a largura de banda do
disco tenha uma taxa de utilização máxima, mesmo quando a base de dados cresce. Como
resultado é possível ter mais índices sem haver perda de desempenho; quanto maior for a
tabela mais vantagem o TokuDB consegue obter em relação ao mecanismo de armazenamento
B-Tree, ou seja, mesmo em grande tabelas o TokuDB oferece um bom desempenho sem
particionamento ou sharding pois foi projectado para tabelas muito grandes.
TokuDB é escalável, ACID e tem um mecanismo de armazenamento compatível com MVCC
(Multiversion concurrency control) que proporciona melhorias em consultas através de
índices. MVCC é um método de controlo de concorrência normalmente utilizado em sistemas
de gestão de bases de dados que proporciona simultaneamente acesso às bases de dados e às
linguagens de programação para implementação de memória transaccional.
As principais vantagens do TokuDb em relação ao motor de armazenamento MySQL são as
seguintes, (TokuDB Documentation, s.d.):
 Fazer inserções e pesquisas mais rapidamente em condições reais;
 Escalabilidade máxima, isto é, a base de dados podem ter muitos terabytes de
tamanho;
 Controlo de concorrência, ou seja, permite que a leitura e escrita simultânea na base
de dados sem que esta fique inconsistente;
 Melhoramento no backup de falhas.
Com estas características a equipa que desenhou o TokuDb pretende torná-lo numa base de
dados bastante eficiente e capaz de competir com o MySQL.
4. Ambiente experimental
Para avaliar as bases dados NewSQL open source Drizzle e TokuDB utilizou-se a benchmark
TPC-H (Transaction Performance Council). Os testes foram realizados num computador com
sistema operativo Ubuntu 12.04 64-bit, memória (RAM) de 8GB e um processador Intel®
Core™ i7 CPU 920 @ 2.67GHz x 8.
4.1 TPC-H Benchmark
O TPC-H é uma benckmark de apoio à decisão que consiste num conjunto de pesquisas adhoc orientadas ao negócio.
Esta benchmark avalia o desempenho de vários sistemas de apoio à decisão através da
execução de um conjunto de pesquisas, em condições controladas, nas bases de dados em
teste. As pesquisas do TPC-H dão respostas para questões de negócio reais e simulam as
tradicionais pesquisas ad-hoc dos sistemas de apoio à decisão. Estas pesquisas são muito mais
complexas que a maioria das transacções OLTP e incluem um vasto conjunto de operadores e
restrições de selectividade. As pesquisas geram também uma intensa actividade por parte do
servidor de base de dados do sistema que está a ser testado e são executadas numa base de
dados de acordo com uma população específica e requisitos de tamanho.
O código das pesquisas assim como todas as informações sobre a benchmark e sobre as
tabelas encontra-se em (TPC-H Documentation, 2013).
113
Bases de Dados NewSQL
Anexos
O TPC-H possui oito tabelas, que são apresentadas na tabela 2, e tem também vinte e duas
pesquisas que designamos Q1 a Q22.
Tabela 1 – Caracterização do número de registos das tabelas do TPC-H para 1GB e 10GB
Nº de registos
1GB
10GB
Nation
25
25
Region
5
5
Part
200 000
2 000 000
Supplier
10 000
100 000
Partsupp
800 000
8 000 000
Customer
150 000
1 500 000
Orders
1 500 000
15 000 000
Lineitem
6 001 215
59 986 052
TOTAL
8 661 245
86 586 082
Tabelas
5. Avaliação Experimental
Nesta secção apresentamos os resultados experimentais obtidos nos testes realizados no
MySQL, Drizzle e TokuDB e uma fazemos a análise desses mesmos resultados. A avaliação
experimental foi realizada para dois conjuntos de dados, isto é, bases de dados com tamanho
de 1GB e 10GB.
Os testes foram realizados para cada uma das bases de dados através da execução de três
sequências de pesquisas (S1 a S3) geradas no random.org:

S1 – Q9, Q18, Q8, Q5, Q21, Q2, Q14, Q16, Q13, Q12, Q15, Q19, Q3, Q7, Q22, Q10, Q11,
Q1, Q6, Q17, Q4;

S2 – Q18, Q15, Q21, Q8, Q6, Q14, Q2, Q22, Q10, Q12, Q17, Q1, Q13, Q16, Q3, Q11,
Q19, Q9, Q7, Q5, Q4;

S3 – Q14, Q8, Q13, Q5, Q11, Q22, Q4, Q10, Q1, Q9, Q6, Q3, Q15, Q12, Q2, Q21, Q18,
Q16, Q7, Q17, Q19;
Deste modo pretendemos evitar possíveis efeitos de armazenamento em cache dos resultados
das pesquisas, executando três vezes cada pesquisa de forma aleatória e obtendo depois o
valor médio da execução de cada uma. De referir que foram utilizadas todas as vinte e duas
pesquisas do TPC-H com excepção da pesquisa Q20 que foi retirada dos testes devido a alguns
problemas na sua execução.
5.1. Bases de Dados com 1GB
Nestas experiências são avaliados os motores MySQL, Drizzle e TokuDB utilizando a base de
dados do TPC-H com 1GB. A figura 1 mostra os valores médios obtidos pelas pesquisas do
TPC-H na execução das três sequências (S1,S2 e S3).
114
Bases de Dados NewSQL
Anexos
Figura 1 - Média dos tempos de execução para 1GB
Analisando as pesquisas utilizadas, que podem ser consultadas em (TPC-H Documentation,
2013), é possível verificar que as pesquisas mais demoradas são as pesquisas Q9, Q10, Q13,
Q14, Q18 e Q21, pois são aquelas que pesquisam informação em mais tabelas e que necessitam
de fazer cálculos para chegar a um resultado final. As restantes pesquisas vão pesquisar num
menor número de tabelas e algumas têm de fazer a pesquisa apenas num determinado
intervalo de tempo, o que leva a que a quantidade de informação a pesquisar seja menor.
Como a pesquisa Q14 obtém valores bastante elevados relativamente às restantes, optámos
por não a incluir para não prejudicar a legibilidade da Figura 1. Os resultados médios obtidos
foram de 331.89, 398.54 e 5.11 segundos usando MySQL, Drizzle e TokuDB, respectivamente.
Na figura 2 é mostrado o tempo total de execução para as três sequências S1, S2 e S3,
utilizando cada um dos motores de base de dados em análise.
Figura 2 - Tempo total de execução de todas as sequências para 1GB
Considerando o tempo total de execução para o conjunto das três sequências é possível
verificar que o Drizzle é o que demora mais a executar todas as pesquisas, seguido do MySQL
com uma diferença de 187.52 segundos (3min 7.52seg) de execução.
115
Bases de Dados NewSQL
Anexos
O mais rápido dos três é o TokuDB demorando apenas 904.98 segundos (15min 4.98seg) a
executar todas as pesquisas. Assim tendo em consideração os resultados experimentais é
possível concluir que o TokuDB é mais rápido 47% que o MySQL e 52% mais rápido que o
Drizzle a executar as sequências de pesquisas. Por outro lado o Drizzle é 10% mais lento que o
MySQL.
O Drizzle torna-se mais lento que o MySQL nas bases de dados de 1GB devido a ter sido
desenhado para privilegiar a escalabilidade, executando várias transacções em simultâneo, o
que não acontece neste conjunto de experiências. Nesta avaliação experimental não se
executaram várias transacções em simultâneo e um tamanho de 1Gb ainda não é uma base de
dados que se possa considerar de grande dimensão e por isso o Drizzle acaba por ser mais
lento.
Como foi referido na definição do TokuDB, este foi desenhado para conseguir efectuar
pesquisas mais rapidamente e para trabalhar com tabelas muito grandes. Apesar de na base
de dados de 1Gb não haver tabelas muito grandes nota-se claramente que mesmo assim o
TokuDB conseguiu atingir o objectivo de ter uma velocidade de execução superior aos
restantes.
5.2. Bases de Dados com 10GB
A figura 3 mostra os valores médios obtidos pelas pesquisas do TPC-H na execução das três
sequências (S1, S2 e S3), utilizando uma base de dados de 10GB.
Figura 3 - Média dos tempos de execução para 10GB
As pesquisas Q9 e Q14 têm valores elevados no MySQL e no Drizzle e por isso para simplificar,
não foram incluídas nos gráficos. Para a pesquisa Q9 os resultados médios obtidos foram
35275.58, 27893.58 e 590.25 segundo; e para pesquisa Q14 foram 159103.40, 75704.07 e
64.44 segundo utilizando o MySQL, Drizzle e TokuDB, respectivamente.
Nesta base de dados, por já ter uma dimensão considerável, a pesquisa Q3 que apesar de ir
procurar a sua informação a apenas três das oito tabelas mas que tem de fazer cálculos para
chegar ao resultado final já demora um tempo considerável a executar. E o mesmo acontece
com a Q7 e Q8 que apesar de pesquisarem num dado intervalo de datas, ainda é um intervalo
considerável (dois anos) e pesquisam informação em cinco e sete tabelas respectivamente,
necessitam de fazer cálculos complexos para obter o resultado final.
As pesquisas Q9, Q10, Q13, Q14 e Q18 mantêm nesta base de dados os seus valores elevados
devido ao aumento da quantidade de informação e porque são pesquisas que não limitam a
sua procura a um intervalo de tempo, utilizando toda a informação contida nas tabelas.
116
Bases de Dados NewSQL
Anexos
Figura 4 - Tempo total de execução de todas as sequências para 10GB
Com base nos resultados experimentais é possível concluir que quando se aumenta a
capacidade de armazenamento das bases de dados de 1GB para 10GB o MySQL torna-se mais
lento em relação às bases de dados NewSQL testadas, o que significa que o MySQL apesar de
ter capacidade de armazenamento perde capacidade de desempenho em bases de dados com
tamanho elevado.
Tal como já foi referido anteriormente o Drizzle privilegia escalabilidade e esse é um factor
que se mostra decisivo numa base de dados com um tamanho, que se pode considerar de
dimensão considerável, como a que se utilizou de 10 GB, fazendo com que o Drizzle em
relação ao MySQL tenha uma melhoria de 39%.
Na base de dados de 10Gb é possível ver ainda melhor a capacidade do TokuDb fazer as suas
pesquisas mais rapidamente, pois nesta base de dados já temos tabelas com um tamanho
considerável e é possível verificar que o TokuDb foi realmente projectado para ser mais rápido
que os outros sistemas pois nestas bases de dados o TokuDB destaca-se ainda mais, com uma
melhoria de 95% em relação ao MySQL e 92% em relação ao Drizzle.
Também é possível concluir que o aumento da dimensão da base de dados leva a que demore
muito mais tempo a execução das pesquisas. Apesar da dimensão destas bases de dados ser
dez vezes maior que as anteriores, o aumento do tempo de execução não é proporcional pois
aumenta 391 vezes, 213 vezes e 35 vezes para o MySQL, Drizzle e TokuDB respectivamente.
Assim verifica-se que a base de dados menos afectada pelo aumento da dimensão foi o
ToKuDB que continuou a ter um melhor desempenho em relação às outras bases de dados.
6. Conclusões e Trabalho Futuro
As bases de dados NewSQL foram criadas a pensar na melhoria de desempenho e no
problema da falta de armazenamento que existe actualmente nas organizações, mas também
para corrigir algumas das falhas que existem noutros sistemas de bases de dados. Por isso as
bases de dados NewSQL como o TokuDB e o Drizzle foram projectadas para ter
escalabilidade, isto é, suportarem bases de dados com grande dimensão e ainda serem mais
eficazes a executar pesquisas.
Com esta avaliação experimental foi possível verificar que quando se trata de bases de dados
relativamente pequenas, 1GB, o MySQL ainda tem um desempenho que se pode considerar
positivo mesmo perdendo para o TokuDB. Mas quando aumentamos o tamanho das bases de
117
Bases de Dados NewSQL
Anexos
dados para 10GB nota-se que o MySQL não está preparado para a escalabilidade que as
organizações virtuais poderão vir a necessitar nas suas bases de dados. Quando se trata de
armazenar uma grande quantidade de dados e efectuar pesquisas nessas bases de dados, as
organizações virtuais com certeza que irão ganhar muito quer em escalabilidade quer em
desempenho com os sistemas NewSQL. Assim, estas bases de dados são excelentes opções
para as organizações virtuais que contêm muitos dados.
Como trabalho futuro pretendemos avaliar outros motores de bases de dados NewSQL e
efectuar também a avaliação experimental em organizações virtuais.
Referências
(Aslett , 2011) Aslett, Matthew (2011) NoSQL, NewSQL and Beyond: The answer to
SPRAINed
relational
databases.
Consultado
em
24-03-2013,
no
site
http://blogs.the451group.com/information_management/2011/04/15/nosql-newsqland-beyond/
(Aslett 2, 2011) Aslett, Matthew (2011) What we talk about when we talk about NewSQL.
Consultado
em
20-09-2013,
no
site
http://blogs.the451group.com/information_management/2011/04/06/what-we-talkabout-when-we-talk-about-newsql/
(Chamberlin & Boyce, 1974) Chamberlin, Donald D. and Boyce Raymond F.. 1974. SEQUEL: A
structured English query language. In Proceedings of the 1974 ACM SIGFIDET workshop on
Data description, access and control (now SIGMOD)). ACM, New York, NY, USA, 249-264.
(Codd, 1970) Codd, E. F. (Junho de 1970) A Relational Model of Data for Large Shared Banks.
Communications of ACM13, 6 (June 1970), 377-387. Doi=10.1145/362384.362685.
(DBEngines Ranking, 2013) DBEngines Ranking, (2013) Consultado em 07-10-2013, no site
http://db-engines.com/en/ranking
(Drizzle Documentation, 2010) Drizzle Documentation (2010). Consultado em 03-10-2013, no
site http://docs.drizzle.org/index.html
(Getting Started with Drizzle and PHP, 2009) Getting Started with Drizzle and PHP (2009).
Consultado em 03-10-2013, no site http://devzone.zend.com/1504/getting-started-withdrizzle-and-php/
(Mehta, 2013) Mehta, Chirag (2013). A Journey from SQL to NoSQL to NewSQL. Consultado
em 28-02-2013, no site http://www.cloudave.com/25272/a-journey-from-sql-to-nosqlto-newsql/
(Plew & Stephens, 2002) Plew, Ron & Stephens, Ryan (2002) What is SQL? Consultado em
12-09-2013,
no
site
http://www.informit.com/library/content.aspx?b=STY_Sql_24hours&seqNum=9
(Stonebraker, 2012) Stonebraker, Michael (Novembro de 2012). New Opportunities for
NewSQL. Communications of the ACM, Vol. 55 No. 11, Pages 10-11
10.1145/2366316.2366319
(TokuDB Documentation, s.d.) TokuDB Documentation (s.d.). Consultado em 02-10-2013 no
site http://www.tokutek.com/2011/02/1773/
(TPCH-H Documentation, 2013) TPC-H Documentation (Junho de 2013). Consultado em 2409-2013, no site http://www.tpc.org/tpch/spec/tpch2.15.0.pdf
(Ulin & Young, 2013) Ulin, Tomas & Young, Rob (2013). Developer and DBA Guide to What´s
New in MySQL 5.6. Consultado em 03-04-2013, no site http://www.mysql.com/whymysql/white-papers/whats-new-mysql-5-6/
(Venkatesh & S, 2012) Venkatesh, Prasanna & S, Nirmala (2012). NewSQL – The new way to
handle
big
data.
Consultado
em
01-03-2013,
no
site
http://www.linuxforu.com/2012/01/newsql-handle-big-data/
118
Bases de Dados NewSQL
Anexo I
Anexos
Proposta de Projecto
119
Bases de Dados NewSQL
120
Anexos
Download