SlideShare ist ein Scribd-Unternehmen logo
1 von 65
ANALISE DE BANCO DE DADOS
NÃO RELACIONAIS E
COMPARAÇÃO COM BANCO DE
DADOS RELACIONAIS

      ALBERTO MARTINEZ SCREMIN
       BIANCA CARUSO DA PAIXÃO

   ORIENTADORA: VANESSA BRAGANHOLO
Motivação
• Desafio
  • Servir milhões de usuários distribuídos por todo o mundo
  • Serviços disponíveis a todo tempo


• Solução
  • Escalar as aplicações


• O movimento NoSQL
  •   Desenvolver bancos de dados simples
  •   Bancos de dados voltados para web
  •   Bancos de dados escaláveis
  •   Incentivo: Twitter
Objetivo
• Comparar os diversos tipos de SGBDs, nos critérios:
  •   Modelagem
  •   Consulta
  •   Indexação
  •   Otimização de consultas

• Incentivar o uso da tecnologia NoSQL de acordo com as
  necessidades de cada aplicação

• Apresentação de uma aplicação real em cada SGBD
  • Facilidades
  • Limitações
Organização
•   Sedna
•   Cassandra
•   MongoDB
•   Redis
•   TPC-E
•   Corretora de Valores
    •   Modelo
    •   Consulta
    •   MySQL
    •   Sedna
    •   Cassandra
    •   MongoDB
    •   Redis
• Conclusão
Sedna
• Banco de Dados Nativo XML

• XML
  •   Elementos devem possuir raiz única
  •   Possuir marca final e inicial
  •   Tem que ser bem aninhados
  •   Atributos não se repetem dentro do mesmo elemento
  •   Elementos são sensíveis a másculas e minúsculas
Sedna
• Modelo de Dados:
  • Auto-Descritivo – o documento se descreve

  <pessoas>
    <pessoa>
      <cpf>08539287409</cpf>
      <nome>Joao</nome>
      <data_nascimento>1967-05-17</data_nascimento>
    </pessoa>
    <pessoa>
      <cpf>05831765208</cpf>
      <nome>Maria</nome>
      <data_nascimento>1990-10-21</data_nascimento>
    </pessoa>
  </pessoas>
Sedna
• Linguagem de Consulta

  • XPath – expressões de caminho
    doc("pessoas.xml")//pessoa/nome

  • XQuery
    for $p in doc(“pessoas.xml”)//pessoa
    return
    <pessoa>
      {$p/nome}
    </pessoa>
Sedna
• Índices

  • Utiliza de árvores B
     CREATE INDEX “cpf” ON doc(“pessoas”)/pessoas/pessoa BY cpf
      AS xs:string


  • Indexação fulltext

  • Esquema associado utilizado como índice
Cassandra
• Modelo Não Relacional
  • Orientado a Colunas
  • Chave-Valor


• Keyspace
  • Famílias de Colunas
     • Chaves das linhas
     • Colunas
       • Chave-Valor


• Índices nas chaves de linha: automático
• Permite criação de índices secundários (nas colunas)
Cassandra
• Família de Coluna: Pessoa
Cassandra
• Linguagem

  • Criar Keyspace
  create keyspace usuarios;

  • Criar coluna de família Pessoa
  create column family pessoa with
    comparator=UTF8Type
and column_metadata=[{column_name: nome,
 validation_class: UTF8Type}, {column_name:
 data_nascimento, validation_class: LongType}];
Cassandra
• Linguagem

  • Inserção de dados na coluna de família pessoa
  set pessoa[‘08539287409’][‘nome’] = ‘Joao’;
  set pessoa[‘08539287409’][ ‘data_nascimento’] = ‘1967-05-
    17’;

  • Consulta na coluna de família Pessoa
  get pessoa where nome = ‘Joao’;
  get pessoa[‘08539287409’];

  • Remoção de uma coluna na família de coluna Pessoa
  del pessoa[‘08539287409’][’nome’];
  del pessoa[‘08539287409’];
Cassandra
• Índices Primários
  • Default em toda chave de linha


• Índices Secundários
  •   Hash
  •   Criado em segundo plano sem bloquear leituras e escritas
  •   Permite somente consultas de igualdade em colunas indexadas
  •   Deve-se utilizar em colunas com baixa cardinalidade

