Introdução
Para quem ainda não sabe nós (Comunidades Java Bahia + Python Bahia + Universidade Católica do Salvador - UCSAL) estamos organizando uma conferência sobre Nosql que acontecerá entre 30/03 e 01/04. Virão nomes de peso sobre o assunto e contamos com apoio de grandes empresas, como Amazon e Microsoft, além claro, da UCSAL.
As incrições para o evento foram abertas oficialmente na última sexta-feira e podem ser feitas nesse link.
Mais informações do evento podem ser obtidas no site oficial.
Para ajudar a trazer mais informações sobre o tema, estamos divulgando informações sobre NoSQL. O nosso amigo Ivan Queiroz iniciou o movimento de posts para trazer conhecimento sobre o assunto e também para ajudar na divulgação do evento e eu decidi dar continuidade. Se ainda não leu o post de Ivan, recomendo que leia, pois ele apresenta conceitos iniciais e fala da classificação desses bancos.
Introdução
Os bancos de dados não relacionais, ou também conhecidos como NoSQL (not only SQL) surgem com objetivo de trazer novas opções de armazenamento de dados diferentes dos nossos modelos relacionais que são baseados em schemas. Sabemos que em computação não existe bala de prata, então não vamos dizer que é a melhor solução para tudo e que deve ser usada sempre, mas deve ser uma opção que deve ser considerada antes de dar uma solução em um projeto. Estamos apresentando um conceito que é conhecido como persistência poliglota.
Definindo tipos
Os bancos NoSQL estão classificados em 4 grande tipos. São eles:
- Chave-valor - Os registros são armazenados como uma coleção de elementos indexados que são recuperados por uma chave. Funciona muito bem para informações no formato de listas;
- Colunar(column family) - Registro são armazenados em uma tabela, mas cada registro pode possuir várias colunas;
- Documento - Cada registro é um documento que pode ou não fazer parte de uma coleção;
- Grafo - Os registros são nós em um grafo interligados por arestas que representam o tipo de relacionamento entre eles;
- Multimodelo - Suporta mais de um paradigma.
Quando usar?
Fica ai uma questão, em qual contexto é sugerido o uso de cada tipo de banco desse? Vou trazer alguns cenários com exemplos para ajudar nesse entendimento (lembrando que não pretendo definir, apenas apresentar alguns cenários)
Chave-valor:
- Exemplos de contexto onde pode ser usado:
- Armazenar dados de sessão, preferência e perfil de usuário
- Dados do carrinho de compras
- Não é recomendado o uso quando a data de persistência é algo importante
- Usualmente utilizado como mecanismo de cache
- Exemplos de empresas que usam:
- Github
- Stackoverflow
- Exemplos de bancos desse tipo:
Colunar (column family):
- Exemplos de contexto onde pode ser usado:
- Tratamento de largo volume de dados (a partir de Terabytes) com demanda de alta performance em leitura e escrita e alta disponibilidade
- Aplicações distribuídas entre diversos datacenters
- Aplicações que podem tolerar uma curta inconsistência entre os dados da replica
- Aplicações com campos dinâmicos
- Exemplos de empresas que usam:
- IBM
- Apple
- Netflix
- Exemplos de bancos desse tipo:
Documento:
- Exemplos de contexto onde pode ser usado: (fonte):
- Os dados não se encaixam no modelo relacional
- Quando seus dados são na verdade objetos
- Quando sua aplicação valida a consistência dos dados, não o banco
- Quando o projeto da aplicação é orientado ao domínio
- Quando seu projeto precisa se adaptar a mudanças
- Quando a escalabilidade é importante
- Quando você não precisa de transações e ACID (atomicity, consistency, isolation, and durability)
- Exemplos de empresas que usam:
- Cisco
- Ebay
- Exemplos de bancos desse tipo:
Grafo:
- Exemplos de contexto onde pode ser usado:
- Toda vez que for necessário persistir um grafo. Um grafo é um elemento composto de um nó e uma relação.
- Cada nó representa uma entidade e uma relação, é uma ligação entre essas entidades.
- Exemplo mais comum: rede social.
- Dados espaciais, sistemas de recomendação também usam esse tipo de banco de dados.
- Exemplos de empresas que usam:
- Nasa
- Walmart
- Exemplos de bancos desse tipo:
- HyperGraphDB
- OrientDB
- Neo4j Teremos mini-curso e palestra sobre esse banco
Multimodelo
- Exemplos de empresas que usam:
- Fox Sports
- Dell
- Ericsson
- Exemplos de bancos desse tipo:
Outras Fontes:
- Post introdutório no blog de Ivan Queiroz
- Livro da Casa do Código - NoSQL Como armazenar os dados de uma aplicação moderna
- http://tech.leroymerlin.com.br/devemos-usar-nosql-e-mongodb
- Nosql Database (reune todos bancos Nosql disponíveis)
- http://www.slideshare.net/steppat/nosql-por-que-e-quando-usar
- http://christiano.me/persistencia-poliglota-e-nosql-palestra-fisl/
- https://neo4j.com/why-graph-databases/
- https://www.thoughtworks.com/insights/blog/nosql-databases-overview
- http://www.3pillarglobal.com/insights/exploring-the-different-types-of-nosql-databases