2º meritt cc - nosql - e o futuro dos bancos de dados na web
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
NoSQLE 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.
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.
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.
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.
Modelo base● Nome do banco de dados: my_product
● Para o banco de dados: MariaDB/MySQL.
● Schema de dados:
MySQL - Inserir● INSERT INTO users VALUES(1,
"Fernando", "123");
● INSERT INTO favorites VALUES(NULL, "Meritt", 1);
MySQL - Editar● UPDATE usuarios SET nome="Fernando
Jorge Mota" WHERE id=1;
● UPDATE favorites SET obj="Meritt e Python" WHERE user=1;
MySQL - Apagar● DELETE FROM favorites WHERE user=1;
MySQL - Visualizar● SELECT * FROM favorites WHERE
user=1;● SELECT * FROM favorites;
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
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.
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.
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.
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.
MongoDB - Inserir● db.my_product.users.insert
({"username":"Fernando", "password":"123","_id":1});
● db.my_product.favorites.insert({"obj":"Meritt", "user": 1});
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"}});
MongoDB - Apagar● db.my_product.favorites.remove({"user":
1});
MongoDB - Consultar● db.my_product.favorites.find({"user":1})● db.my_product.favorites.find()
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)
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.
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)
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.
Cassandra - Inserir● set users[1][username] = Fernando;
● set users[1][password] = 123;
● set favorites[1][obj] = Meritt;
● set favorites[1][user] = 1;
Cassandra - Editar● set favorites[1][obj] = 'Meritt e Python';
Cassandra - Apagar● del favorites[1];
Cassandra - Consultar● get favorites[1];● list favorites;
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..
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
HBase - Vantagens● Armazenamento de enormes (mas
ENORME mesmo) quantidades de dados
● Alta velocidade de escrita.
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)
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..
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?
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.
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.
Conclusão● É isso..Dúvidas? :D