2º meritt cc - nosql - e o futuro dos bancos de dados na web

36
NoSQL E o futuro dos bancos de dados na web

Upload: meritt-cada-aluno-e-unico

Post on 25-May-2015

508 views

Category:

Technology


3 download

DESCRIPTION

Apresentação da segunda edição do evento Meritt CC, espaço semanal onde cada meritt pode compartilhar seu conhecimento. Nesta apresentação, Fernando Jorge Mota apresentou o conceito de banco de dados NoSQL e três de suas implementações: 1) MongoDB, 2) Cassandra e 3) HBase. Um dos objetivos é que a equipe esteja melhor preparada para quando surgirem desafios que exigirão o uso de diferentes bancos de dados.

TRANSCRIPT

Page 1: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

NoSQLE o futuro dos bancos de dados na web

Page 2: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Visão Geral● Usado em empresas como Google, Facebook e Twitter.

● Criado pelo Google através de um documento sobre seu banco de dados interno, o BigTable.

● Inúmeras implementações.

● Altíssima Performance.

● Altamente escalável, especialmente entre vários computadores.

● Limita número de consultas possíveis.

Page 3: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Principais vantagens● Uso de MapReduce

● Armazenamento de grandes quantidades de dados

● Respostas praticamente instantâneas.

● Grande adoção por grande parte das empresas.

● É fácil encontrar suporte para BD's NoSQL na internet.

● Grande ritmo de atualizações.

Page 4: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Principais desvantagens● A complexidade que você evita no modelo

de banco de dados é repassada para o seu código, para o seu aplicativo.

● Necessário bom nível de conhecimento (e paciência) para se obter um bom uso.

Page 5: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Diferenciais no schema● Modelar um banco de dados relacional é na

maioria das vezes...fácil. No NoSQL, entretanto, por existir várias implementações de bancos de dados, cada software costuma ter seu próprio esquema de dados.

Page 6: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Modelo base● Nome do banco de dados: my_product

● Para o banco de dados: MariaDB/MySQL.

● Schema de dados:

Page 7: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MySQL - Inserir● INSERT INTO users VALUES(1,

"Fernando", "123");

● INSERT INTO favorites VALUES(NULL, "Meritt", 1);

Page 8: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MySQL - Editar● UPDATE usuarios SET nome="Fernando

Jorge Mota" WHERE id=1;

● UPDATE favorites SET obj="Meritt e Python" WHERE user=1;

Page 9: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MySQL - Apagar● DELETE FROM favorites WHERE user=1;

Page 10: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MySQL - Visualizar● SELECT * FROM favorites WHERE

user=1;● SELECT * FROM favorites;

Page 11: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Implementações● Para esta apresentação, foram selecionados

três bancos de dados que merecem nossa atenção. São eles:

○ MongoDB

○ Apache Cassandra

○ Apache Hive

Page 12: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Visão Geral● Criado e suportado pela 10gen.

● Cada registro pode ter no máximo 16 MB.

● Suporte à consultas MapReduce em JavaScript.

● Armazena documentos, sendo o banco de dados NoSQL mais semelhante à um banco de dados relacional.

● Aggregate Framework substitui consultas simples do MySQL.

● Suporte à sharded clusters e replica sets.

Page 13: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Vantagens● Drivers para inúmeras linguagens.

● Simples de usar.

● Multiplataforma. (roda até em Windows!!1)

● Possui alta performance.

● Fácil criação de clusters de máquinas com os sharded clusters.

● Alta confiabilidade com os replica sets.

● Por ser feito em C++, possui fácil instalação e possui pacotes para inúmeras distribuições Linux, facilitando a atualização.

Page 14: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Desvantagens● Conhecido por possuir grande consumo de

memória.

● Vem com modo confiável de escrita desativado por padrão. (é possível ativar manualmente)

● Demora até 100ms para gravar os dados efetivamente no disco.

● Não comprime eficientemente os dados.

Page 15: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Schema● Por ser orientado a documentos, o schema

permanece o mesmo que o de um banco de dados relacional, pelo menos para este caso.

● Dependendo do caso, obviamente o schema muda. Por exemplo, uma relação num banco de dados relacional pode virar um sub-documento no MongoDB..Ou virar uma lista, apenas..Enfim.

Page 16: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Inserir● db.my_product.users.insert

({"username":"Fernando", "password":"123","_id":1});

● db.my_product.favorites.insert({"obj":"Meritt", "user": 1});

Page 17: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Editar● db.my_product.users.update({"_id":1},

{"$set":{"username":"Fernando Jorge Mota"}});

