NoSQL e NewSQL
Altierres Washington
Marcelo Henrique
Sumário
● NoSQL
○ O que é NoSQL?
○ Sobre NoSQL
○ Características
○ Modelos de banco de dados NoSQL
○ Chave-valor (key-value)
○ Orientado a documentos
○ Orientado a colunas
○ Orientado a grafos
○ SQL vs NoSQL
Sumário
● MongoDB
○ O que é MongoDB?
○ Instalação MongoBD no Ubuntu
○ Comando básicos
Sumário
● NewSQL
○ O que é NewSql?
○ Sobre o NewSQL
○ Características
○ NewSQL x NoSQL
○ Vantagens e Desvantagens
Sumário
● Redis
○ O que é Redis?
○ Sobre o Redis
○ Funcionabilidade
○ Exemplo de código
O que é NoSQL?
O termo NoSQL foi primeiramente utilizado em 1998 como o nome de um
banco de dados não relacional de código aberto.
Seu autor, Carlo Strozzi, alega que o movimento NoSQL "é completamente
distinto do modelo relacional e portanto deveria ser mais apropriadamente
chamado "NoREL" ou algo que produzisse o mesmo efeito".
Sobre NoSQL
Em 2006, o artigo: BigTable: A Distributed Storage System for Structured
Data, publicado pelo Google em 2006, traz novamente à tona o conceito NoSQL.
A partir de então, os bancos de dados não relacionais passaram a ser
conhecidos como NoSQL, e com crescente popularização das redes sociais, a
geração de conteúdo por dispositivos móveis bem como o número cada vez maior
de pessoas e dispositivos conectados, faz com que o trabalho de armazenamento
de dados com o objetivo de utilizá-los em ferramentas analíticas, comece a
esbarrar nas questões de escalabilidade e custos de manutenção desses dados.
Características
● Escalabilidade Horizontal
● Ausência de esquema (Schema-free) ou esquema flexível
● Suporte nativo a replicação
● API simples para acessar o banco de dados
● Consistência eventual
● Map/reduce
● Consistent hashing
● MVCC (Multiversion concurrency control)
● Vector clocks
Modelos de banco de dados NoSQL
● Existem vários modelos
● Abordaremos brevemente 4 deles
○ Chave-Valor
○ Orientado a documentos
○ Orientado a colunas
○ Orientado a grafos
Chave-valor (key-value)
Este modelo é considerado simples e permite a sua visualização através de
uma tabela de hash, no qual há uma chave única e um indicador de determinado
dado, podendo ser uma String ou um binário.
Orientado a documentos
Como o próprio nome sugere, este modelo armazena coleções e documentos.
Explicando melhor, um documento, no geral, é um objeto identificador único e um conjunto
de campos que podem ser strings, listas ou documentos aninhados.
Orientado a colunas
Este tipo de banco de dados foi criado para armazenar e processar uma grande
quantidade de dados distribuídos em diversas máquinas.
As chaves ainda existem, mas neste caso, elas apontam para atributos ou colunas
múltiplas.
Neste caso, os dados são indexados por uma tripla (coluna, linha e timestamp), a
coluna e linha são identificadas por chaves e o timestamp permite diferenciar múltiplas
versões de um mesmo dado
Orientado a colunas
Orientado a grafos
O modelo de grafos possui três componentes básicos: nós (vértices dos
grafos), os relacionamentos (arestas) e as propriedades (conhecidos também
como atributos).
Este modelo é visto como multigrafo rotulado e direcionado, onde cada par de
nós pode ser conectado por mais de uma aresta.
A utilização deste modelo é muito útil quando é necessário fazer consultas
demasiadamente complexas. O modelo orientado a grafos possui uma alta
performance, permitindo um bom desempenho nas aplicações.
Orientação a grafos
SQL vs NoSQL
MongoDB
O que é?
MongoDB é um banco de dados de código aberto, gratuito, de alta
performance, sem esquemas e orientado à documentos, lançado em fevereiro de
2009 pela empresa 10gen.
Foi escrito na linguagem de programação C++ (o que o torna portável para
diferentes sistemas operacionais) e seu desenvolvimento durou quase 2 anos,
tendo iniciado em 2007.
O MongoDB trabalha com o NoSQL na estrutura de orientado à documentos.
Instalação MongoBD no Ubuntu
● Importar chave pública
○ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv
2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
● Adicionar dependências
○ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu
trusty/mongodb-org/3.6 multiverse" | sudo tee
/etc/apt/sources.list.d/mongodb-org-3.6.list
● Atualizar pacote de dados
○ sudo apt-get update
● Instale o Mongo
○ sudo apt-get install -y mongodb-org
Comando básicos
● db.version()
● db.help()
● db.stats()
● show databases
● use banco
● show collections == show tables
● db.conta.find()
● db.conta.insert({conta:”120.120.09-08”,agencia:”100-00”})
● db.conta.find().pretty();
● db.conta.find({agencia:”100-00”});
Comando básicos
db.conta.update({conta:”123.456.789-00”},{conta:”120001-990”,agencia:”1290-09”}
)
db.conta.insert({conta:”123.122-121”,agencia:”120-00”,saldo:1000})
Redis
O que é?
É um banco de dados não relacional, também conhecido por NOSQL (Not Only
SQL), que foi criado por Salvatore Sanfiippo e liberado de forma open-source em
2009.
Redis significa REmote DIctionary Server, e já pelo seu significado, já podemos ter
uma ideia de como ele trabalha e armazena os dados. Os dados são armazenados
na forma de chave-valor, lembrando a estrutura do Dictionary do .net e do Map do
Java. Um ponto importante que vale chamar a atenção aqui, é que o valor utilizado
como chave no Redis pode possuir diferentes formatos, podendo ser strings,
hashes, lists, sets e sets ordenados.
Sobre o REDIS
O Redis é basicamente um dicionário chave-valor. Ou seja, cada chave (ou
endereço, ou CPF, ou qualquer outro termo que te faça sentido) está associada a
um valor. O Redis armazena em memória RAM os dados, e de tempos em tempos
transfere o conteúdo da memória para o disco se ocorreu uma determina
quantidade mudanças nos dados.
Outra característica importante do Redis, é que todos os comandos executados
são atômicos, isso graças à forma com que o Redis é executado, sendo ele uma
aplicação single-threaded, que executa um comando por vez.
Funcionabilidade
O Redis é um servidor TCP, e seu funcionamento baseado em um
modelo cliente-servidor é bastante simples, dessa forma, quando uma
requisição é feita para o Redis, um comando é enviado ao servidor
(Redis) pelo cliente, e este fica aguardando uma resposta do servidor
através de uma conexão estabelecida via socket. Quando o servidor
processa o comando, ele envia a resposta de volta ao cliente.
Baseado nessas características, podemos já imaginar uma série de aplicações
para o Redis, porém, precisamos ter um pouco de cuidado, e saber aonde ele
pode ser utilizado, e em quais situações ele não pode ser utilizado. Para isso é
importante relembrar alguns pontos sobre o Redis:
● Ele não é e não substitui um banco de dados relacional como o MySQL,
Oracle, SQL Server, FireBird, PostgreSQL;
● Não é um banco de dados orientado a documentos como o MongoDB;
● Não é um banco de dados que você deveria usar para armazenar todos os
seus dados;
● Não possui suporte oficial ao Windows;
● Não utiliza o protocolo HTTP(segurança).
Dado que o campo “cod” é uma referência única para este produto neste catálogo,
poderíamos transformá-lo em chave e salvar um hash com todas as propriedades
do produto, como mostra o código abaixo:
catalogo_xml.each do |product_xml|
# Uma vez que transformamos o xml do produto em um hash...
product = parser_to_hash(product_xml)
# Para cada identificador cod salvamos todas as
# informações deste produto
redis[:product].set(product[:cod], Marshal::dump(product))
end
end
Exemplo de código
Comandos Básicos
NewSQL
O que é NewSQL?
O NewSQL é uma classe de modernos sistemas de gerenciamento
de banco de dados relacionais que procuram fornecer o mesmo
desempenho escalável dos sistemas NoSQL para cargas de trabalho de
leitura e gravação de processamento de transações on-line (OLTP)
enquanto ainda mantêm as garantias ACID de um sistema de banco de
dados tradicional.
Sobre o NewSQL
O analista Matthew Aslett do 451 criou o termo quando
desenvolviam um trabalho de pesquisa no ano de 2011, que aborda o
surgimento de novos sistemas de banco de dados como desafiadores
para fornecedores estabelecidos. Muitos sistemas empresariais que
manipulam dados de alto perfil (por exemplo, sistemas de processamento
de pedidos e financeiros) também precisam ser dimensionados, mas não
podem usar as soluções NoSQL porque não podem renunciar aos
requisitos de transação e consistência fortes.
Características
● Linguagem SQL como meio de interação entre o SGBD e a
aplicação.
● Suporte para transações ACID.
● Controle de concorrência não bloqueante, para que as leituras e
escritas não causem conflitos entre si.
● Arquitetura que fornece um maior desempenho por nó de
processamento;
● Arquitetura escalável, com memória distribuída e com capacidade de
funcionar em um aglomerado com um grande número de
nós(computadoresservidores).
NoSQL x NewSQL
Característica NoSQL NewSQL
Cumprimento ACID (dados, integridade de transações) Não Sim
OLAP / OLTP Não Sim
A análise dos dados (agregados, transformar, etc.) Não Sim
Rigidez do esquema (mapeamento rigoroso da modelo) Não Talvez
Flexibilidade formato de dados Sim Talvez
A computação distribuída Sim Sim
Escala para cima (vertical) / Dimensionar (horizontal) Sim Sim
Desempenho com crescimento de dados Rápido Muito Rápido
Sobrecarga de desempenho Moderado Mínimo
Popularidade / Suporte comunidade Crescente Crescendo lentamente
Vantagens e Desvantagens
AS VANTAGENS DO NEWSQL:
● Minimizar a complexidade do aplicativo com maior consistência e, muitas vezes,
suporte transacional completo.
● SQL familiar e ferramentas padrão.
● Análise mais rica que alavanca SQL e extensões.
● Muitos sistemas oferecem agrupamento de estilo NoSQL com modelos de dados e
consultas mais tradicionais.
AS DESVANTAGENS DO NEWSQL:
● Nenhum sistema NewSQL é tão geral quanto os sistemas tradicionais de SQL
estabelecidos.
● Arquiteturas em memória podem ser inadequadas para volumes que excedem
alguns terabytes.
● Oferece apenas acesso parcial à ferramenta rica de sistemas SQL tradicionais.
Conclusão
Antes de qualquer coisa, considere avaliar as ofertas do NoSQL se
você favorecer a disponibilidade ou possuir necessidades especiais do
modelo de dados. Considere o NewSQL se você quiser a velocidade em
escala do NoSQL, mas com consistência mais forte e linguagem de
consulta SQL.
Referências
● https://www.mongodb.com/
● https://imasters.com.br/banco-de-dados/mongodb-para-iniciantes-em-nosql/?trace=151
9021197&source=single
● https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
● https://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044
● https://www.devmedia.com.br/conheca-a-geracao-de-banco-de-dados-nosql-e-newsql/
33202
● https://www.infoq.com/br/news/2011/06/newsql
● http://dataconomy.com/2015/08/sql-vs-nosql-vs-newsql-finding-the-right-solution/
● http://desenvolvedor.ninja/redis-o-que-e-e-para-que-serve/
● https://imasters.com.br/artigo/18288/banco-de-dados/usando-o-banco-de-dados-nosql-
redis-para-otimizar-sistemas-de-alta-escalabilidade?trace=1519021197&source=single
● http://www.fabiolabs.com.br/2011/04/redis-um-banco-de-dados-nao-relacional/

