Sistemas de armazenamento de dados em nuvem são alternativas aos SGBDs convencionais mantidos em uma infraestrutura tradicional, e se caracterizam por prover
20 elasticidade e escalabilidade associadas a um baixo custo de investimento. Por isso, esta solução tem sido adotada por empresas de diversos segmentos do mercado. Sejam estas empresas de pequeno porte (como as startups) que visam à redução dos custos operacionais pela terceirização da infraestrutura, ou as grandes corporações que buscam meios eficazes para lidar com o aumento inesperado na carga de trabalho (SOUSA et al., 2010).
As tecnologias de virtualização possibilitaram o desenvolvimento da computação em nuvem, porque permitem o compartilhamento de recursos físicos das máquinas hospedeiras criando um pooling de recursos. Elas também proporcionam maior disponibilidade para os serviços oferecidos. Contudo, a camada de abstração decorrente da virtualização incorre em uma sobrecarga, principalmente, nas operações de leitura e escrita de dados do armazenamento secundário. Avanços nas tecnologias de virtualização possibilitaram reduzir esta sobrecarga. Assim, o impacto no desempenho na recuperação e armazenamento de dados foi minimizado, viabilizando o emprego desta arquitetura nos sistemas de armazenamento de dados (SOROR et al., 2010).
Esta arquitetura de compartilhamento de recursos computacionais entre as várias máquinas, motivou a criação de novos mecanismos para o armazenamento e processamento de dados. Dentre estes, os mais conhecidos são o Google File System (GFS) (GHEMAWAT; GOBIOFF; LEUNG, 2003), o Hadoop Distributed File System (HDFS) (HADOOP, 2012) e o Distributed Hash Table (DHT) (DECANDIA et al., 2007), além de sistemas de processamento de dados distribuídos como o Google MapReduce (DEAN; GHEMAWAT, 2008), Hadoop MapReduce (HADOOP, 2012), entre outras técnicas.
A literatura de BD lista algumas características presentes nos principais sistemas de DaaS, tais como:
Gerenciamento autônomo: com uma carga de trabalho tão dinâmica, hardware e software precisam ser constantemente reconfigurados. Além disso, com a ausência de um administrador de banco de dados, os serviços de computação em nuvem devem prover mecanismos para automatizar ao máximo, a configuração do sistema (PATON et al., 2009).
Gerenciamento de dados multi-inquilino: os sistemas classificados como DaaS são multi-inquilinos, i.e., hospedam vários inquilinos dentro de um único sistema permitindo o compartilhamento de recursos computacionais. Este compartilhamento pode ocorrer em diferentes níveis de isolamento. Em (ELMORE et al., 2011) é apresentado um estudo sobre os vários níveis de isolamento de gerenciamento de dados no DaaS.
Relaxamento das propriedades ACID das transações: réplicas de dados são utilizadas pelos ambientes em nuvem para prover a alta-disponibilidade dos sistemas. Comumente, estas replicações são realizadas entre centros de dados geograficamente distantes. Contudo, Gilbert e Lynch (2002), em (GILBERT;
21 LYNCH, 2002), por meio do teorema Consistency, Availability, Partition
Tolerance (CAP), mostra que em um sistema de banco de dados distribuído apenas
duas dessas três propriedades podem ser atendidas: consistência, disponibilidade e tolerância a partições. Como consequência disto, muitos provedores de acesso relaxam sobre a consistência de dados para garantir a alta-disponibilidade almejada.
Escalabilidade e desempenho: os bancos de dados nas nuvens devem apresentar meios transparentes aos usuários de escalabilidade. A escalabilidade pode ser atingida por duas abordagens: vertical e a horizontal (SOUSA et al., 2010). Na primeira, melhora-se a capacidade de hardware adicionando mais discos, processadores ou memórias, em geral funciona bem para o ambiente de banco de dados, mas traz consigo um grande investimento. Na horizontal a escalabilidade é alcançada pela adição de novas máquinas, permitindo a distribuição dos dados em diferentes SGBDs. Este método é mais complexo e difícil de ser alcançado no ambiente de dados, pois requer um planejamento sobre a fragmentação uma vez que os dados são correlacionados.
Tolerância a falhas e distribuição de dados: a infraestrutura da nuvem é formada por máquinas de baixo custo, por isso é esperado que ocorram falhas. Neste sentido, os provedores de serviço devem ser capazes de oferecer SGBDs que possuam tolerância a falhas. Existem diversas abordagens para obter sistemas tolerantes a falhas como a fragmentação e distribuição de dados (ABADI, 2009). Conforme visto anteriormente, várias são as tecnologias aplicadas aos sistemas de gerenciamento de banco de dados em nuvem disponíveis no mercado. Em (SOUSA et al., 2010), foi proposta uma classificação destes sistemas com base nos seguintes critérios: modelo relacional e suporte nativo para nuvem. O primeiro parâmetro refere-se à utilização do modelo relacional, já o segundo indica se o sistema de gerenciamento foi concebido para atender aos requisitos específicos da computação em nuvem. Na Figura 2.11, são listados exemplos de sistemas conforme esta classificação.
22 No primeiro quadrante estão os SGBDs relacionais desenvolvidos para atuar no contexto de nuvem. Nestes sistemas, o modelo relacional foi escolhido para o armazenamento e processamento de dados, além disso eles foram projetados com base nos requisitos de computação em nuvem. O exemplo mais conhecido é o Windows Azure SQL Database, antigamente conhecido como SQL Azure, da plataforma Microsoft Azure. No segundo quadrante estão os SGBDs relacionais que são utilizados na nuvem, porém eles não foram projetados para computação em nuvem. Como exemplo destes sistemas pode-se citar o Amazon Relational Database Server (Amazon RDS) e o Relational Cloud (CURINO et al., 2011).
No terceiro quadrante estão os sistemas considerados nativos para a nuvem e que não utilizam o modelo relacional. Estes sistemas utilizam a tecnologia de armazenamento de dados do tipo chave-valor ou baseada em colunas. Dentre os sistemas desta categoria, os mais conhecidos são: Amazon Dynamo e o Voldemort – ambos utilizam o modelo chave-valor –, enquanto o BigTable, HBase e o Cassandra são exemplos de sistemas baseados em coluna. No quarto e último quadrante estão os sistemas de armazenamento de dados não-nativos e que não consideram o modelo relacional para armazenamento e processamento de dados. Eles guardam os dados sob a forma de XML, documentos ou grafos. Como exemplos desta categoria pode-se citar o MongoDB e o CouchDB.