19
NoSQL João Clineu José Silva Reginaldo de Oliveira Thiago Perrone Vanilton Pinheiro

Introdução ao Nosql

Embed Size (px)

Citation preview

Page 1: Introdução ao Nosql

NoSQLJoão ClineuJosé SilvaReginaldo de OliveiraThiago PerroneVanilton Pinheiro

Page 2: Introdução ao Nosql

Introdução• Modelo Relacional – 1970

• SGBDs

• Relações

• Tuplas

• Colunas

• Restrições de Integridade

• Normalização

• SQL(Structured Query Language)- IBM

• Algebra Relacional

Page 3: Introdução ao Nosql

Limitações

• Evolução de Sistemas -> Volume de Dados

• Google – Petabytes – 10 bytes

• Upgrade

• Servidores

15

Page 4: Introdução ao Nosql

NoSQL - Not Only SQL

• Propósito

• Solução – Gerenciamento de Arquivos em grande massa.

• Performance

• Surgimento 1998

• Sem Interface SQL

• Livre – Flexível

• MRNN – Modelo Relacional não Normalizado

• Histórico de Implementações

• 2004 – Google – BigTable

• 2007 – Amazon – sistema Dynamo

• 2008 – Facebook – Cassandra

• 2009 CouchDB / Mongo DB

• 2010 - Twitter - MySQL to Cassandra

Page 5: Introdução ao Nosql

Tipos

• Chave-valor

Vantagem - o modelo chave-valor “favorece alta escalabilidade ao invés da consistênciaDesvantagem - omite recursos ricos para consultas (especialmente operações de joins e agregação são postas de lado)

Page 6: Introdução ao Nosql

Tipos• Orientado a documento• Vantagem - permite que novos campos sejam adicionados a um

documento sem que isso cause algum problema na base de dados.

• Consulta direta

• Desvantagem - não possuem esquema, ou seja, os documentos armazenados não precisam possuir estrutura em comum”.

• Duplicidade dos dados.

• Exemplo: tendo como contexto uma estrutura que mantenha a relação de Pessoa com Cargo e fosse criada uma consulta para recuperar o cargo da pessoa “A”, no modelo orientado a documentos bastaria recuperar o documento da “A”. Por que? Conteria o documento de seu cargo, já no modelo relacional seria necessário realizar um join entre a tabela Pessoa e Cargo, o que tem um custo de desempenho para execução, melhor percebido em consultas mais complexas.

Page 7: Introdução ao Nosql

Tipos

• Orientado a grafo

• Vantagem – O fato de “não existir tanta replicação de dados como nos outros modelos, fato que acontece por se aproveitar do relacionamento entre os registros”

• Exemplo: Se houver dois documentos, um representando a pessoa “A” e outra representando a pessoa “B” e ambos conhecem a pessoa “C”, tanto o documento “A” quanto “B” teriam que guardar uma instância da pessoa “C”. No caso dos grafos, isso é resolvido apenas utilizando ligações com arestas que armazenam um valor que indica que a pessoa

• conhece “C”;

Page 8: Introdução ao Nosql

Tipos

• Orientado a colunas• O exemplo da Figura abaixo que modela o conceito de

amigos, onde primeiroNome e sobrenome são colunas pertencentes à família de colunas denominada nome. De maneira semelhante, as colunas endereço, cidade e estado pertencem à família local. Observe que para a linha 001, o amigo Hélio tem diferentes endereços, onde para cada um deles tem um timestamp correspondente. Como já foi dito, o acesso à linha é atômico, ou seja, mesmo 7 coluna sobrenome da linha 001, todas as colunas são retornadas quando esta linha for consultada.

Page 9: Introdução ao Nosql

SGBDs X NoSQL

• Escalonamento

• Vertical – Upgrade

• Horizontal - Servidores (Máquinas ou Nuvem)

• Sharing – Utilização e Armazenamento em conjunto

• Desnormalização

Page 10: Introdução ao Nosql

SGBDs X NoSQL

• Vantagens NoSQL• Disponibilidade

• Otimizado• Em 2008, enquanto ainda utilizava o PostgreSQL, o site que funciona

como rede social ficou 84 horas for do ar. Em 2009, após a utilização do Cassandra, esse tempo foi sensivelmente reduzido para 23 horas e 45 minutos. http://www.computerworld.com/s/article/9161078/Twitter_growth_prompts_switch_from_MySQL_to_NoSQL_database

