O que é:
baseia-se em que todos os dados estão guardados em tabelas, pelo conceito de entidade e relacionamento. Os dados são separados de forma única, tentando diminuir ao máximo a redundância, pois a informação é criada pelo conjunto dos dados, onde são as relações
entre as tabelas que fazem esse serviço.
entre as tabelas que fazem esse serviço.
Características:
Tabelas, schema definido, hierarquia, redundância mínima, entidade e relacionamento, formas normais, transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade).
Tabelas, schema definido, hierarquia, redundância mínima, entidade e relacionamento, formas normais, transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade).
Necessidades:
Sistemas locais, financeiros, corporativos; segurança da informação; consistência dos dados.
Mais conhecidos:
DB2, Firebird, InterBase, Microsoft SQL Server, MySQL, Oracle, PostgreSQL.
Banco de Dados NoSQL (Não-Relacionais)
O que é:
Uma solução alternativa para os bancos de dados relacionais, possuem uma alta escalabilidade e desempenho.
Características:
Características:
Registros, schema-free, tolerância à falha, escalabilidade, clusterização, mapreduce, sharding.
Necessidades:
Necessidades:
Sistemas em nuvem, análises sociais, alta escalabilidade, performance na consulta/escrita, replicação.
Vimos as diferenças entre os 2 tipos de Banco de Dados, agora vamos nos aprofundar mais sobre o NoSQL.
NoSQL
O termo NoSQL foi usado pela primeira vez em 1998, como o nome de um banco de dados relacional de código aberto que não possuía um interface SQL. Seu autor, Carlo Strozzi, alega que o movimento NoSQL “é completamente distinto do modelo relacional e, portanto, deveria ser mais apropriadamente chamado ‘NoREL’ ou algo que produzisse o mesmo efeito”. Porém, o termo só voltou a ser assunto em 2009, por um funcionário do Rackspace, Eric Evans, quando Johan Oskarsson, da Last.fm, queria organizar um evento para discutir bancos de dados open source distribuídos.
NoSQL são diferentes sistemas de armazenamento que vieram para suprir necessidades em demandas onde os bancos de dados tradicionais (relacionais) são ineficazes. Muitas dessas bases apresentam características muito interessantes como alta performance, escalabilidade, replicação, suporte à dados estruturados e sub colunas.
O NoSQL surgiu da necessidade de uma performance superior e de uma alta escalabilidade. Os atuais bancos de dados relacionais são muito restritos a isso, sendo necessária a distribuição vertical de servidores, ou seja, quanto mais dados, mais memória e mais disco um servidor precisa. O NoSQL tem uma grande facilidade na distribuição horizontal, ou seja, mais dados, mais servidores, não necessariamente de alta performance. Um grande utilizador desse conceito é o Google, que usa computadores de
pequeno e médio porte para a distribuição dos dados; essa forma de utilização é muito mais eficiente e econômica. Além disso, os bancos de dados NoSQL são muito tolerantes a erros.
No caso dos bancos NoSQL, toda a a informação necessária estará agrupada no mesmo registro, ou seja, em vez de você ter o relacionamento entre várias tabelas para formar uma
informação, ela estará em sua totalidade no mesmo registro.
O NoSQL surgiu da necessidade de uma performance superior e de uma alta escalabilidade. Os atuais bancos de dados relacionais são muito restritos a isso, sendo necessária a distribuição vertical de servidores, ou seja, quanto mais dados, mais memória e mais disco um servidor precisa. O NoSQL tem uma grande facilidade na distribuição horizontal, ou seja, mais dados, mais servidores, não necessariamente de alta performance. Um grande utilizador desse conceito é o Google, que usa computadores de
pequeno e médio porte para a distribuição dos dados; essa forma de utilização é muito mais eficiente e econômica. Além disso, os bancos de dados NoSQL são muito tolerantes a erros.
No caso dos bancos NoSQL, toda a a informação necessária estará agrupada no mesmo registro, ou seja, em vez de você ter o relacionamento entre várias tabelas para formar uma
informação, ela estará em sua totalidade no mesmo registro.
Principais características do Banco de Dados NoSQL
Escalabilidade horizontal:
A medida em que o volume de dados cresce, aumenta a necessidade de escalabilidade e melhoria de desempenho. Dentre as soluções para este problema, temos a escalabilidade vertical, que consiste em aumentar o poder de processamento e armazenamento das máquinas, e a escalabilidade horizontal, onde ocorre um aumento no número de máquinas disponíveis para o armazenamento e processamento de dados. A escalabilidade horizontal tende a ser uma solução mais viável, porém requer que diversas threads/processos de uma tarefa sejam criadas e distribuídas. Neste caso, o uso de um banco de dados relacional poderia ser inviável, uma vez que diversos processos conectando simultaneamente um mesmo conjunto de dados causaria uma alta concorrência, aumentando, consequentemente, o tempo de acesso às tabelas envolvidas. A ausência de bloqueios é uma característica fundamental dos bancos de dados NoSQL, permitindo a escalabilidade horizontal e tornando esta tecnologia adequada para solucionar os problemas de gerenciamento de volumes de dados que crescem exponencialmente, como os dados da Web 2.0.
Ausência de esquema ou esquema flexível:
Uma característica evidente dos bancos de dados NoSQL é a ausência completa ou quase total do esquema que define a estrutura dos dados modelados. Esta ausência de esquema facilita tanto a escalabilidade quanto contribui para um maior aumento da disponibilidade. Em contrapartida, não há garantias da integridade dos dados, o que ocorre nos bancos
relacionais, devido à sua estrutura rígida. Como veremos na Seção 2, estas estruturas são, em sua maioria, baseadas em um conceito de chave-valor, permitindo uma alta flexibilidade na forma como os dados são organizados.
API simples para acesso aos dados:
O objetivo da solução NoSQL é prover uma forma eficiente de acesso aos dados, oferecendo alta disponibilidade e escalabilidade, ou seja, o foco não está em como os dados são armazenados e sim como poderemos recuperá-los de forma eficiente. Para isto, é necessário que APIs sejam desenvolvidas para facilitar o acesso a estas informações, permitindo que qualquer aplicação possa utilizar os dados do banco de forma rápida e eficiente.
Consistência eventual:
É uma característica de bancos NoSQL relacionada ao fato da consistência nem sempre ser mantida entre os diversos pontos de distribuição de dados. Esta característica tem como princípio o teorema CAP (Consistency,Availability e Partition tolerence), que diz que, em um dado momento, só é possível garantir duas de três propriedades entre consistência, disponibilidade e tolerância à partição. No contexto da Web, por exemplo, geralmente são privilegiadas a disponibilidade e a tolerância à partição. Como consequência, as propriedades ACID não podem ser obedecidas simultaneamente. Em vez disso, tem-se outro conjunto de projetos denominado BASE (Basicamente disponível, Estado leve e
Consistente em momento indeterminado). Neste caso, o sistema deve ser planejado
para tolerar inconsistências temporárias a fim de poder priorizar disponibilidade.
Modelos de Dados NoSQL
Os bancos NoSQL são subdivididos pelo seu núcleo, ou seja, como ele trabalha com os dados. Seus núcleos são:
Chave-valor (key-value):
Este modelo é considerado bastante simples e permite a visualização do banco de dados
como uma grande tabela hash. De maneira bem simples, o banco de dados é composto
por um conjunto de chaves, as quais estão associadas um único valor, que pode ser uma
string ou um binário.
Este modelo, por ser de fácil implementação, permite que os dados sejam
rapidamente acessados pela chave, principalmente em sistemas que possuem alta
escalabilidade, contribuindo também para aumentar a disponibilidade de acesso aos
dados.
Exemplos: SimpleBD, Project Voldemort, Berkeley DB.
Orientado a Colunas
Fortemente inspirados pelo BigTable, do Google, eles suportam várias linhas e colunas, além de permitir subcolunas.
Dentre as características deste modelo temos que permite particionamento dos dados, além de oferecer forte consistência, mas não garante alta disponibilidade.
Exemplos: BigTable, HiperTable, Cassandra, HBase.
Este modelo armazena coleções de documentos. Um documento, em geral, é um objeto com um identificador único e um conjunto de campos, que podem ser strings, listas ou documentos aninhados.
Outra característica importante é que este modelo não depende de um esquema rígido, ou seja, não exige uma estrutura fixa como ocorre nos bancos relacionais. Assim, é possível que ocorra uma atualização na estrutura do documento, com a adição de novos campos, por exemplo, sem causar problemas ao banco de dados.
Exemplos: MongoDB, CouchDB, RavenDB.
Orientado a Grafos
Com uma complexibilidade maior, esses bancos de dados guardam objetos, e não registros como os outros tipos de NoSQL. A busca desses itens é feita pela navegação desses objetos.
O modelo orientado a grafos possui três componentes básicos: os nós (são os vértices do
grafo), os relacionamentos (são as arestas) e as propriedades (ou atributos) dos nós e
relacionamentos. Neste caso, o banco de dados pode ser visto como um multigrafo rotulado e direcionado, onde cada par de nós pode ser conectado por mais de uma aresta.
A vantagem de utilização do modelo baseado em grafos fica bastante clara quando consultas complexas são exigidas pelo usuário. Comparado ao modelo relacional, que para estas situações pode ser muito custoso, o modelo orientado a grafos tem um ganho de performance, permitindo um melhor desempenho das aplicações.
Exemplos: BigData, InfoGrid, Neo4J.
Conclusão
A tecnologia NoSQL tem se tornado cada vez mais evidente nos últimos anos. Tal evidência é comprovada pela forte adoção de soluções NoSQL nas grandes empresas,
para o gerenciamento dos seus dados, prova disto é que as redes mais famosas de pesquisa, negócios e até sóciais foram desenvolvidas através de NoSQL, são elas:
Twitter, Facebook, Google, LinkedIn e Amazon.
Parece ser bem promissor, as empresas talvez ficam com receio por ser algo novo no mercado ou talvez pelo custo que parece ser alto, porém tem uma alta aceitação devido a sua performance em geral.
ResponderExcluir