SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Compreendendo o Modelo de dados
       Apache Cassandra
Sistemas Distribuídos


Alunos:
     ARCANJO GABRIEL          096096
     PEDRO BRAGANICK          096123
     RICHIELY BATISTA         100930
Roteiro:
  - O modelo de dados
  - Keyspaces
  - Column families
  - Indexes
  - Técnicas conceituais
  - Alguns comandos CQL
  - Collections – set list map
  - Estudo de caso - Twissandra
O modelo de dados

NoSQL - Not only SQL
  CQL - Cassandra Query Language - Usado
  para distribuir dados em larga escala.
           Escalabilidade;
           Performance;
           Consistência.
A definição do modelo visa as consultas que se
quer otimizar.
Apresentação cassandra
Devemos exaltar o NoSQL e minimizar o Modelo de dados Relacional?
R.: De forma alguma !

"Cassandra thinks about data the way we think about data. Most of us
think about data in rows and columns. So does Cassandra."

Quais respostas vou obter? - SQL
Quais perguntas poderei fazer? - NoSQL

Consultas de forma sequencial no tempo em determinados intervalos.
         "Quantas pessoas estrangeiras passaram pelos aeroportos
brasileiros no período da Copa do Mundo?"
Modelo Relacional vs NoSQL

-Escalonamento
-Consistência
-Disponibilidade

• Acesso rápido a dados (desde que você possa manter tudo na memória);
• Rápida replicação de dados / distribuídos por vários nós;
• Esquema flexível (você pode adicionar novas colunas instantaneamente);
Esquema de RDBM x Keyspace
      Repositório dos dados
Column Family


Em JavaScript Object Notacion (JSON):


Musican:                     ColumnFamily 1
   carlos:                   Rowkey
    email: carlos@inf.com,   ColumnName:Value
    instrument: bass         ColumnName:Value
   george:                   Rowkey
    email: george@inf.com    ColumnName:Value

Band:                        ColumnFamily 2
   george:                   Rowkey
    fone: 1234 - 4567        ColumnName:Value
Column Family
Análogo as tabelas no modelo relacional?
Super Column (1.2 não suporta - usa
composite column)

Quando uma linha de uma família de colunas contém uma
coleção de pares nome/valor, a família de super coluna
detém subcolunas, onde subcolunas são denominados
grupos de colunas.

   "Um mapa cujas chaves são
   os nomes das colunas e
   os valores são as colunas."
Apresentação cassandra
Row
  Podem possuir diferentes colunas;
  Não precisam ser congruentes: podem
possuir quantidades diferentes de instâncias.
Indexação



   Um índice é uma estrutura de dados que permite a
consulta rápida e eficiente de dados correspondentes a
uma determinada condição.


   -Índices Primários
   -Índices Alternativos
Índice Primário

Em Cassandra, o índice primário, para uma família de
coluna, é o índice de suas chaves de linhas. (Row Key)

Users = {
  "edanuff" : {
     Rowkey
  email: "ed@anuff.com"
  }
}
Índice Secundário



Índices secundários em Cassandra referem-se a índices
em valores de coluna (para distingui-los a partir do índice
principal linha de chave para uma família de coluna).
Índice Secundário é um índice alternativo pois não utiliza
de chave de linha (Rowkey).

Não é recomendado para valores de alta cardinalidade (ou seja, timestamps,
datas de nascimento, keyworlds, etc)
Requer pelo menos uma comparação de igualdade em uma consulta - não
eficiente para: menor que / maior que / intervalo de consultas
Apresentação cassandra
Você realmente precisa do SQL?
•   Select
       Suponha que exista Column Family departamentos
e funcionários com relações um-para-muitos,
respectivamente. São elas Emps e Deps . Em Emps há ID
dos empregados utilizados como chaves e há Nome, Data
de nascimento e cidade. Em deps chaves são ID do
departamento e única coluna é Nome.

select * from EMPS onde Data de nascimento = '12/10/1990' ???
•   Select
      Solução:
       Adicionar uma Column Family DataNasc_emps em
que a chave é uma data e o nome das colunas são IDs
dos empregados que nasceram na data, essas colunas
não precisam ser preenchidas podendo ser vazias
representadas por um '-'. Para responder a consulta
precisamos apenas recuperar todas as colunas para a
chave '12/10/1990', lembrando que sempre que um
empregado for acrescentado ou excluído
DataNasc_emps precisa ser atualizada.
•   Join

Como fazer a consulta:

