Indexando e
Ordenando
Data Sets
Como criar índices e ordenar
dados usando os data stores
MongoDB, CouchDB e
Apache Cassand...
Tópicos Abordados
Conceitos iniciais:
●

Breve revisão das estruturas de dados
utilizadas na construção de índices.

Index...
Tópicos Abordados
Indexando no CouchDB:
●

Como as views são utilizadas na
construção automática de índices.

Indexando no...
Conceitos Iniciais

Breve revisão das
estruturas de dados
utilizadas na
construção de índices
Conceitos Iniciais
Buscas lineares são impraticáveis!
Índices permitem:
buscas eficientes
● ordenação dos dados
●

Blocos ...
Indexando no
MongoDB

Explorando a criação
e manipulação de
índices com o
MongoDB
Indexando no MongoDB
Plano de execução:
cursor: tipo de cursor. Pode ser Basic
ou B-tree.
● nscanned: número de entradas
v...
Indexando no MongoDB
Exemplos:
●

●

Dados obtidos do site
http://grouplens.org/datasets/movielens/
Importados para o Mong...
Indexando no MongoDB
Exemplo 1:
●

Obtendo o plano de execução de
pesquisa sobre a coleção movies
Indexando no MongoDB
Exemplo 1:
> db.movies.find({title:/Alien/i}); //busca pela franquia Alien
{ "_id" : 1200, "title" : ...
Indexando no MongoDB
Exemplo 1:
> db.movies.find({title:/Alien/i}).explain(); //o método explain() 
//retorna o plano de 
...
Indexando no MongoDB
Exemplo 1:
> db.movies.find().count();
3883  //a­rá!!!

Conclusão:
Sem o índice, a busca teve que
per...
Indexando no
MongoDB
Criando índices no
MongoDB
Criando índices no MongoDB
Exemplo 2:
> db.ratings.find({movie_id:1200}).explain();
{
"cursor" : "BasicCursor",
"n" : 1820...
Criando índices no MongoDB
Exemplo 2:
Criando um índice sobre o campo
movie_id
> db.ratings.ensureIndex({movie_id:1});
●

...
Criando índices no MongoDB
Após a criação do índice:
O cursor utilizado é do tipo Btree
● O número de objetos percorridos
...
Criando índices no MongoDB
Outros métodos para manipulação de
índices:
getIndexes: retorna a lista de índices
da coleção
●...
Indexando no
MongoDB
Chaves Compostas
Índices únicos e
esparsos
Chaves compostas
Índices podem conter vários campos:
> db.ratings.ensureIndex({movie_id:1,rating:­1});
> 
> db.ratings.get...
Chaves embutidas
Campos embutidos:
Campos de documentos aninhados
também pode ser usados como chave
em índices
● Documento...
Índices esparsos
Índices esparsos:
Incluindo a opção {sparse:true} na
criação do índice, este é criado esparso
● Índices e...
Índices esparsos
Índices únicos:
●

são criados fornecendo a opção
{unique:true} para o comando
ensureIndex()

caso a cole...
Indexando no
CouchDB e
Cassandra
Explorando a criação
e manipulação de
índices com o
MongoDB
CouchDB
View:
é uma função MapReduce executada
para cada documento da coleção
● o resultado de uma view é emitido pela
fun...
CouchDB
View:
●

B-Tree oferecem suporte a MVCC
(Multi-Version Concurrency Control)
Cassandra
Índices:
●

●

São implementados como hash-tables
● Não suportam pesquisa por intervalo
São criados na definição...
Obrigado!

Referências:
Shashank Tiwari (2011).
Professional NoSQL,
capítulo 8, “Indexing and
Ordering Data Sets”
Próximos SlideShares
Carregando em…5
×

Indexando e Ordenando Data Sets

373 visualizações

Publicada em

Como utilizar índices no MongoDB

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
373
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • Indexando e Ordenando Data Sets

    1. 1. Indexando e Ordenando Data Sets Como criar índices e ordenar dados usando os data stores MongoDB, CouchDB e Apache Cassandra
    2. 2. Tópicos Abordados Conceitos iniciais: ● Breve revisão das estruturas de dados utilizadas na construção de índices. Indexando no MongoDB: Criando e usando Índices no MongoDB ● Chaves compostas e embutidas ● Índices únicos e esparsos ● Busca baseada em palavras-chaves e multi-chaves ●
    3. 3. Tópicos Abordados Indexando no CouchDB: ● Como as views são utilizadas na construção automática de índices. Indexando no Cassandra: Definindo índices para as colunas ● Busca chave-valor ●
    4. 4. Conceitos Iniciais Breve revisão das estruturas de dados utilizadas na construção de índices
    5. 5. Conceitos Iniciais Buscas lineares são impraticáveis! Índices permitem: buscas eficientes ● ordenação dos dados ● Blocos de construção: Árvores B e B+ ● Tabelas Hash ●
    6. 6. Indexando no MongoDB Explorando a criação e manipulação de índices com o MongoDB
    7. 7. Indexando no MongoDB Plano de execução: cursor: tipo de cursor. Pode ser Basic ou B-tree. ● nscanned: número de entradas visitadas; ● nscannedObjects: documentos visitados; ● n: número de documentos retornados; ● millis: tempo de execução da query, em milisegundos; ● indexBounds: valores mínimo e ●
    8. 8. Indexando no MongoDB Exemplos: ● ● Dados obtidos do site http://grouplens.org/datasets/movielens/ Importados para o MongoDB por aplicativo disponível em http://www.wrox.com/
    9. 9. Indexando no MongoDB Exemplo 1: ● Obtendo o plano de execução de pesquisa sobre a coleção movies
    10. 10. Indexando no MongoDB Exemplo 1: > db.movies.find({title:/Alien/i}); //busca pela franquia Alien { "_id" : 1200, "title" : "Aliens (1986)", "genres" : [ "Action", "Sci-Fi", "Thriller", "War" ] } { "_id" : 1214, "title" : "Alien (1979)", "genres" : [ "Action", "Horror", "Sci-Fi", "Thriller" ] } { "_id" : 1320, "title" : "AlienB3 (1992)", "genres" : [ "Action", "Horror", "Sci-Fi", "Thriller" ] } { "_id" : 1690, "title" : "Alien: Resurrection (1997)", "genres" : [ "Action", "Horror", "Sci-Fi" ] } { "_id" : 1692, "title" : "Alien Escape (1995)", "genres" : [ "Horror", "Sci-Fi" ] } { "_id" : 3701, "title" : "Alien Nation (1988)", "genres" : [ "Crime", "Drama", "Sci-Fi" ] } > //6 filmes retornados
    11. 11. Indexando no MongoDB Exemplo 1: > db.movies.find({title:/Alien/i}).explain(); //o método explain()  //retorna o plano de  //execução { "cursor" : "BasicCursor", //busca sem índice "n" : 6, "nscannedObjects" : 3883,  //vamos guardar esse número  "nscanned" : 3883, "nChunkSkips" : 0, "millis" : 6, "indexBounds" : {}, } 
    12. 12. Indexando no MongoDB Exemplo 1: > db.movies.find().count(); 3883  //a­rá!!! Conclusão: Sem o índice, a busca teve que percorrer todos os documentos da coleção.
    13. 13. Indexando no MongoDB Criando índices no MongoDB
    14. 14. Criando índices no MongoDB Exemplo 2: > db.ratings.find({movie_id:1200}).explain(); { "cursor" : "BasicCursor", "n" : 1820, "nscannedObjects" : 1000209, "nscanned" : 1000209, "millis" : 457, "indexBounds" : {}, } ● São percorridos mais de 1 milhão de documentos
    15. 15. Criando índices no MongoDB Exemplo 2: Criando um índice sobre o campo movie_id > db.ratings.ensureIndex({movie_id:1}); ● > db.ratings.find({movie_id:1200}).explain(); { "cursor" : "BtreeCursor movie_id_1", "n" : 1820, "nscannedObjects" : 1820, "nscanned" : 1820, "millis" : 6, "indexBounds" : { "movie_id" : [[1200,1200]] }, }
    16. 16. Criando índices no MongoDB Após a criação do índice: O cursor utilizado é do tipo Btree ● O número de objetos percorridos restringiu-se ao resultado da pesquisa ● O tempo de execução é reduzido drasticamente (de ~400ms para 6ms) ● Recuperação de documentos por intervalo ●
    17. 17. Criando índices no MongoDB Outros métodos para manipulação de índices: getIndexes: retorna a lista de índices da coleção ● dropIndex: descarta um índice ● reIndex: remonta o índice ● hint: ao executar uma consulta, pode-se “recomendar” um índice específico ●
    18. 18. Indexando no MongoDB Chaves Compostas Índices únicos e esparsos
    19. 19. Chaves compostas Índices podem conter vários campos: > db.ratings.ensureIndex({movie_id:1,rating:­1}); >  > db.ratings.getIndexes(); [ {"v" : 1, "key" : {"_id" : 1},"ns" : "mydb.ratings", "name" : "_id_" }, { "v" : 1,"key" : {"movie_id" : 1},"ns" : "mydb.ratings", "name" : "movie_id_1" }, { "v" : 1, "key" : {"movie_id" : 1,"rating" : ­1}, "ns" : "mydb.ratings", "name" : "movie_id_1_rating_­1" } ]
    20. 20. Chaves embutidas Campos embutidos: Campos de documentos aninhados também pode ser usados como chave em índices ● Documentos e arrays também servem como chaves de índices ● > var pessoa = {nome:”joao silva”,  endereco:{ rua:”das dores”, numero:1, cidade:”udia”  }                 }; > > db.pessoas.ensureIndex({“endereco.rua”:1}); //OK > db.pessoas.ensureIndex({endereco:1}); 
    21. 21. Índices esparsos Índices esparsos: Incluindo a opção {sparse:true} na criação do índice, este é criado esparso ● Índices esparsos não indexam documentos para os quais o valor da chave é nulo ● Econimiza-se espaço, mas o documento não é alcançável pelo índice ●
    22. 22. Índices esparsos Índices únicos: ● são criados fornecendo a opção {unique:true} para o comando ensureIndex() caso a coleção já possua documentos com valores duplicados para a chave de um índice único, o índice não é criado ● porém, com a opção {dropDups:true}, duplicações são eliminadas da coleção ●
    23. 23. Indexando no CouchDB e Cassandra Explorando a criação e manipulação de índices com o MongoDB
    24. 24. CouchDB View: é uma função MapReduce executada para cada documento da coleção ● o resultado de uma view é emitido pela função emit(key,value) ● as linhas retornadas pela view são armazenadas em um índice (B-Tree), de forma que consultas subsequentes são realizadas sobre o índice ●
    25. 25. CouchDB View: ● B-Tree oferecem suporte a MVCC (Multi-Version Concurrency Control)
    26. 26. Cassandra Índices: ● ● São implementados como hash-tables ● Não suportam pesquisa por intervalo São criados na definição da coluna
    27. 27. Obrigado! Referências: Shashank Tiwari (2011). Professional NoSQL, capítulo 8, “Indexing and Ordering Data Sets”

    ×