• Menor tempo de resposta para consultas, paralelismo de atualização de dados e maior grau de concorrência.

• Locks - Controle de Concorrência de Multi-versões (MVCC)

Page 11: Introdução ao Nosql

SGBDs X NoSQL

• Controle de Concorrência: Bloqueios x MVCC

Page 12: Introdução ao Nosql

SGBDs X NoSQL

• Modelo NoSQL• Tal idéia se baseia no Teorema de Eric Brewer conhecido como

Teorema CAP (Consistency, Availability e Partition Tolerance), o qual afirma que é impossível para um sistema computacional distribuído garantir, de forma simultânea, consistência, disponibilidade e tolerância ao particionamento. Segundo esse teorema, um sistema distribuído pode garantir apenas duas dessas três características simultaneamente.

E. Brewer. “Towards Robust Distributed Systems”. (Invited Talk). Principles of Distributed Computing (PODC), Portland, Oregon, Julho 200

Page 13: Introdução ao Nosql

SGBDs X NoSQL

• Modelo NoSQL• Esse conceito é estendido para o paradigma chamado BASE

(Basically Available, Soft state, Eventual consistency) que se caracteriza por ser basicamente disponível, ou seja, o sistema parece estar funcionando o tempo todo; em estado leve, o sistema não precisa ser consistente o tempo todo; e eventualmente consistente, o sistema torna-se consistente no momento devido.

D. Pritchett, “BASE: An Acid Alternative”, ACM Queue vol. 6, no. 3, Julho 2008.

Page 14: Introdução ao Nosql

SGBD X NoSQL

• Modelo Relacional• Esse modelo entra em contraste com o paradigma ACID

(Atomicity, Consistency, Isolation, Durability) comumente associado aos SGBDs relacionais. Enquanto o modelo ACID força a consistência ao final de cada operação, o modelo BASE permite que o banco de dados esteja eventualmente em um estado consistente. A disponibilidade do modelo BASE está relacionada ao fato de que a queda de uma máquina do sistema não leva o sistema como um todo a ser interrompido, representando apenas uma máquina a menos disponível

D. Pritchett, “BASE: An Acid Alternative”, ACM Queue vol. 6, no. 3, Julho 2008

Page 15: Introdução ao Nosql

ExemplosSQL MongoDB

CREATE TABLE USERS (a Number, b Number)

db.createCollection("mycoll")

INSERT INTO USERS VALUES(3,5) db.users.insert({a:3,b:5})

SELECT a,b FROM users db.users.find({}, {a:1,b:1})

SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1})

SELECT * FROM users WHERE age=33 ORDER BY name

db.users.find({age:33}).sort({name:1})

SELECT * FROM users WHERE age>33 db.users.find({age:{$gt:33}})

SELECT * FROM users WHERE age!=33 db.users.find({age:{$ne:33}})

SELECT * FROM users WHERE name LIKE "%Joe%"

db.users.find({name:/Joe/})

SELECT * FROM users WHERE a=1 and b='q'

db.users.find({a:1,b:'q'})

Page 16: Introdução ao Nosql

Exemplos• $lt – menor que

• $gt – maior que

• $lte – menor ou igual a

• $gte – maior ou igual a

• $ne – diferente de

• $in – está em (recebe uma lista)

• $nin – não está em

• $mod – resto igual a (recebe uma lista onde o primeiro valor é o divisor e o segundo o resto)

• $exists – contém ou não o atributo

• $not – negação de uma condição

Page 17: Introdução ao Nosql

NoSQL V Relacional ?

Page 18: Introdução ao Nosql

Co

nc

lu

in

do

Page 19: Introdução ao Nosql

Referências

• http://ulbra-to.br/encoinfo/artigos/2012/Utilizacao_da_Classe_de_Banco_de_%20Dados_NOSQL_como_Solucao_para_Manipulacao_de_Diversas_Estruturas_de_Dados.pdf

• http://www.infobrasil.inf.br/userfiles/27-05-S4-1-68840-Bancos%20de%20Dados%20NoSQL.pdf

• http://www.addlabs.uff.br/sbsc_site/SBSC2011_NoSQL.pdf