select * from Emps e, d Deps onde e.dep_id = d.dep_id   ???
•   Join
       Solução:
      Basta criarmos uma Column Family Dept_emps
onde as chaves serão os IDs de departamento e as
colunas serão os IDs dos empregados. Assim a consulta
poderia ser facilmente realizada retornando as colunas de
cada chave.
•   Group by


    select count(*) from Emps group by cidade   ????
•   Group by
      Solução:
    Basicamente será feito a mesma coisa do Select,
criando uma nova Column Family Cidade_emps tendo
como chave uma cidade e IDs dos empregados como
colunas. Neste caso você vai contar o número de
empregados recuperados. Ou pode ter uma coluna count
com o número de empregados pré-calculados.
•   Order by

      Os registros podem ser ordenados pela chave
usando o
OrderPreservingPartitioner. Para manter os dados
ordenados você pode usar o automaticamente ordenação
por nomes de coluna.
Mais sobre o que há de novo no Cassandra-
                   1.2?
               *Collections*
Colletions - Set

Um Set armazena um grupo de elementos que são
retornados na ordem de classificação, quando consultada.
A coluna de tipo consiste conjunto de desordenado de
valores únicos.

CREATE TABLE users (
  user_id text PRIMARY KEY,
  first_name text,
  last_name text,
  emails set<text>
);
Colletions - Set

Insertion
INSERT INTO users (user_id, first_name, last_name,
emails) VALUES('user', 'User', 'User', {'u@user.com',
'user@gmail.com'});

Update
UPDATE users
 SET emails = emails + {'uu1@uu1.org'} WHERE user_id
= 'user';
Colletions - Set

Remove
UPDATE users
  SET emails = emails - {'uu1@uu1.org'} WHERE user_id =
'user';



Retrieval
SELECT user_id, emails FROM users WHERE user_id =
'user';
Colletions - List

Quando a ordem dos elementos é considerada, o que
pode não ser a ordem natural ditada pelo tipo de
elementos, usar uma lista. Além disso, use uma lista
quando você precisa armazenar mesmo valor várias
vezes. Os valores da lista são retornados de acordo com o
índice, já no Set é retornado em ordem alfabética.

Insertion
ALTER TABLE users ADD top_cidades list<text>;

UPDATE users SET top_cidades = [ 'goiania', 'recife' ]
WHERE user_id = 'user';
Colletions - List

Addition
UPDATE users
 SET top_cidades = [ 'sao paulo' ] + top_cidades WHERE
user_id = 'user';

Delete
UPDATE users
 SET top_cidades = top_cidades - ['recife'] WHERE
user_id = 'user';
Colletions - Map

Como o seu nome indica, um mapa mapeia uma coisa a
outra. Um mapa é um par de chaves únicas chave e
valores. Um caso de uso para o tipo mapa é armazenar
informações timestamp relacionado em perfis de usuários.

Insertion
ALTER TABLE users ADD todo map<timestamp,
reminder_text>;
Colletions - Map
Modification and replacement

UPDATE users
 SET todo =
 { '2012-9-24' : 'entrou em goiania',
 '2012-10-2 12:00' : 'saiu de goiania' }
 WHERE user_id = 'user';

UPDATE users SET todo['2012-10-2 12:00'] = 'ficou em
goiania' WHERE user_id = 'user';
Colletions - Map

Usando TTL
UPDATE users USING TTL <computed_ttl>
 SET todo['2012-10-1'] = 'precisa sair' WHERE user_id =
'user';


Delete

DELETE todo['2012-9-24'] FROM users WHERE user_id =
'user';
Comandos CQL - Cassandra
Apresentação cassandra
Técnicas conceituais



Denormalização
Agregação
Agregação atômica
Chaves enumeráveis
Denormalização

   Cópia do mesmo dado em múltiplas tabelas.
   Otimizar/simplificar as consultas.
      Conseguir os resultados em um só lugar.
   Dados estão altamente sendo modificados,
logo caso você queria fazer uma retenção nos
dados que são modificáveis pode perder a
integridade do banco.
Agragação-Composição

   Representação do tipo todo-parte.
   Se usado junto com a denormalização pode
ter um grande impacto em performance e
consistência.
Apresentação cassandra
Agragação Atômica

  Permite armazenar uma entidade inteira em
um documento, e atualizar de forma atômica.
  Minimizar o comportamento transacional:
  *Grande processamento de dados a todo
momento (insert, update, delete).
Agregação Atômica
Chaves enumeráveis

  Apesar de ser dispendiosa uma ordenação,
seu uso é de grande benefício.