update column family pessoa with comparator=UTF8Type
and column_metadata=[ {column_name: nome,
 validation_class: UTF8Type, index_type: KEYS },
 {column_name: data_nascimento, validation_class:
 LongType }];
MongoDB

• SGBD orientado a documentos
  • Documentos são os registros
  • Coleções são as tabelas


• Livre de Esquema

• Importância na escolha dos documentos
  • Não existem junções
MongoDB
• Linguagem de Consulta
  • JSON
    • Coleção de pares chave/valor
    • Lista de valores ordenada
  • BSON



        {“cpf” : “129304229”, “nome”: “João”,
        “data_nascimento” : Date(‘1967,05,17’)}

        db.pessoas.find({}, {‘cpf’ : 1, ‘nome’: 1})
MongoDB
• Índices implementados em árvores B
  •   Chaves únicas
  •   Índices compostos
  •   Índices geoespacias
  •   Índices esparsos

             db.pessoas.ensureIndex({‘cpf’ : 1});



• Otimizador
  • Gera todos os planos de consulta
Redis
• Modelo Não Relacional
  • Chave-Valor
  • Os valores de cada chave são estruturas de dados
     •   String
     •   Hash
     •   Listas
     •   Conjuntos
     •   Conjuntos Ordenados


• Armazenamento dos dados em memória
• Escrita feitas em disco, em segundo plano
• Dicionário Persistente
Redis
• O tipo de dados de um valor determina quais comandos
  estão disponíveis para a manipulação do valor em si



• Exemplo: Adicionar um nome Maria um CPF
  05831765208

  • String
    set <chave> <valor> - set 05831765208 Maria
Redis
• Não suporta criação de índices



• Não implementa um otimizador de consultas



• Organização dos dados deve ser feita de acordo com as
  consultas que serão realizadas
  • Desempenho das consultas são altamente dependentes desta
    organização
Redis
• Representação do banco de dados Pessoa
Redis
• Manipulação dos dados no banco de dados Pessoa

 >rpush 08539287409 Joao
 >rpush 08539287409 1967-05-17
 >lrange 08539287409 0 2
           1) "Joao"
           2) "1967-05-17"
 >rpush 05831765208 Maria
 >rpush 05831765208 1990-10-21
 >lrange 05831765208 0 2
           1) "Maria"
           2) "1990-10-21"
TPC-E
• Ferramenta para medir desempenho de banco de dados

• Parte do Modelo utilizado
  • Corretora de Valores

• Consultas utilizadas
  • Não foram utilizadas consultas do TPC
  • 1 das 11 consultas realizadas será apresentada
Corretora de Valores: Modelo
Corretora de Valores: Modelo
Corretora de Valores: Consulta
• Selecionar todos os clientes que possuem apenas uma
  conta associada.
Corretora de Valores: MySQL
• Selecionar todos os clientes que possuem apenas uma
  conta associada.



             SELECT ca_c_id,
             count(*)
              FROM
             customer_account
             GROUP BY ca_c_id
             HAVING count(*) = 1;
Corretora de Valores: Sedna
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:complexType name="tBroker">
  <xs:sequence>
    <xs:element name="id" type="xs:integer"/>
    <xs:element name="b_name" type="xs:string"/>
    <xs:element name="b_num_trades" type="xs:integer"/>
    <xs:element name="b_comm_total" type="xs:decimal"/>
    <xs:element name="status_type" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="tBrokers">
  <xs:sequence>
    <xs:element name="broker" type="tBroker" minOccurs="0"
  maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>

 <xs:element name="brokers" type="tBrokers"/>
