SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

Manual de etiqueta profissional
Manual de etiqueta profissionalManual de etiqueta profissional
Manual de etiqueta profissional
Fantoches de Luz
 
Comitês de ética em pesquisa no brasil
Comitês de ética em pesquisa no brasilComitês de ética em pesquisa no brasil
Comitês de ética em pesquisa no brasil
Família Cristã
 
Aula Sobre MéTodos E TéCnicas De Pesquisa
Aula Sobre MéTodos E TéCnicas De PesquisaAula Sobre MéTodos E TéCnicas De Pesquisa
Aula Sobre MéTodos E TéCnicas De Pesquisa
Jonathas Carvalho
 
Mtc métodos e técnicas de pesquisa - 2012
Mtc   métodos e técnicas de pesquisa - 2012Mtc   métodos e técnicas de pesquisa - 2012
Mtc métodos e técnicas de pesquisa - 2012
Jailson Borges Soares
 

Mais procurados (20)

Manual de etiqueta profissional
Manual de etiqueta profissionalManual de etiqueta profissional
Manual de etiqueta profissional
 
Comitês de ética em pesquisa no brasil
Comitês de ética em pesquisa no brasilComitês de ética em pesquisa no brasil
Comitês de ética em pesquisa no brasil
 
Modelo relatório evento
Modelo relatório eventoModelo relatório evento
Modelo relatório evento
 
Análise SWOT
Análise SWOTAnálise SWOT
Análise SWOT
 
Planejando a Vida, Realizando Sonhos - Planejamento Pessoal
Planejando a Vida, Realizando Sonhos - Planejamento PessoalPlanejando a Vida, Realizando Sonhos - Planejamento Pessoal
Planejando a Vida, Realizando Sonhos - Planejamento Pessoal
 
PROJETO DE INTERVENÇÃO SOBRE A HUMANIZAÇÃO NA ÁREA HOSPITALAR COM OS USUÁRIO...
PROJETO DE INTERVENÇÃO SOBRE A HUMANIZAÇÃO NA ÁREA  HOSPITALAR COM OS USUÁRIO...PROJETO DE INTERVENÇÃO SOBRE A HUMANIZAÇÃO NA ÁREA  HOSPITALAR COM OS USUÁRIO...
PROJETO DE INTERVENÇÃO SOBRE A HUMANIZAÇÃO NA ÁREA HOSPITALAR COM OS USUÁRIO...
 
Aula Sobre MéTodos E TéCnicas De Pesquisa
Aula Sobre MéTodos E TéCnicas De PesquisaAula Sobre MéTodos E TéCnicas De Pesquisa
Aula Sobre MéTodos E TéCnicas De Pesquisa
 
Resenha: Liderança nas Organizações educativas: a direcção por valores
Resenha: Liderança nas Organizações educativas: a direcção por valoresResenha: Liderança nas Organizações educativas: a direcção por valores
Resenha: Liderança nas Organizações educativas: a direcção por valores
 
Paif e scfv
Paif e scfvPaif e scfv
Paif e scfv
 
Tipos de métodos e sua aplicação
Tipos de métodos e sua aplicaçãoTipos de métodos e sua aplicação
Tipos de métodos e sua aplicação
 
3 - As Etapas da Pesquisa cientifica.pdf
3 - As Etapas da Pesquisa cientifica.pdf3 - As Etapas da Pesquisa cientifica.pdf
3 - As Etapas da Pesquisa cientifica.pdf
 
Guia para Elaboração do Relatório Social - Portal SeloSocial.com
Guia para Elaboração do Relatório Social - Portal SeloSocial.comGuia para Elaboração do Relatório Social - Portal SeloSocial.com
Guia para Elaboração do Relatório Social - Portal SeloSocial.com
 
Violência contra a mulher: estudo em uma unidade de atenção primária à saúde
Violência contra a mulher: estudo em uma unidade de atenção primária à saúdeViolência contra a mulher: estudo em uma unidade de atenção primária à saúde
Violência contra a mulher: estudo em uma unidade de atenção primária à saúde
 
Relações interpessoais
Relações interpessoaisRelações interpessoais
Relações interpessoais
 
Grupo focal: metodologia qualitativa para pesquisas em Ciências Sociais
Grupo focal: metodologia qualitativa para pesquisas em Ciências SociaisGrupo focal: metodologia qualitativa para pesquisas em Ciências Sociais
Grupo focal: metodologia qualitativa para pesquisas em Ciências Sociais
 
Aula 2 - Liderança.pdf
Aula 2 - Liderança.pdfAula 2 - Liderança.pdf
Aula 2 - Liderança.pdf
 
CRAS - Centro de Referencia de Assistência Social
CRAS - Centro de Referencia de Assistência SocialCRAS - Centro de Referencia de Assistência Social
CRAS - Centro de Referencia de Assistência Social
 
Projeto de intervenção estagio ii -
Projeto de intervenção   estagio ii -Projeto de intervenção   estagio ii -
Projeto de intervenção estagio ii -
 
Capacitação em análise de dados quantitativos
Capacitação em análise de dados quantitativosCapacitação em análise de dados quantitativos
Capacitação em análise de dados quantitativos
 
Mtc métodos e técnicas de pesquisa - 2012
Mtc   métodos e técnicas de pesquisa - 2012Mtc   métodos e técnicas de pesquisa - 2012
Mtc métodos e técnicas de pesquisa - 2012
 

Destaque

El tren un medio de transporte
El tren un medio de transporteEl tren un medio de transporte
El tren un medio de transporte
lisbethdiazacevedo
 
Particionamento cassandra
Particionamento   cassandraParticionamento   cassandra
Particionamento cassandra
serdg
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
Richiely Paiva
 

Destaque (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
 

Semelhante a Apresentação Projeto Final Graduação UFF

Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
Allisson Azevedo
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
Terra / Neo
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 

Semelhante a Apresentação Projeto Final Graduação UFF (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
 

Apresentação Projeto Final Graduação UFF

  • 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