Ex.: E-mail
 •Ordem das mensagens, através de qualquer
  ID conhecido.
  Varredura de e-mails - backward ou forward.
Uma modelagem, itte                      r (Twissandra)!
             https://github.com/twissandra/twissandra


Usuários
Tweets
Followings
Followers
UserLine
TimeLine
Apresentação cassandra
Apresentação cassandra
Pesquisando Dados no Twissandra:

      Quem esta seguindo um usuário?
 
›     A quem segue um usuário?
 
›     Mostrar os meus tweets.
 
›           UserLine.
    Mostrar os tweets de todos que eu estou
    seguindo.
 
›           TimeLine.
Quem segue 'alice'?
Quem é seguido por 'alice'?
UserLine
TimeLine
Um novo tweet de 'bob'




        Atualização nas
     CF's de User/TimeLine.
Você como desenvolvedor tem que
           fazer isso.
Disposição e Consulta de tweets
Conclusão

Modelar bem o esquema para se obter
consultas otimizadas;
Não se perder durante o projeto;
Atender as necessidades:
     Escalabilidade
     Disponibilidade
     Alto desempenho

Contenu connexe

Tendances

Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Otávio Santana
 
Apresentacao Cassandra
Apresentacao CassandraApresentacao Cassandra
Apresentacao CassandraPeslPinguim
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na PráticaEiti Kimura
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileEiti Kimura
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLOrlando Vitali
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisEiti Kimura
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto DesempenhoEiti Kimura
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaAugusto Giles
 
Persistência nas Nuvens com NoSQL
Persistência nas Nuvens com NoSQLPersistência nas Nuvens com NoSQL
Persistência nas Nuvens com NoSQLRodrigo Hjort
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosYuri Adams
 
Distribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraDistribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraMário Marroquim
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso PráticoEiti Kimura
 

Tendances (20)

Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Apresentacao Cassandra
Apresentacao CassandraApresentacao Cassandra
Apresentacao Cassandra
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
 
Seminário - NoSQL
Seminário - NoSQLSeminário - NoSQL
Seminário - NoSQL
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas Monografia
 
Persistência nas Nuvens com NoSQL
Persistência nas Nuvens com NoSQLPersistência nas Nuvens com NoSQL
Persistência nas Nuvens com NoSQL
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Deep dive de Amazon Redshift
Deep dive de Amazon RedshiftDeep dive de Amazon Redshift
Deep dive de Amazon Redshift
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a Documentos
 
Distribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraDistribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com Cassandra
 
Deep dive de Amazon DynamoDB
Deep dive de Amazon DynamoDBDeep dive de Amazon DynamoDB
Deep dive de Amazon DynamoDB
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso Prático
 

Similaire à Apresentação cassandra

UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6Wagner Bianchi
 
Banco de Dados.pptx
Banco de Dados.pptxBanco de Dados.pptx
Banco de Dados.pptxBrunoWuo
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Emiliano Barbosa
 
Apostila sql
Apostila sqlApostila sql
Apostila sqlsnetobr
 
Cassandra cql
Cassandra cqlCassandra cql
Cassandra cqldist_bp
 
Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Emiliano Barbosa
 
Lighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraLighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraRafael Domingues
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysqlbinhoetec
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01Gilson Figueredo
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQLEric Silva
 

Similaire à Apresentação cassandra (20)

UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
No sql std
No sql stdNo sql std
No sql std
 
Banco de Dados.pptx
Banco de Dados.pptxBanco de Dados.pptx
Banco de Dados.pptx
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
Amazon Redshift
Amazon RedshiftAmazon Redshift
Amazon Redshift
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Cassandra cql
Cassandra cqlCassandra cql
Cassandra cql
 
Sql
SqlSql
Sql
 
Introdução ao Hive
Introdução ao HiveIntrodução ao Hive
Introdução ao Hive
 
Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8
 
Lighting Talk - Apache Cassandra
Lighting Talk - Apache CassandraLighting Talk - Apache Cassandra
Lighting Talk - Apache Cassandra
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysql
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Algumas das principais características do NoSQL
Algumas das principais características do NoSQLAlgumas das principais características do NoSQL
Algumas das principais características do NoSQL
 