</xs:schema>
Corretora de Valores: Sedna
• Selecionar todos os clientes que possuem apenas uma
  conta associada.

  for $x in doc('customer.xml')
  where (count($x//customer_accounts) = 1)
  return $x
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
Corretora de Valores: Cassandra
• Selecionar todos os clientes que possuem apenas uma
  conta associada.

      lista_customer_id = list customer;
      for customer_id in lista_customer_id:
           c_ca = get customer [‘customer_id’]
      [‘ca_id’];
           c_ca_qtd = len(c_ca)
           if c_ca_qtd = 1:
                get customer [‘customer_id’];
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB
Corretora de Valores: MongoDB

• Selecionar todos os clientes que possuem apenas uma
  conta associada.

db.customer.find({'customer_accounts' : {$size : 1}});
Corretora de Valores: Redis
Corretora de Valores: Redis
Corretora de Valores: Redis
Corretora de Valores: Redis
Corretora de Valores: Redis
• Dicionários de Dados
Corretora de Valores: Redis

• Selecionar todos os clientes que possuem apenas uma
  conta associada.


       select 4
       lista_customer = keys c*
       for customer_id in lista_customer :
           select 4
           qtd_cust_account = llen
       customer_id
           if qtd_cust_account = 1 :
                 select 0
                 hmget customer_id c_l_name
       c_f_name
Conclusão
• Facilidades x Limitações

  • MySQL
     •   Variedade de operadores e agregadores
     •   Todas as consultas foram expressas
     •   Rigidez do modelo
     •   Dificuldade de escalabilidade

  • Sedna
     • Grande flexibilidade para construção de seus documentos
     • Linguagem complexa do esquema
     • Padrão XQuery mostrou-se poderoso para criação de
       consultas
Conclusão
• Facilidades x Limitações

  • Cassandra
     • Consultas simples
     • Ausência de estrutura de dados
     • Complexidade inserida na aplicação


  • MongoDB
     • Livre de esquema
     • Consultas expressas facilmente
     • Complexidade ao escrever consultas mais poderosas
Conclusão
• Facilidades x Limitações

  • Redis
     •   Não possui estrutura rígida
     •   Variedade de estruturas de dados
     •   Rápido
     •   Consultas Simples
     •   Complexidade inserida na aplicação
     •   Consultas realizadas somente pela chave
     •   Não mantém integridade referencial entre os bancos
Conclusão
 • Consultas



CONSULTA/
             1      2      3      4      5      6      7      8      9     10     11
  SGBD

            SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM
 MySQL
            SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM    SIM
  Sedna
            APLC   APLC   SIM    SIM    SIM    APLC   SIM    SIM    APLC   APLC   APLC
Cassandra
            SIM    APLC   SIM    SIM    SIM    SIM    SIM    SIM    SIM    APLC   APLC
MongoDB
            APLC   APLC   APLC   APLC   APLC   APLC   APLC   APLC   APLC   APLC   APLC
  Redis
Conclusão
• Trabalhos futuros

  • Estudo de outros bancos não relacionais

  • Trabalhar com o esquema completo do TPC

  • Medir o desempenho das consultas

  • Analisar outros critérios em cada SGBD
     • Replicação
     • Restore
     • Backup
ANALISE DE BANCO DE DADOS
NÃO RELACIONAIS E
COMPARAÇÃO COM BANCO DE
DADOS RELACIONAIS

      ALBERTO MARTINEZ SCREMIN
       BIANCA CARUSO DA PAIXÃO

   ORIENTADORA: VANESSA BRAGANHOLO
MySQL
• Modelo Relacional


• Tabelas
  • Contêm linhas
  • Contêm colunas


• Outras funcionalidades do SGBD
  •   Chaves Primárias
  •   Chaves Estrangeiras
  •   Stored Procedures / Funções
  •   Triggers
MySQL
MySQL
• SQL
 • Estrutura
        CREATE TABLE pessoa (
          'cpf' bigint(20) unsigned NOT NULL,
          'nome' varchar(100) default NULL,
          'data_nascimento' date default NULL,
          PRIMARY KEY(`cpf`)
          );

 • Dados
        INSERT INTO pessoa (cpf, nome,
        data_nascimento)
        VALUES (08539287409, 'Joao', '1967-05-17');

        INSERT INTO pessoa (cpf, nome,
        data_nascimento)
        VALUES (05831765208, 'Maria', '1990-10-21');
MySQL
• Índices: São os principais meios de acelerar o acesso ao
  conteúdo das tabelas.
  • Chave Primária
  • Chave Única
  • Chaves em geral


• Criação de um índice chamado id_nome sobre a coluna
  nome da tabela pessoa

     CREATE INDEX id_nome ON pessoa(nome);
MySQL
• O Explain (tabela: Pessoa)
  • 670 registros
  • 1 registro com nome João e cpf 08539287409


   mysql> explain select * from pessoa where nome =
   'Joao'; *************************** 1. row
   ***************************
           id: 1
   select_type: SIMPLE
        table: pessoa
         type: ALL
   possible_keys: NULL
          key: NULL
   key_len: NULL
          ref: NULL
         rows: 506
        Extra: Using where
MySQL
• O Explain (tabela: Pessoa)
  • 670 registros
  • 1 registro com nome João e cpf 08539287409


   mysql> explain select * from pessoa where cpf =
   08539287409;
   *************************** 1. row
   ***************************
           id: 1
   select_type: SIMPLE
        table: pessoa
         type: const
   possible_keys: PRIMARY
          key: PRIMARY
   key_len: 8
          ref: const
         rows: 1
Cassandra
• Família de Coluna: Pessoa

Pessoa:
   08539287409:
          Nome: Joao
          DataNascimento: 1967-05-17
 
    05831765208:
          Nome: Maria
          DataNascimento: 1990-10-21
Redis
• O tipo de dados de um valor determina quais comandos
  estão disponíveis para a manipulação do valor em si

• Exemplo: Adicionar um nome Maria um CPF 05831765208
  • String
    set <chave> <valor> - set 05831765208 Maria
  • Hash
    hset <chave> <campo> <valor> - hset 05831765208 nome Maria
  • Lista
    rpush <chave> valor> - rpush 05831765208 Maria
  • Conjunto
    sadd <chave> <valor> - sadd 05831765208 Maria
  • Conjunto Ordenado
    zadd <chave> <posicao> <valor> - zadd 05831765208 1 Maria

Weitere ähnliche Inhalte

Was ist angesagt?

Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlHelder Lopes
 
Sistemas de Arquivos FAT x NTFS
Sistemas de Arquivos FAT x NTFSSistemas de Arquivos FAT x NTFS
Sistemas de Arquivos FAT x NTFSCleber Ramos
 
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?Annelise Gripp
 
Modelo slide senai tcc 2008 final
Modelo slide senai tcc 2008   finalModelo slide senai tcc 2008   final
Modelo slide senai tcc 2008 finalPablo Gadotti
 
The Web Is Changing — From Strings to Things
The Web Is Changing — From Strings to ThingsThe Web Is Changing — From Strings to Things
The Web Is Changing — From Strings to ThingsMarkus Lanthaler
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLDaniel Brandão
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 
StrengthsEngage - How to understand your Clifton StrengthsFinder results
StrengthsEngage -  How to understand your Clifton StrengthsFinder resultsStrengthsEngage -  How to understand your Clifton StrengthsFinder results
StrengthsEngage - How to understand your Clifton StrengthsFinder resultsPatrick Kayton
 
O papel da liderança mais humanizada no processo de transformação (1)
O papel da liderança mais humanizada no processo de transformação (1)O papel da liderança mais humanizada no processo de transformação (1)
O papel da liderança mais humanizada no processo de transformação (1)Marcely Santos
 
Curso Habilidades Gerenciais
Curso Habilidades GerenciaisCurso Habilidades Gerenciais
Curso Habilidades GerenciaisFabio Baccoli
 
O poder das soft skills - Ana Santiago
O poder das soft skills - Ana SantiagoO poder das soft skills - Ana Santiago
O poder das soft skills - Ana SantiagoAna Santiago
 
Microsoft PowerPoint - Présentation qualiopi.pptx.pdf
Microsoft PowerPoint - Présentation qualiopi.pptx.pdfMicrosoft PowerPoint - Présentation qualiopi.pptx.pdf
Microsoft PowerPoint - Présentation qualiopi.pptx.pdfAbdesslam MEZDARI
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 

Was ist angesagt? (20)

Programacao para Web I Plano de Ensinodoc
Programacao para Web I Plano de EnsinodocProgramacao para Web I Plano de Ensinodoc
Programacao para Web I Plano de Ensinodoc
 
Como Lidar Com Pessoas Difíceis
Como Lidar Com Pessoas DifíceisComo Lidar Com Pessoas Difíceis
Como Lidar Com Pessoas Difíceis
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Sistemas de Arquivos FAT x NTFS
Sistemas de Arquivos FAT x NTFSSistemas de Arquivos FAT x NTFS
Sistemas de Arquivos FAT x NTFS
 
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?
Como a Agilidade pode ajudar a alavancar a Transformação Digital na sua empresa?
 
Modelo slide senai tcc 2008 final
Modelo slide senai tcc 2008   finalModelo slide senai tcc 2008   final
Modelo slide senai tcc 2008 final
 
HTML/CSS Patterns
HTML/CSS PatternsHTML/CSS Patterns
HTML/CSS Patterns
 
ShEx vs SHACL
ShEx vs SHACLShEx vs SHACL
ShEx vs SHACL
 
The Web Is Changing — From Strings to Things
The Web Is Changing — From Strings to ThingsThe Web Is Changing — From Strings to Things
The Web Is Changing — From Strings to Things
 
Slide disco rigido
Slide disco rigidoSlide disco rigido
Slide disco rigido
 
Declaração de missão pessoal
Declaração de missão pessoalDeclaração de missão pessoal
Declaração de missão pessoal
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 
StrengthsEngage - How to understand your Clifton StrengthsFinder results
StrengthsEngage -  How to understand your Clifton StrengthsFinder resultsStrengthsEngage -  How to understand your Clifton StrengthsFinder results
StrengthsEngage - How to understand your Clifton StrengthsFinder results
 
O papel da liderança mais humanizada no processo de transformação (1)
O papel da liderança mais humanizada no processo de transformação (1)O papel da liderança mais humanizada no processo de transformação (1)
O papel da liderança mais humanizada no processo de transformação (1)
 
Curso Habilidades Gerenciais
Curso Habilidades GerenciaisCurso Habilidades Gerenciais
Curso Habilidades Gerenciais
 
161012 gest qual
161012 gest qual161012 gest qual
161012 gest qual
 
O poder das soft skills - Ana Santiago
O poder das soft skills - Ana SantiagoO poder das soft skills - Ana Santiago
O poder das soft skills - Ana Santiago
 
Microsoft PowerPoint - Présentation qualiopi.pptx.pdf
Microsoft PowerPoint - Présentation qualiopi.pptx.pdfMicrosoft PowerPoint - Présentation qualiopi.pptx.pdf
Microsoft PowerPoint - Présentation qualiopi.pptx.pdf
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 

Andere mochten auch

El tren un medio de transporte
El tren un medio de transporteEl tren un medio de transporte
El tren un medio de transportelisbethdiazacevedo
 
Particionamento cassandra
Particionamento   cassandraParticionamento   cassandra
Particionamento cassandraserdg
 
Introdução ao NOSQL com Java (Cassandra)
Introdução ao NOSQL com  Java (Cassandra)Introdução ao NOSQL com  Java (Cassandra)
Introdução ao NOSQL com Java (Cassandra)Otávio Santana
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaAugusto Giles
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandraRichiely Paiva
 

Andere mochten auch (8)

El tren un medio de transporte
El tren un medio de transporteEl tren un medio de transporte
El tren un medio de transporte
 
No sql - MongoDB
No sql - MongoDBNo sql - MongoDB
No sql - MongoDB
 
Particionamento cassandra
Particionamento   cassandraParticionamento   cassandra
Particionamento cassandra
 
Introdução ao NOSQL com Java (Cassandra)
Introdução ao NOSQL com  Java (Cassandra)Introdução ao NOSQL com  Java (Cassandra)
Introdução ao NOSQL com Java (Cassandra)
 
Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]
 
Apresentação UFF
Apresentação UFFApresentação UFF
Apresentação UFF
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas Monografia
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
 

Ähnlich wie Análise Bancos Dados Não Relacionais

Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?Pedro Pisa
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkLeandro Domingues
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 

Ähnlich wie Análise Bancos Dados Não Relacionais (20)

Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Nosql4java
Nosql4javaNosql4java
Nosql4java
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Bancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWSBancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWS
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 

Análise Bancos Dados Não Relacionais

  • 1. ANALISE DE BANCO DE DADOS NÃO RELACIONAIS E COMPARAÇÃO COM BANCO DE DADOS RELACIONAIS ALBERTO MARTINEZ SCREMIN BIANCA CARUSO DA PAIXÃO ORIENTADORA: VANESSA BRAGANHOLO
  • 2. Motivação • Desafio • Servir milhões de usuários distribuídos por todo o mundo • Serviços disponíveis a todo tempo • Solução • Escalar as aplicações • O movimento NoSQL • Desenvolver bancos de dados simples • Bancos de dados voltados para web • Bancos de dados escaláveis • Incentivo: Twitter
  • 3. Objetivo • Comparar os diversos tipos de SGBDs, nos critérios: • Modelagem • Consulta • Indexação • Otimização de consultas • Incentivar o uso da tecnologia NoSQL de acordo com as necessidades de cada aplicação • Apresentação de uma aplicação real em cada SGBD • Facilidades • Limitações
  • 4. Organização • Sedna • Cassandra • MongoDB • Redis • TPC-E • Corretora de Valores • Modelo • Consulta • MySQL • Sedna • Cassandra • MongoDB • Redis • Conclusão
  • 5. Sedna • Banco de Dados Nativo XML • XML • Elementos devem possuir raiz única • Possuir marca final e inicial • Tem que ser bem aninhados • Atributos não se repetem dentro do mesmo elemento • Elementos são sensíveis a másculas e minúsculas
  • 6. Sedna • Modelo de Dados: • Auto-Descritivo – o documento se descreve <pessoas> <pessoa> <cpf>08539287409</cpf> <nome>Joao</nome> <data_nascimento>1967-05-17</data_nascimento> </pessoa> <pessoa> <cpf>05831765208</cpf> <nome>Maria</nome> <data_nascimento>1990-10-21</data_nascimento> </pessoa> </pessoas>
  • 7. Sedna • Linguagem de Consulta • XPath – expressões de caminho doc("pessoas.xml")//pessoa/nome • XQuery for $p in doc(“pessoas.xml”)//pessoa return <pessoa> {$p/nome} </pessoa>
  • 8. Sedna • Índices • Utiliza de árvores B CREATE INDEX “cpf” ON doc(“pessoas”)/pessoas/pessoa BY cpf AS xs:string • Indexação fulltext • Esquema associado utilizado como índice
  • 9. Cassandra • Modelo Não Relacional • Orientado a Colunas • Chave-Valor • Keyspace • Famílias de Colunas • Chaves das linhas • Colunas • Chave-Valor • Índices nas chaves de linha: automático • Permite criação de índices secundários (nas colunas)
  • 10. Cassandra • Família de Coluna: Pessoa
  • 11. Cassandra • Linguagem • Criar Keyspace create keyspace usuarios; • Criar coluna de família Pessoa create column family pessoa with comparator=UTF8Type and column_metadata=[{column_name: nome, validation_class: UTF8Type}, {column_name: data_nascimento, validation_class: LongType}];
  • 12. Cassandra • Linguagem • Inserção de dados na coluna de família pessoa set pessoa[‘08539287409’][‘nome’] = ‘Joao’; set pessoa[‘08539287409’][ ‘data_nascimento’] = ‘1967-05- 17’; • Consulta na coluna de família Pessoa get pessoa where nome = ‘Joao’; get pessoa[‘08539287409’]; • Remoção de uma coluna na família de coluna Pessoa del pessoa[‘08539287409’][’nome’]; del pessoa[‘08539287409’];
  • 13. Cassandra • Índices Primários • Default em toda chave de linha • Índices Secundários • Hash • Criado em segundo plano sem bloquear leituras e escritas • Permite somente consultas de igualdade em colunas indexadas • Deve-se utilizar em colunas com baixa cardinalidade update column family pessoa with comparator=UTF8Type and column_metadata=[ {column_name: nome, validation_class: UTF8Type, index_type: KEYS }, {column_name: data_nascimento, validation_class: LongType }];
  • 14. MongoDB • SGBD orientado a documentos • Documentos são os registros • Coleções são as tabelas • Livre de Esquema • Importância na escolha dos documentos • Não existem junções
  • 15. MongoDB • Linguagem de Consulta • JSON • Coleção de pares chave/valor • Lista de valores ordenada • BSON {“cpf” : “129304229”, “nome”: “João”, “data_nascimento” : Date(‘1967,05,17’)} db.pessoas.find({}, {‘cpf’ : 1, ‘nome’: 1})
  • 16. MongoDB • Índices implementados em árvores B • Chaves únicas • Índices compostos • Índices geoespacias • Índices esparsos db.pessoas.ensureIndex({‘cpf’ : 1}); • Otimizador • Gera todos os planos de consulta
  • 17. Redis • Modelo Não Relacional • Chave-Valor • Os valores de cada chave são estruturas de dados • String • Hash • Listas • Conjuntos • Conjuntos Ordenados • Armazenamento dos dados em memória • Escrita feitas em disco, em segundo plano • Dicionário Persistente
  • 18. Redis • O tipo de dados de um valor determina quais comandos estão disponíveis para a manipulação do valor em si • Exemplo: Adicionar um nome Maria um CPF 05831765208 • String set <chave> <valor> - set 05831765208 Maria
  • 19. Redis • Não suporta criação de índices • Não implementa um otimizador de consultas • Organização dos dados deve ser feita de acordo com as consultas que serão realizadas • Desempenho das consultas são altamente dependentes desta organização
  • 20. Redis • Representação do banco de dados Pessoa
  • 21. Redis • Manipulação dos dados no banco de dados Pessoa >rpush 08539287409 Joao >rpush 08539287409 1967-05-17 >lrange 08539287409 0 2 1) "Joao" 2) "1967-05-17" >rpush 05831765208 Maria >rpush 05831765208 1990-10-21 >lrange 05831765208 0 2 1) "Maria" 2) "1990-10-21"
  • 22. TPC-E • Ferramenta para medir desempenho de banco de dados • Parte do Modelo utilizado • Corretora de Valores • Consultas utilizadas • Não foram utilizadas consultas do TPC • 1 das 11 consultas realizadas será apresentada
  • 25. Corretora de Valores: Consulta • Selecionar todos os clientes que possuem apenas uma conta associada.
  • 26. Corretora de Valores: MySQL • Selecionar todos os clientes que possuem apenas uma conta associada. SELECT ca_c_id, count(*) FROM customer_account GROUP BY ca_c_id HAVING count(*) = 1;
  • 27. Corretora de Valores: Sedna <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="tBroker"> <xs:sequence> <xs:element name="id" type="xs:integer"/> <xs:element name="b_name" type="xs:string"/> <xs:element name="b_num_trades" type="xs:integer"/> <xs:element name="b_comm_total" type="xs:decimal"/> <xs:element name="status_type" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="tBrokers"> <xs:sequence> <xs:element name="broker" type="tBroker" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="brokers" type="tBrokers"/> </xs:schema>
  • 28. Corretora de Valores: Sedna • Selecionar todos os clientes que possuem apenas uma conta associada. for $x in doc('customer.xml') where (count($x//customer_accounts) = 1) return $x
  • 35. Corretora de Valores: Cassandra • Selecionar todos os clientes que possuem apenas uma conta associada. lista_customer_id = list customer; for customer_id in lista_customer_id: c_ca = get customer [‘customer_id’] [‘ca_id’]; c_ca_qtd = len(c_ca) if c_ca_qtd = 1: get customer [‘customer_id’];
  • 45. Corretora de Valores: MongoDB • Selecionar todos os clientes que possuem apenas uma conta associada. db.customer.find({'customer_accounts' : {$size : 1}});
  • 50. Corretora de Valores: Redis • Dicionários de Dados
  • 51. Corretora de Valores: Redis • Selecionar todos os clientes que possuem apenas uma conta associada. select 4 lista_customer = keys c* for customer_id in lista_customer : select 4 qtd_cust_account = llen customer_id if qtd_cust_account = 1 : select 0 hmget customer_id c_l_name c_f_name
  • 52. Conclusão • Facilidades x Limitações • MySQL • Variedade de operadores e agregadores • Todas as consultas foram expressas • Rigidez do modelo • Dificuldade de escalabilidade • Sedna • Grande flexibilidade para construção de seus documentos • Linguagem complexa do esquema • Padrão XQuery mostrou-se poderoso para criação de consultas
  • 53. Conclusão • Facilidades x Limitações • Cassandra • Consultas simples • Ausência de estrutura de dados • Complexidade inserida na aplicação • MongoDB • Livre de esquema • Consultas expressas facilmente • Complexidade ao escrever consultas mais poderosas
  • 54. Conclusão • Facilidades x Limitações • Redis • Não possui estrutura rígida • Variedade de estruturas de dados • Rápido • Consultas Simples • Complexidade inserida na aplicação • Consultas realizadas somente pela chave • Não mantém integridade referencial entre os bancos
  • 55. Conclusão • Consultas CONSULTA/ 1 2 3 4 5 6 7 8 9 10 11 SGBD SIM SIM SIM SIM SIM SIM SIM SIM SIM SIM SIM MySQL SIM SIM SIM SIM SIM SIM SIM SIM SIM SIM SIM Sedna APLC APLC SIM SIM SIM APLC SIM SIM APLC APLC APLC Cassandra SIM APLC SIM SIM SIM SIM SIM SIM SIM APLC APLC MongoDB APLC APLC APLC APLC APLC APLC APLC APLC APLC APLC APLC Redis
  • 56. Conclusão • Trabalhos futuros • Estudo de outros bancos não relacionais • Trabalhar com o esquema completo do TPC • Medir o desempenho das consultas • Analisar outros critérios em cada SGBD • Replicação • Restore • Backup
  • 57. ANALISE DE BANCO DE DADOS NÃO RELACIONAIS E COMPARAÇÃO COM BANCO DE DADOS RELACIONAIS ALBERTO MARTINEZ SCREMIN BIANCA CARUSO DA PAIXÃO ORIENTADORA: VANESSA BRAGANHOLO
  • 58. MySQL • Modelo Relacional • Tabelas • Contêm linhas • Contêm colunas • Outras funcionalidades do SGBD • Chaves Primárias • Chaves Estrangeiras • Stored Procedures / Funções • Triggers
  • 59. MySQL
  • 60. MySQL • SQL • Estrutura CREATE TABLE pessoa ( 'cpf' bigint(20) unsigned NOT NULL, 'nome' varchar(100) default NULL, 'data_nascimento' date default NULL, PRIMARY KEY(`cpf`) ); • Dados INSERT INTO pessoa (cpf, nome, data_nascimento) VALUES (08539287409, 'Joao', '1967-05-17'); INSERT INTO pessoa (cpf, nome, data_nascimento) VALUES (05831765208, 'Maria', '1990-10-21');
  • 61. MySQL • Índices: São os principais meios de acelerar o acesso ao conteúdo das tabelas. • Chave Primária • Chave Única • Chaves em geral • Criação de um índice chamado id_nome sobre a coluna nome da tabela pessoa CREATE INDEX id_nome ON pessoa(nome);
  • 62. MySQL • O Explain (tabela: Pessoa) • 670 registros • 1 registro com nome João e cpf 08539287409 mysql> explain select * from pessoa where nome = 'Joao'; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: pessoa type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 506 Extra: Using where
  • 63. MySQL • O Explain (tabela: Pessoa) • 670 registros • 1 registro com nome João e cpf 08539287409 mysql> explain select * from pessoa where cpf = 08539287409; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: pessoa type: const possible_keys: PRIMARY key: PRIMARY key_len: 8 ref: const rows: 1
  • 64. Cassandra • Família de Coluna: Pessoa Pessoa: 08539287409: Nome: Joao DataNascimento: 1967-05-17   05831765208: Nome: Maria DataNascimento: 1990-10-21
  • 65. Redis • O tipo de dados de um valor determina quais comandos estão disponíveis para a manipulação do valor em si • Exemplo: Adicionar um nome Maria um CPF 05831765208 • String set <chave> <valor> - set 05831765208 Maria • Hash hset <chave> <campo> <valor> - hset 05831765208 nome Maria • Lista rpush <chave> valor> - rpush 05831765208 Maria • Conjunto sadd <chave> <valor> - sadd 05831765208 Maria • Conjunto Ordenado zadd <chave> <posicao> <valor> - zadd 05831765208 1 Maria