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.
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ão
Durante 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ão
Durante 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

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

  • 1.
    NoSQL E o futurodos bancos de dados na web
  • 2.
    Visão Geral ● Usadoem 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.
  • 3.
    Principais vantagens ● Usode 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.
  • 4.
    Principais desvantagens ● Acomplexidade 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.
  • 5.
    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.
  • 6.
    Modelo base ● Nomedo banco de dados: my_product ● Para o banco de dados: MariaDB/MySQL. ● Schema de dados:
  • 7.
    MySQL - Inserir ●INSERT INTO users VALUES(1, "Fernando", "123"); ● INSERT INTO favorites VALUES(NULL, "Meritt", 1);
  • 8.
    MySQL - Editar ●UPDATE usuarios SET nome="Fernando Jorge Mota" WHERE id=1; ● UPDATE favorites SET obj="Meritt e Python" WHERE user=1;
  • 9.
    MySQL - Apagar ●DELETE FROM favorites WHERE user=1;
  • 10.
    MySQL - Visualizar ●SELECT * FROM favorites WHERE user=1; ● SELECT * FROM favorites;
  • 11.
    Implementações ● Para estaapresentação, foram selecionados três bancos de dados que merecem nossa atenção. São eles: ○ MongoDB ○ Apache Cassandra ○ Apache Hive
  • 12.
    MongoDB - VisãoGeral ● 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.
  • 13.
    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.
  • 14.
    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.
  • 15.
    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.
  • 16.
    MongoDB - Inserir ●db.my_product.users.insert ({"username":"Fernando", "password":" 123","_id":1}); ● db.my_product.favorites.insert({"obj":" Meritt", "user": 1});
  • 17.
    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"}});
  • 18.
    MongoDB - Apagar ●db.my_product.favorites.remove({"user": 1});
  • 19.
    MongoDB - Consultar ●db.my_product.favorites.find({"user":1}) ● db.my_product.favorites.find()
  • 20.
    Cassandra - VisãoGeral ● 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)
  • 21.
    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.
  • 22.
    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)
  • 23.
    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.
  • 24.
    Cassandra - Inserir ●set users[1][username] = Fernando; ● set users[1][password] = 123; ● set favorites[1][obj] = Meritt; ● set favorites[1][user] = 1;
  • 25.
    Cassandra - Editar ●set favorites[1][obj] = 'Meritt e Python';
  • 26.
    Cassandra - Apagar ●del favorites[1];
  • 27.
    Cassandra - Consultar ●get favorites[1]; ● list favorites;
  • 28.
    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..
  • 29.
    HBase - VisãoGeral ● 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
  • 30.
    HBase - Vantagens ●Armazenamento de enormes (mas ENORME mesmo) quantidades de dados ● Alta velocidade de escrita.
  • 31.
    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)
  • 32.
    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..
  • 33.
    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?
  • 34.
    Conclusão Durante o usodos 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.
  • 35.
    Conclusão Durante o usodos 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.
  • 36.