Juliana Jenny Kolb
Home > Data Science > Big Data
NoSQL
O termo ‘NoSQL’ se refere a tipos não relacionais de bancos de dados, e esses bancos de dados armazenam dados em um formato diferente das tabelas relacionais. No entanto, os bancos de dados NoSQL podem ser consultados usando APIs de linguagem idiomática, linguagens de consulta estruturadas declarativas e linguagens de consulta por exemplo, razão pela qual também são chamados de bancos de dados “não apenas SQL”.
NoSQL são bancos de dados distribuídos ou sistemas de armazenamento distribuídos.
Podem armazenar dados estruturados, semiestruturados tendo como foco os não estruturados.
Principais características do NoSQL:
- Seus esquemas são dinâmicos, novas informações podem ser adicionadas durante a execução;
- Manipulação através de APIs orientadas a objeto;
- Maior escalabilidade;
- Armazenam vários tipos de dados diferentes.
Técnicas utilizadas para a implementação de suas funcionalidades:
- Map Reduce: permite a manipulação de enormes volumes de dados ao longo de nós em uma rede. Funciona da seguinte forma: na fase map, os problemas são particionados em pequenos problemas que são distribuídos em outros nós na rede. Quando chegam à fase reduce, esses pequenos problemas são resolvidos em cada nó filho e o resultado é passado para o pai, que sendo ele consequentemente filho, repassaria para o seu, até chegar à raiz do problema.
- Consistent hashing: suporta mecanismos de armazenamento e recuperação, onde a quantidade de sites está em constante mudança. É interessante usar essa técnica, pois ela evita que haja uma grande migração de dados entre estes sites, que podem ser alocados ou desalocados para a distribuição dos dados.
- MVCC (Multiversion concurrency control): Oferece suporte a transações paralelas em banco de dados. Por não fazer uso de locks para controle de concorrência, faz com que transações de escrita e leitura sejam feitas simultaneamente.
- Vector clocks: Ordenam eventos que ocorreram em um sistema. Como existe a possibilidade de várias operações estarem acontecendo simultaneamente, o uso de um log de operações informando suas datas se faz importante para informar qual versão de um dado é a mais atual.
Tipos de Bancos de Dados NoSQLs:
- Graph Database: este modelo possui três componentes básicos: nós (vértices dos grafos), os relacionamentos (arestas) e as propriedades (conhecidos também como atributos). Este modelo é visto como multigrafo rotulado e direcionado, onde cada par de nós pode ser conectado por mais de uma aresta. Exemplos: Neo4j, Titan;
- Key Value Database: Este modelo é considerado simples e permite a sua visualização através de uma tabela de hash, no qual há uma chave única e um indicador de determinado dado, podendo ser uma String ou um binário. Exemplos: Amazon DynamoDB, Cassandra, Oracle Berkeley DB;
- Column Database: Este tipo de banco de dados foi criado para armazenar e processar uma grande quantidade de dados distribuídos em diversas máquinas. Aqui existem as chaves, mas neste caso, elas apontam para atributos ou colunas múltiplas. Neste caso, os dados são indexados por uma tripla (coluna, linha e timestamp), a coluna e linha são identificadas por chaves e o timestamp permite diferenciar múltiplas versões de um mesmo dado. Exemplo: Apache HBASE, Google BigTable;
- Document Database: Neste modelo temos um agrupamento de documentos sendo que em cada um destes documentos temos um conjunto de campos e o valor deste campo. Neste modelo temos ausência de esquema pré-definido (schema free). Isto significa que é possível que haja atualizações no documento, com a adição de novos campos, por exemplo, sem afetar adversamente outros documentos. Exemplos: CouchDB, MongoDB.
*Observações importantes retiradas de provas:
- Bancos de dados NoSQL podem ser indexados;
- Os bancos de dados NoSQL usam diversos modelos para acessar e gerenciar dados como documentos, gráficos, chave-valor, em memória e pesquisa.