NoSql e NewSql

  • 1.
    NoSQL e NewSQL AltierresWashington Marcelo Henrique
  • 2.
    Sumário ● NoSQL ○ Oque é NoSQL? ○ Sobre NoSQL ○ Características ○ Modelos de banco de dados NoSQL ○ Chave-valor (key-value) ○ Orientado a documentos ○ Orientado a colunas ○ Orientado a grafos ○ SQL vs NoSQL
  • 3.
    Sumário ● MongoDB ○ Oque é MongoDB? ○ Instalação MongoBD no Ubuntu ○ Comando básicos
  • 4.
    Sumário ● NewSQL ○ Oque é NewSql? ○ Sobre o NewSQL ○ Características ○ NewSQL x NoSQL ○ Vantagens e Desvantagens
  • 5.
    Sumário ● Redis ○ Oque é Redis? ○ Sobre o Redis ○ Funcionabilidade ○ Exemplo de código
  • 6.
    O que éNoSQL? O termo NoSQL foi primeiramente utilizado em 1998 como o nome de um banco de dados não relacional de código aberto. Seu autor, Carlo Strozzi, alega que o movimento NoSQL "é completamente distinto do modelo relacional e portanto deveria ser mais apropriadamente chamado "NoREL" ou algo que produzisse o mesmo efeito".
  • 7.
    Sobre NoSQL Em 2006,o artigo: BigTable: A Distributed Storage System for Structured Data, publicado pelo Google em 2006, traz novamente à tona o conceito NoSQL. A partir de então, os bancos de dados não relacionais passaram a ser conhecidos como NoSQL, e com crescente popularização das redes sociais, a geração de conteúdo por dispositivos móveis bem como o número cada vez maior de pessoas e dispositivos conectados, faz com que o trabalho de armazenamento de dados com o objetivo de utilizá-los em ferramentas analíticas, comece a esbarrar nas questões de escalabilidade e custos de manutenção desses dados.
  • 8.
    Características ● Escalabilidade Horizontal ●Ausência de esquema (Schema-free) ou esquema flexível ● Suporte nativo a replicação ● API simples para acessar o banco de dados ● Consistência eventual ● Map/reduce ● Consistent hashing ● MVCC (Multiversion concurrency control) ● Vector clocks
  • 9.
    Modelos de bancode dados NoSQL ● Existem vários modelos ● Abordaremos brevemente 4 deles ○ Chave-Valor ○ Orientado a documentos ○ Orientado a colunas ○ Orientado a grafos
  • 10.
    Chave-valor (key-value) Este modeloé considerado simples e permite a sua visualização através de uma tabela de hash, no qual há uma chave única e um indicador de determinado dado, podendo ser uma String ou um binário.
  • 11.
    Orientado a documentos Comoo próprio nome sugere, este modelo armazena coleções e documentos. Explicando melhor, um documento, no geral, é um objeto identificador único e um conjunto de campos que podem ser strings, listas ou documentos aninhados.
  • 13.
    Orientado a colunas Estetipo de banco de dados foi criado para armazenar e processar uma grande quantidade de dados distribuídos em diversas máquinas. As chaves ainda existem, mas neste caso, elas apontam para atributos ou colunas múltiplas. Neste caso, os dados são indexados por uma tripla (coluna, linha e timestamp), a coluna e linha são identificadas por chaves e o timestamp permite diferenciar múltiplas versões de um mesmo dado
  • 15.
  • 16.
    Orientado a grafos Omodelo de grafos possui três componentes básicos: nós (vértices dos grafos), os relacionamentos (arestas) e as propriedades (conhecidos também como atributos). Este modelo é visto como multigrafo rotulado e direcionado, onde cada par de nós pode ser conectado por mais de uma aresta. A utilização deste modelo é muito útil quando é necessário fazer consultas demasiadamente complexas. O modelo orientado a grafos possui uma alta performance, permitindo um bom desempenho nas aplicações.
  • 17.
  • 18.
  • 19.
  • 20.
    O que é? MongoDBé um banco de dados de código aberto, gratuito, de alta performance, sem esquemas e orientado à documentos, lançado em fevereiro de 2009 pela empresa 10gen. Foi escrito na linguagem de programação C++ (o que o torna portável para diferentes sistemas operacionais) e seu desenvolvimento durou quase 2 anos, tendo iniciado em 2007. O MongoDB trabalha com o NoSQL na estrutura de orientado à documentos.
  • 22.
    Instalação MongoBD noUbuntu ● Importar chave pública ○ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 ● Adicionar dependências ○ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list ● Atualizar pacote de dados ○ sudo apt-get update ● Instale o Mongo ○ sudo apt-get install -y mongodb-org
  • 23.
    Comando básicos ● db.version() ●db.help() ● db.stats() ● show databases ● use banco ● show collections == show tables ● db.conta.find() ● db.conta.insert({conta:”120.120.09-08”,agencia:”100-00”}) ● db.conta.find().pretty(); ● db.conta.find({agencia:”100-00”});
  • 24.
  • 25.
  • 26.
    O que é? Éum banco de dados não relacional, também conhecido por NOSQL (Not Only SQL), que foi criado por Salvatore Sanfiippo e liberado de forma open-source em 2009. Redis significa REmote DIctionary Server, e já pelo seu significado, já podemos ter uma ideia de como ele trabalha e armazena os dados. Os dados são armazenados na forma de chave-valor, lembrando a estrutura do Dictionary do .net e do Map do Java. Um ponto importante que vale chamar a atenção aqui, é que o valor utilizado como chave no Redis pode possuir diferentes formatos, podendo ser strings, hashes, lists, sets e sets ordenados.
  • 27.
    Sobre o REDIS ORedis é basicamente um dicionário chave-valor. Ou seja, cada chave (ou endereço, ou CPF, ou qualquer outro termo que te faça sentido) está associada a um valor. O Redis armazena em memória RAM os dados, e de tempos em tempos transfere o conteúdo da memória para o disco se ocorreu uma determina quantidade mudanças nos dados. Outra característica importante do Redis, é que todos os comandos executados são atômicos, isso graças à forma com que o Redis é executado, sendo ele uma aplicação single-threaded, que executa um comando por vez.
  • 28.
    Funcionabilidade O Redis éum servidor TCP, e seu funcionamento baseado em um modelo cliente-servidor é bastante simples, dessa forma, quando uma requisição é feita para o Redis, um comando é enviado ao servidor (Redis) pelo cliente, e este fica aguardando uma resposta do servidor através de uma conexão estabelecida via socket. Quando o servidor processa o comando, ele envia a resposta de volta ao cliente.
  • 29.
    Baseado nessas características,podemos já imaginar uma série de aplicações para o Redis, porém, precisamos ter um pouco de cuidado, e saber aonde ele pode ser utilizado, e em quais situações ele não pode ser utilizado. Para isso é importante relembrar alguns pontos sobre o Redis: ● Ele não é e não substitui um banco de dados relacional como o MySQL, Oracle, SQL Server, FireBird, PostgreSQL; ● Não é um banco de dados orientado a documentos como o MongoDB; ● Não é um banco de dados que você deveria usar para armazenar todos os seus dados; ● Não possui suporte oficial ao Windows; ● Não utiliza o protocolo HTTP(segurança).
  • 30.
    Dado que ocampo “cod” é uma referência única para este produto neste catálogo, poderíamos transformá-lo em chave e salvar um hash com todas as propriedades do produto, como mostra o código abaixo: catalogo_xml.each do |product_xml| # Uma vez que transformamos o xml do produto em um hash... product = parser_to_hash(product_xml) # Para cada identificador cod salvamos todas as # informações deste produto redis[:product].set(product[:cod], Marshal::dump(product)) end end Exemplo de código
  • 31.
  • 32.
  • 33.
    O que éNewSQL? O NewSQL é uma classe de modernos sistemas de gerenciamento de banco de dados relacionais que procuram fornecer o mesmo desempenho escalável dos sistemas NoSQL para cargas de trabalho de leitura e gravação de processamento de transações on-line (OLTP) enquanto ainda mantêm as garantias ACID de um sistema de banco de dados tradicional.
  • 34.
    Sobre o NewSQL Oanalista Matthew Aslett do 451 criou o termo quando desenvolviam um trabalho de pesquisa no ano de 2011, que aborda o surgimento de novos sistemas de banco de dados como desafiadores para fornecedores estabelecidos. Muitos sistemas empresariais que manipulam dados de alto perfil (por exemplo, sistemas de processamento de pedidos e financeiros) também precisam ser dimensionados, mas não podem usar as soluções NoSQL porque não podem renunciar aos requisitos de transação e consistência fortes.
  • 35.
    Características ● Linguagem SQLcomo meio de interação entre o SGBD e a aplicação. ● Suporte para transações ACID. ● Controle de concorrência não bloqueante, para que as leituras e escritas não causem conflitos entre si. ● Arquitetura que fornece um maior desempenho por nó de processamento; ● Arquitetura escalável, com memória distribuída e com capacidade de funcionar em um aglomerado com um grande número de nós(computadoresservidores).
  • 36.
    NoSQL x NewSQL CaracterísticaNoSQL NewSQL Cumprimento ACID (dados, integridade de transações) Não Sim OLAP / OLTP Não Sim A análise dos dados (agregados, transformar, etc.) Não Sim Rigidez do esquema (mapeamento rigoroso da modelo) Não Talvez Flexibilidade formato de dados Sim Talvez A computação distribuída Sim Sim Escala para cima (vertical) / Dimensionar (horizontal) Sim Sim Desempenho com crescimento de dados Rápido Muito Rápido Sobrecarga de desempenho Moderado Mínimo Popularidade / Suporte comunidade Crescente Crescendo lentamente
  • 37.
    Vantagens e Desvantagens ASVANTAGENS DO NEWSQL: ● Minimizar a complexidade do aplicativo com maior consistência e, muitas vezes, suporte transacional completo. ● SQL familiar e ferramentas padrão. ● Análise mais rica que alavanca SQL e extensões. ● Muitos sistemas oferecem agrupamento de estilo NoSQL com modelos de dados e consultas mais tradicionais. AS DESVANTAGENS DO NEWSQL: ● Nenhum sistema NewSQL é tão geral quanto os sistemas tradicionais de SQL estabelecidos. ● Arquiteturas em memória podem ser inadequadas para volumes que excedem alguns terabytes. ● Oferece apenas acesso parcial à ferramenta rica de sistemas SQL tradicionais.
  • 38.
    Conclusão Antes de qualquercoisa, considere avaliar as ofertas do NoSQL se você favorecer a disponibilidade ou possuir necessidades especiais do modelo de dados. Considere o NewSQL se você quiser a velocidade em escala do NoSQL, mas com consistência mais forte e linguagem de consulta SQL.
  • 39.
    Referências ● https://www.mongodb.com/ ● https://imasters.com.br/banco-de-dados/mongodb-para-iniciantes-em-nosql/?trace=151 9021197&source=single ●https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/ ● https://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044 ● https://www.devmedia.com.br/conheca-a-geracao-de-banco-de-dados-nosql-e-newsql/ 33202 ● https://www.infoq.com/br/news/2011/06/newsql ● http://dataconomy.com/2015/08/sql-vs-nosql-vs-newsql-finding-the-right-solution/ ● http://desenvolvedor.ninja/redis-o-que-e-e-para-que-serve/ ● https://imasters.com.br/artigo/18288/banco-de-dados/usando-o-banco-de-dados-nosql- redis-para-otimizar-sistemas-de-alta-escalabilidade?trace=1519021197&source=single ● http://www.fabiolabs.com.br/2011/04/redis-um-banco-de-dados-nao-relacional/