36
NoSQL E o futuro dos bancos de dados na web

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

Embed Size (px)

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.

Citation preview

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