Apresentação cassandra

  • 1. Compreendendo o Modelo de dados Apache Cassandra
  • 2. Sistemas Distribuídos Alunos: ARCANJO GABRIEL 096096 PEDRO BRAGANICK 096123 RICHIELY BATISTA 100930
  • 3. Roteiro: - O modelo de dados - Keyspaces - Column families - Indexes - Técnicas conceituais - Alguns comandos CQL - Collections – set list map - Estudo de caso - Twissandra
  • 4. O modelo de dados NoSQL - Not only SQL CQL - Cassandra Query Language - Usado para distribuir dados em larga escala. Escalabilidade; Performance; Consistência. A definição do modelo visa as consultas que se quer otimizar.
  • 6. Devemos exaltar o NoSQL e minimizar o Modelo de dados Relacional? R.: De forma alguma ! "Cassandra thinks about data the way we think about data. Most of us think about data in rows and columns. So does Cassandra." Quais respostas vou obter? - SQL Quais perguntas poderei fazer? - NoSQL Consultas de forma sequencial no tempo em determinados intervalos. "Quantas pessoas estrangeiras passaram pelos aeroportos brasileiros no período da Copa do Mundo?"
  • 7. Modelo Relacional vs NoSQL -Escalonamento -Consistência -Disponibilidade • Acesso rápido a dados (desde que você possa manter tudo na memória); • Rápida replicação de dados / distribuídos por vários nós; • Esquema flexível (você pode adicionar novas colunas instantaneamente);
  • 8. Esquema de RDBM x Keyspace Repositório dos dados
  • 9. Column Family Em JavaScript Object Notacion (JSON): Musican: ColumnFamily 1 carlos: Rowkey email: carlos@inf.com, ColumnName:Value instrument: bass ColumnName:Value george: Rowkey email: george@inf.com ColumnName:Value Band: ColumnFamily 2 george: Rowkey fone: 1234 - 4567 ColumnName:Value
  • 10. Column Family Análogo as tabelas no modelo relacional?
  • 11. Super Column (1.2 não suporta - usa composite column) Quando uma linha de uma família de colunas contém uma coleção de pares nome/valor, a família de super coluna detém subcolunas, onde subcolunas são denominados grupos de colunas. "Um mapa cujas chaves são os nomes das colunas e os valores são as colunas."
  • 13. Row Podem possuir diferentes colunas; Não precisam ser congruentes: podem possuir quantidades diferentes de instâncias.
  • 14. Indexação Um índice é uma estrutura de dados que permite a consulta rápida e eficiente de dados correspondentes a uma determinada condição. -Índices Primários -Índices Alternativos
  • 15. Índice Primário Em Cassandra, o índice primário, para uma família de coluna, é o índice de suas chaves de linhas. (Row Key) Users = { "edanuff" : { Rowkey email: "ed@anuff.com" } }
  • 16. Índice Secundário Índices secundários em Cassandra referem-se a índices em valores de coluna (para distingui-los a partir do índice principal linha de chave para uma família de coluna). Índice Secundário é um índice alternativo pois não utiliza de chave de linha (Rowkey). Não é recomendado para valores de alta cardinalidade (ou seja, timestamps, datas de nascimento, keyworlds, etc) Requer pelo menos uma comparação de igualdade em uma consulta - não eficiente para: menor que / maior que / intervalo de consultas
  • 19. Select Suponha que exista Column Family departamentos e funcionários com relações um-para-muitos, respectivamente. São elas Emps e Deps . Em Emps há ID dos empregados utilizados como chaves e há Nome, Data de nascimento e cidade. Em deps chaves são ID do departamento e única coluna é Nome. select * from EMPS onde Data de nascimento = '12/10/1990' ???
  • 20. Select Solução: Adicionar uma Column Family DataNasc_emps em que a chave é uma data e o nome das colunas são IDs dos empregados que nasceram na data, essas colunas não precisam ser preenchidas podendo ser vazias representadas por um '-'. Para responder a consulta precisamos apenas recuperar todas as colunas para a chave '12/10/1990', lembrando que sempre que um empregado for acrescentado ou excluído DataNasc_emps precisa ser atualizada.
  • 21. Join Como fazer a consulta: select * from Emps e, d Deps onde e.dep_id = d.dep_id ???
  • 22. Join Solução: Basta criarmos uma Column Family Dept_emps onde as chaves serão os IDs de departamento e as colunas serão os IDs dos empregados. Assim a consulta poderia ser facilmente realizada retornando as colunas de cada chave.
  • 23. Group by select count(*) from Emps group by cidade ????
  • 24. Group by Solução: Basicamente será feito a mesma coisa do Select, criando uma nova Column Family Cidade_emps tendo como chave uma cidade e IDs dos empregados como colunas. Neste caso você vai contar o número de empregados recuperados. Ou pode ter uma coluna count com o número de empregados pré-calculados.
  • 25. Order by Os registros podem ser ordenados pela chave usando o OrderPreservingPartitioner. Para manter os dados ordenados você pode usar o automaticamente ordenação por nomes de coluna.
  • 26. Mais sobre o que há de novo no Cassandra- 1.2? *Collections*
  • 27. Colletions - Set Um Set armazena um grupo de elementos que são retornados na ordem de classificação, quando consultada. A coluna de tipo consiste conjunto de desordenado de valores únicos. CREATE TABLE users ( user_id text PRIMARY KEY, first_name text, last_name text, emails set<text> );
  • 28. Colletions - Set Insertion INSERT INTO users (user_id, first_name, last_name, emails) VALUES('user', 'User', 'User', {'u@user.com', 'user@gmail.com'}); Update UPDATE users SET emails = emails + {'uu1@uu1.org'} WHERE user_id = 'user';
  • 29. Colletions - Set Remove UPDATE users SET emails = emails - {'uu1@uu1.org'} WHERE user_id = 'user'; Retrieval SELECT user_id, emails FROM users WHERE user_id = 'user';
  • 30. Colletions - List Quando a ordem dos elementos é considerada, o que pode não ser a ordem natural ditada pelo tipo de elementos, usar uma lista. Além disso, use uma lista quando você precisa armazenar mesmo valor várias vezes. Os valores da lista são retornados de acordo com o índice, já no Set é retornado em ordem alfabética. Insertion ALTER TABLE users ADD top_cidades list<text>; UPDATE users SET top_cidades = [ 'goiania', 'recife' ] WHERE user_id = 'user';
  • 31. Colletions - List Addition UPDATE users SET top_cidades = [ 'sao paulo' ] + top_cidades WHERE user_id = 'user'; Delete UPDATE users SET top_cidades = top_cidades - ['recife'] WHERE user_id = 'user';
  • 32. Colletions - Map Como o seu nome indica, um mapa mapeia uma coisa a outra. Um mapa é um par de chaves únicas chave e valores. Um caso de uso para o tipo mapa é armazenar informações timestamp relacionado em perfis de usuários. Insertion ALTER TABLE users ADD todo map<timestamp, reminder_text>;
  • 33. Colletions - Map Modification and replacement UPDATE users SET todo = { '2012-9-24' : 'entrou em goiania', '2012-10-2 12:00' : 'saiu de goiania' } WHERE user_id = 'user'; UPDATE users SET todo['2012-10-2 12:00'] = 'ficou em goiania' WHERE user_id = 'user';
  • 34. Colletions - Map Usando TTL UPDATE users USING TTL <computed_ttl> SET todo['2012-10-1'] = 'precisa sair' WHERE user_id = 'user'; Delete DELETE todo['2012-9-24'] FROM users WHERE user_id = 'user';
  • 35. Comandos CQL - Cassandra
  • 38. Denormalização Cópia do mesmo dado em múltiplas tabelas. Otimizar/simplificar as consultas. Conseguir os resultados em um só lugar. Dados estão altamente sendo modificados, logo caso você queria fazer uma retenção nos dados que são modificáveis pode perder a integridade do banco.
  • 39. Agragação-Composição Representação do tipo todo-parte. Se usado junto com a denormalização pode ter um grande impacto em performance e consistência.
  • 41. Agragação Atômica Permite armazenar uma entidade inteira em um documento, e atualizar de forma atômica. Minimizar o comportamento transacional: *Grande processamento de dados a todo momento (insert, update, delete).
  • 43. Chaves enumeráveis Apesar de ser dispendiosa uma ordenação, seu uso é de grande benefício. Ex.: E-mail •Ordem das mensagens, através de qualquer ID conhecido. Varredura de e-mails - backward ou forward.
  • 44. Uma modelagem, itte r (Twissandra)! https://github.com/twissandra/twissandra Usuários Tweets Followings Followers UserLine TimeLine
  • 47. Pesquisando Dados no Twissandra: Quem esta seguindo um usuário?   › A quem segue um usuário?   › Mostrar os meus tweets.   › UserLine. Mostrar os tweets de todos que eu estou seguindo.   › TimeLine.
  • 49. Quem é seguido por 'alice'?
  • 52. Um novo tweet de 'bob' Atualização nas CF's de User/TimeLine. Você como desenvolvedor tem que fazer isso.
  • 54. Conclusão Modelar bem o esquema para se obter consultas otimizadas; Não se perder durante o projeto; Atender as necessidades: Escalabilidade Disponibilidade Alto desempenho