Indexando e Ordenando Data Sets

Embed Size (px)

DESCRIPTION

Como utilizar índices no MongoDB

Citation preview

  • 1. Indexando e Ordenando Data Sets Como criar ndices e ordenar dados usando os data stores MongoDB, CouchDB e Apache Cassandra

2. Tpicos Abordados Conceitos iniciais: Breve reviso das estruturas de dados utilizadas na construo 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. Tpicos Abordados Indexando no CouchDB: Como as views so utilizadas na construo automtica de ndices.Indexando no Cassandra: Definindo ndices para as colunas Busca chave-valor 4. Conceitos IniciaisBreve reviso das estruturas de dados utilizadas na construo de ndices 5. Conceitos Iniciais Buscas lineares so impraticveis! ndices permitem: buscas eficientes ordenao dos dados Blocos de construo: rvores B e B+ Tabelas Hash 6. Indexando no MongoDBExplorando a criao e manipulao de ndices com o MongoDB 7. Indexando no MongoDB Plano de execuo: cursor: tipo de cursor. Pode ser Basic ou B-tree. nscanned: nmero de entradas visitadas; nscannedObjects: documentos visitados; n: nmero de documentos retornados; millis: tempo de execuo da query, em milisegundos; indexBounds: valores mnimo e 8. Indexando no MongoDB Exemplos: Dados obtidos do site http://grouplens.org/datasets/movielens/ Importados para o MongoDB por aplicativo disponvel em http://www.wrox.com/ 9. Indexando no MongoDB Exemplo 1: Obtendo o plano de execuo de pesquisa sobre a coleo movies 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. Indexando no MongoDB Exemplo 1: >db.movies.find({title:/Alien/i}).explain();//omtodoexplain() //retornaoplanode //execuo { "cursor":"BasicCursor",//buscasemndice "n":6, "nscannedObjects":3883,//vamosguardaressenmero "nscanned":3883, "nChunkSkips":0, "millis":6, "indexBounds":{}, } 12. Indexando no MongoDB Exemplo 1: >db.movies.find().count(); 3883//ar!!!Concluso: Sem o ndice, a busca teve que percorrer todos os documentos da coleo. 13. Indexando no MongoDB Criando ndices no MongoDB 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":{}, } So percorridos mais de 1 milho 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":"BtreeCursormovie_id_1", "n":1820, "nscannedObjects":1820, "nscanned":1820, "millis":6, "indexBounds":{ "movie_id":[[1200,1200]] }, } 16. Criando ndices no MongoDB Aps a criao do ndice: O cursor utilizado do tipo Btree O nmero de objetos percorridos restringiu-se ao resultado da pesquisa O tempo de execuo reduzido drasticamente (de ~400ms para 6ms) Recuperao de documentos por intervalo 17. Criando ndices no MongoDB Outros mtodos para manipulao de ndices: getIndexes: retorna a lista de ndices da coleo dropIndex: descarta um ndice reIndex: remonta o ndice hint: ao executar uma consulta, pode-se recomendar um ndice especfico 18. Indexando no MongoDB Chaves Compostas ndices nicos e esparsos 19. Chaves compostas ndices podem conter vrios 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. Chaves embutidas Campos embutidos: Campos de documentos aninhados tambm pode ser usados como chave em ndices Documentos e arrays tambm servem como chaves de ndices >varpessoa={nome:joaosilva, endereco:{ rua:dasdores,numero:1,cidade:udia } }; > >db.pessoas.ensureIndex({endereco.rua:1});//OK >db.pessoas.ensureIndex({endereco:1}); 21. ndices esparsos ndices esparsos: Incluindo a opo {sparse:true} na criao do ndice, este criado esparso ndices esparsos no indexam documentos para os quais o valor da chave nulo Econimiza-se espao, mas o documento no alcanvel pelo ndice 22. ndices esparsos ndices nicos: so criados fornecendo a opo {unique:true} para o comando ensureIndex()caso a coleo j possua documentos com valores duplicados para a chave de um ndice nico, o ndice no criado porm, com a opo {dropDups:true}, duplicaes so eliminadas da coleo 23. Indexando no CouchDB e Cassandra Explorando a criao e manipulao de ndices com o MongoDB 24. CouchDB View: uma funo MapReduce executada para cada documento da coleo o resultado de uma view emitido pela funo emit(key,value) as linhas retornadas pela view so armazenadas em um ndice (B-Tree), de forma que consultas subsequentes so realizadas sobre o ndice 25. CouchDB View: B-Tree oferecem suporte a MVCC (Multi-Version Concurrency Control) 26. Cassandra ndices: So implementados como hash-tables No suportam pesquisa por intervalo So criados na definio da coluna 27. Obrigado!Referncias: Shashank Tiwari (2011). Professional NoSQL, captulo 8, Indexing and Ordering Data Sets