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. 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
●
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
●
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. 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/
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. Indexando no MongoDB
Exemplo 1:
> db.movies.find().count();
3883 //ará!!!
Conclusão:
Sem o índice, a busca teve que
percorrer todos os documentos da
coleção.
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. 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. 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. 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
●
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. Í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. Í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
●
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
●