● db.my_product.favorites.update({"user":1}, {"$set":{"obj":"Meritt e Python"}});

Page 18: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Apagar● db.my_product.favorites.remove({"user":

1});

Page 19: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

MongoDB - Consultar● db.my_product.favorites.find({"user":1})● db.my_product.favorites.find()

Page 20: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Visão Geral● Altíssima velocidade.

● Desenvolvido internamente pelo Facebook e mantido atualmente no incubador do Apache Foundation.

● Alta confiabilidade.

● Uso de compressão eficiente de dados.

● Bela arquitetura de dados.

● Possui o melhor do DynamoDB (Amazon) e BigTable (Google)

Page 21: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Vantagens● Armazenamento de enormes quantidades de dados

● Relativamente simples de usar.

● Alta velocidade de escrita. (maior do que de leitura)

● Possui suporte ao CQL, ou Cassandra Query Language, que lembra um pouco consultas SQL.

● Se integra (ainda experimentalmente) com MariaDB, para armazenamento de dados e consultas simples.

● Armazenamento chave-valor.

Page 22: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Desvantagens● Dificuldade para fazer consultas SIMPLES sem

uso de ferramentas adicionais.

● Consultas MapReduce? Só com Hadoop e em Java (ou Hadoop+Hive e um tipo maluco de linguagem SQL)

● Possui poucos drivers. (que são suportados pela comunidade e são muito pouco atualizados)

Page 23: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Schema● No Cassandra, o modelo relacional

persiste, mas em partes: O uso de indíces com grande variação de dados não é recomendado, e os itens são acessados diretamente através da sua chave primária.

Page 24: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Inserir● set users[1][username] = Fernando;

● set users[1][password] = 123;

● set favorites[1][obj] = Meritt;

● set favorites[1][user] = 1;

Page 25: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Editar● set favorites[1][obj] = 'Meritt e Python';

Page 26: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Apagar● del favorites[1];

Page 27: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Consultar● get favorites[1];● list favorites;

Page 28: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Cassandra - Observação● Sim, jovem padawan. 100% do que é possível

fazer com o Apache Cassandra precisa do uso de uma chave primária conhecida.

● É até possível utilizar indices secundários, que permitiriam o uso de qualquer campo. Mas aí entra alguns fatores limitadores, como a não recomendação de usar como indíce campos que não se repetem frequentemente, por exemplo..

Page 29: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

HBase - Visão Geral● Alta velocidade.

● Alta confiabilidade.

● Suporta bilhões de linhas com milhões de colunas cada.

● É mantido na Apache Foundation, assim como o Apache Cassandra.

● Modelado de acordo com o Google BigTable

Page 30: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

HBase - Vantagens● Armazenamento de enormes (mas

ENORME mesmo) quantidades de dados

● Alta velocidade de escrita.

Page 31: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

HBase - Desvantagens● Dificuldade para fazer consultas SIMPLES sem

uso de ferramentas adicionais.

● Consultas MapReduce? Só com Hadoop e em Java (ou Hadoop+Hive e um tipo maluco de linguagem SQL)

● Possui poucos drivers. (que são suportados pela comunidade e são muito pouco atualizados)

Page 32: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

HBase - Schema● O schema no HBase é similar ao que é

possível encontrar no Cassandra. A maior diferença, entretanto, é que enquanto no Cassandra é possível separar por família de colunas (ID) ~> colunas, no HBase fica tudo misturado.

● Além disso..

Page 33: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

HBase - Ops..● Durante os testes com o HBase notou-se que a

configuração é díficil.

● É tão díficil e mal documentada que eu iria gastar mais tempo tentando resolver os problemas da plataforma do que fazendo este slide, por si só. Enfim, tudo o que sabemos é que, de fato, dizem que ele consegue armazenar grandes quantidades de dados..mas será que vale trocar pela dificuldade na configuração?

Page 34: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

ConclusãoDurante o uso dos três bancos de dados percebi que:● MongoDB é legal para aplicações que

precisam de alta velocidade, suporte à clusters mas ainda com estrutura similar ao que é possível encontrar relacionalmente.

● Cassandra é legal se você quer alta velocidade de escrita. E tem paciência.

Page 35: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

ConclusãoDurante o uso dos três bancos de dados percebi que:● HBase é legal......se você tiver tempo para

entender sua natureza obscura.● Sobre o NoSQL... Se você quer entender

definitivamente o por quê suas consultas no MySQL estão lentas, e se você quer que o seu banco de dados escale com facilidade entre vários computadores.

Page 36: 2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web

Conclusão● É isso..Dúvidas? :D