SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Centro de Informática – Universidade Federal da Paraíba




              Ordenação e Recuperação de Dados
               Aula 4: Construção de Índices




                Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br
                                                                       1
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            2
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            3
Dicionário como um array de estruturas de
tamanho fixo




Espaço necessário: 20 bytes 4 bytes   4 bytes




                                                4
Árvore B para localizar entradas em um
índice




                                         5
Distância de Levenshtein para correção
ortográfica




                                         6
Aula de hoje


 Dois algoritmos para a construção de índices: BSBI (simples) e
  SPIMI (mais realista)
 Contrução distribuída de índices: MapReduce
 Construção dinâmica de índices: como manter o índice
  atualizado quando a coleção de documentos muda




                                                                   7
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            8
Hardware


  Muitas decisões de projeto em sistemas de recuperação da
   informação se devem a restrições do hardware.
  Vamos agora revisar os aspectos do hardware que são
   importantes para este curso.




                                                              9
Hardware
  Acesso aos dados em memória é mais rápido que acesso aos dados no
   disco (grosseiramente por um fator de 10)
  Tempo de busca no disco é desperdício: Nenhum dado é transferido
   enquanto a cabeça de leitura do disco está sendo posicionada.
  Para otimizar a transferência de dados do disco para a memória é melhor
   transferir um pedaço grande do que vários pedaços menores.
  Sistema de entrada/saída de disco é baseado em blocos: Leitura e escrita
   de blocos inteiros. Tamanho do bloco varia de 8KB a 256 KB
  Os servidores utilizados em sistemas de recuperação da informação
   geralmente tem vários GB de memória principal e TBs de espaço em
   disco.
  Tolerar falhas é caro: É melhor utilizar várias máquinas convencionais do
   que uma máquina tolerante a falhas.


                                                                           10
Coleção RCV1


  A coleção com as obras de Shakespeare não é grande o
   suficiente para demonstrar muitos dos pontos deste curso.
  Como exemplo para aplicar técnicas de construção de índices
   utilizaremos a coleção RCV1 da Reuters.
  Conjunto de artigos de notícias escritos em ingles entre 1995
   e 1996 (um ano).




                                                              11
Um documento da coleção RCV1




                               12
Estatísticas da RCV1
N     documentos                                  800,000
L     tokens por documento                        200
M     termos                                      400,000
      bytes por token (incl. espaços/pontuação)   6
      bytes por token (sem espaços/pontuação)     4.5
      bytes por termo                             7.5
T     postings não posicionais                    100,000,000

Exercícios:
• Qual a frequência média de um termo (quantos tokens) ?
• 4.5 bytes por token vs. 7.5 bytes por termo: por que essa
  diferença?
• Quantos postings posicionais?
                                                                13
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            14
Objetivo: construir o índice invertido




 dicionário                 postings
                                         15
Construção de índice
Ordenação dos postings em memória




                                    16
Construção de índices baseada em
ordenação
  Enquanto construímos o índice, analisamos os documentos um de cada
   vez.
  As listas de postings para cada termo estão incompletas até o final do
   processamento.
  Podemos manter todos os postings na memória e ordenar tudo ao fim do
   processamento?
  Não para grandes coleções de documentos
  Utilizando 10–12 bytes por posting, precisamos de muito espaço para
   grandes coleções.
  T = 100,000,000 para a RCV1: podemos ordenar isso em memória
   utilizando uma máquina convencional.
  Porém, construções de índices em memória principal não tem escala para
   grandes coleções de documentos.
  Portanto: precisamos armazenar resultados intermediários em disco.
                                                                            17
Podemos utilizar o mesmo algoritmo?


  Podemos utilizar o mesmo algoritmo de construção de
   índices para coleções maiores, apenas utilizando o disco ao
   invés da memória principal?
  Não: Ordenar T = 100,000,000 registros no disco é muito
   lento – muito tempo desperdiçado com o posicionamento da
   cabeça de leitura.
  Precisamos de um algoritmo de ordenação externa.



                                                            18
Algoritmo de ordenação externa
(movimentando menos a cabeça de leitura)

   Precisamos ordenar T = 100,000,000 postings não posicionais.
      Cada posting tem 12 bytes (4+4+4: termID, docID, frequencia).
   Definir um bloco com 10.000.000 desses postings
      Podemos armazenar facilmente um bloco desses na memória
       principal.
      Para o RCV1 teremos 10 desses blocos.
   Ideia básica do algoritmo:
      Para cada bloco: (i) armazene os postings, (ii) ordene em
       memória, (iii) grave no disco
      Mais tarde, faça o merge dos blocos formando uma grande lista
       ordenada.
                                                                   19
Fazendo o merge de dois blocos




                                 20
Indexação baseada em blocos ordenados (Blocked
Sort-Based Indexing – BSBI)




   Decisão chave: Qual o tamanho do bloco?


                                              21
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            22
Problema com os algoritmos baseados em
ordenação

  Supomos que poderíamos manter o dicionário na memória
   principal.
  Precisamos do dicionário (que cresce dinamicamente) para
   poder implementar um mapeamento entre termo e termID.
  Na verdade, poderíamos trabalhar com postings do tipo
   termo,docID ao invés de postings do tipo termID,docID . . .
  . . . mas assim os arquivos intermediários ficariam muito
   grandes.



                                                                 23
Indexação em memória com passo único
(Single-pass in-memory indexing)

  Abreviação: SPIMI
  Ideia chave 1: Gerar dicionários separados para cada bloco –
   não é necessário manter uma correspondência termo-termID
   entre blocos.
  Ideia chave 2: Não ordene. Acumule os postings nas listas à
   medida em que ocorrem.
  Com essas duas ideias é possível gerar um índice invertido
   completo para cada bloco.
  Esses índices separados podem então ser combinados em um
   grande índice.
                                                             24
SPIMI-Invert




               25
SPIMI: Compressão


  Compressão torna o SPIMI ainda mais eficiente.
     Compressão de termos
     Compressão de postings
     Veremos mais na próxima aula




                                                    26
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            27
Indexação Distribuída


  Indexação na escala da web: necessário utilizar um cluster de
   computação distribuída
  Máquinas individuais são sujeitas a falhas.
     Podem ficar muito lentas ou falhar de forma imprevisível.
  Como explorar um conjunto muito grande dessas máquinas
   sujeitas a falhas?




                                                                  28
Data Centers do Google (estimativas de 2007)
  Os data centers do Google são formados principalmente por máquinas
   comuns.
  São distribuídos ao redor do mundo.
  1 milhão de servidores, 3 milhões de processadores/núcleos
  O Google instala 100.000 servidores por semestre.
  Gastos entre 200 e 260 milhões de dólares por ano
  Representa 10% da capacidade computacional mundial!
  Se um sistema que não tolera falhas é formado por 1000 nós, cada nó
   com um uptime de 99.9%, qual é o uptime do sistema inteiro (assumindo
   que ele não tolera falhas)?
      Resposta: 63%

  Suponha que um servidor falhará a cada 3 anos. Qual o intervalo entre a
   falha de duas máquinas em uma instalação com 1 milhão de servidores?
      Resposta: menos de dois minutos

                                                                             29
Indexação Distribuída


  Mantenha uma máquina mestre controlando o trabalho de
   indexação
  Quebre o processo de indexação em conjuntos de tarefas
   paralelas independentes
  A máquina mestre distribui a execução das tarefas em uma
   coleção de máquinas.




                                                              30
Tarefas paralelas


  Definiremos dois conjuntos de tarefas paralelas e dois tipos de
   máquinas para executá-las:
     Pré-processadores (parsers)
     Indexadores (Inverters)
  Quebre a coleção de documentos de entrada em sub-coleções
   (correspondentes aos blocos no BSBI/SPIMI)




                                                                31
Pré-processadores (Parsers)


  O mestre atribui uma sub-coleção a uma máquina desocupada.
  O pré-processador lê os documentos e gera os pares
   (termo,docID).
  Os pré-processadores gravam os pares em n partições de
   termos.
  Cada partição representa uma faixa alfabética
     E.g., a-f, g-p, q-z (com: n = 3)




                                                          32
Indexadores


  Um indexador coleta pares (termo,docID), que são os postings
   para uma determinada partição.
  Ordena a lista em seguida grava o resultado




                                                             33
Fluxo de dados




                 34
MapReduce

  O algoritmo de indexação que acabamos de ver é uma
   instância do MapReduce.
  MapReduce é um framework robusto e conceitualmente
   simples para computação distribuída . . .
  . . .que não exige a codificação para a parte da distribuição das
   tarefas.
  O processo de indexação do Google consistia (em 2002) de um
   número de fases, cada uma delas implementadas utilizando o
   MapReduce.
  Construção do índice invertido era uma das fases.

                                                                 35
Agenda
❶   Revisão

❷   Introdução
❸   Algoritmo BSBI
❹   Algoritmo SPIMI

❺   Indexação Distribuída

❻   Indexação Dinâmica
                            36
Indexação dinâmica


  Até agora assumimos que as coleções de documentos são
   estáticas.
  Elas raramente são: documentos são inseridos, removidos e
   modificados
  Isto significa que os dicionários e listas de postings precisam ser
   dinamicamente modificados




                                                                  37
Indexação dinâmica: a abordagem mais
simples

  Manter um índice principal no disco
  Novos documentos são inseridos em pequenos índices
   auxiliares em memória principal.
  Fazer a pesquisa em ambos e combinar os resultados
  Periodicamente os índices auxiliares são combinados com o
   índice principal
  Remoções
     Vetor de bits de validade para os documentos removidos
     Filtrar os documentos retornados utilizando os bits desse vetor

                                                                    38
Problemas com o uso de índice principal e
auxiliares
  Merges frequentes
  Fraco desempenho em pesquisas realizadas durante um merge
  Na verdade:
      Combinar os índices auxiliares com o índice principal não leva tanto
       tempo se cada lista de postings é armazenada em um arquivo separado.
      Nesse caso, o merge é simplesmente uma concatenação.
      Porém, isso requer um número muito grande de arquivos, o que reduz a
       eficiência do sistema.
  Suposição para o restante do curso: o índice é um grande arquivo único
  Na prática: usa-se um esquema intermediário (e.g., quebrar listas de
   postings muito grandes em vários arquivos, combinar listas menores em um
   único arquivo, etc.)

                                                                            39
Indexação dinâmica em grandes motores de
busca


  Geralmente uma combinação
     Modificações incrementais frequentes
     Rotação de grandes partes do índice que podem então ser
      trazidas para a memória principal
     Reconstrução completa ocasional (fica mais difícil com o
      aumento do tamanho – não é certo se o Google conseguiria
      reconstruir totalmente o seu índice)




                                                                 40
Construindo índices posicionais



  Basicamente o mesmo problema com a exceção de que as
   estruturas de dados intermediárias são maiores.




                                                          41

Weitere ähnliche Inhalte

Andere mochten auch

Apache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosApache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosRafael Domingues
 
Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Plataformatec
 
Classificação e Ponderação
Classificação e PonderaçãoClassificação e Ponderação
Classificação e PonderaçãoAlexandre Duarte
 
Dicionários e Recuperação Tolerante
Dicionários e Recuperação ToleranteDicionários e Recuperação Tolerante
Dicionários e Recuperação ToleranteAlexandre Duarte
 
Classficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesClassficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesAlexandre Duarte
 
Modelo de Espaço Vetorial
Modelo de Espaço VetorialModelo de Espaço Vetorial
Modelo de Espaço VetorialAlexandre Duarte
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorialTuane Paixão
 
Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendaçãoAnderson Dantas
 
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoAula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoNilton Heck
 
10. índices e indicadores ambientais
10. índices e indicadores ambientais10. índices e indicadores ambientais
10. índices e indicadores ambientaisVirna Salgado Barra
 

Andere mochten auch (13)

Apache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosApache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos Resultados
 
Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009
 
Classificação e Ponderação
Classificação e PonderaçãoClassificação e Ponderação
Classificação e Ponderação
 
Cálculo de Score
Cálculo de ScoreCálculo de Score
Cálculo de Score
 
Dicionários e Recuperação Tolerante
Dicionários e Recuperação ToleranteDicionários e Recuperação Tolerante
Dicionários e Recuperação Tolerante
 
Classficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesClassficação de Texto e Naive Bayes
Classficação de Texto e Naive Bayes
 
Modelo de Espaço Vetorial
Modelo de Espaço VetorialModelo de Espaço Vetorial
Modelo de Espaço Vetorial
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorial
 
Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendação
 
Norma ABNT 6034 Índice
Norma ABNT 6034 ÍndiceNorma ABNT 6034 Índice
Norma ABNT 6034 Índice
 
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoAula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
 
10. índices e indicadores ambientais
10. índices e indicadores ambientais10. índices e indicadores ambientais
10. índices e indicadores ambientais
 
Projeto de Experimentos
Projeto de ExperimentosProjeto de Experimentos
Projeto de Experimentos
 

Ähnlich wie Construção de Índices

24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration StrategiesMurilo Miranda
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...Fabrício Catae
 
NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisNoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisCarlo Pires
 
Arquiteturas_risc_e_cisc
Arquiteturas_risc_e_ciscArquiteturas_risc_e_cisc
Arquiteturas_risc_e_ciscBruno Dias
 
Bancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemBancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemJoão Gabriel Lima
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftAmazon Web Services LATAM
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringFelipe Klerk Signorini
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Thiago de Azeredo
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 

Ähnlich wie Construção de Índices (20)

LT - Redis
LT - RedisLT - Redis
LT - Redis
 
Material Seminário NoSQL
Material Seminário NoSQLMaterial Seminário NoSQL
Material Seminário NoSQL
 
C-Store 7 years later
C-Store 7 years laterC-Store 7 years later
C-Store 7 years later
 
24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies
 
Introdução ao banco de dados
Introdução ao banco de dadosIntrodução ao banco de dados
Introdução ao banco de dados
 
BANCO DE DADOS.pptx
BANCO DE DADOS.pptxBANCO DE DADOS.pptx
BANCO DE DADOS.pptx
 
No sql o_que_e_isso.key
No sql o_que_e_isso.keyNo sql o_que_e_isso.key
No sql o_que_e_isso.key
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
 
Hardware memória principal
Hardware  memória  principalHardware  memória  principal
Hardware memória principal
 
NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens ComputacionaisNoSQL x SQL: Bancos de Dados em Nuvens Computacionais
NoSQL x SQL: Bancos de Dados em Nuvens Computacionais
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Arquiteturas_risc_e_cisc
Arquiteturas_risc_e_ciscArquiteturas_risc_e_cisc
Arquiteturas_risc_e_cisc
 
Bancos de dados NoSQL
Bancos de dados NoSQLBancos de dados NoSQL
Bancos de dados NoSQL
 
Bancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemBancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagem
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
NoSQL & SQL
NoSQL & SQLNoSQL & SQL
NoSQL & SQL
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 

Mehr von Alexandre Duarte

Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosAlexandre Duarte
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Alexandre Duarte
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaAlexandre Duarte
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como CiênciaAlexandre Duarte
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: IntroduçãoAlexandre Duarte
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerAlexandre Duarte
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBAlexandre Duarte
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisAlexandre Duarte
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e ClassificaçãoAlexandre Duarte
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2DAlexandre Duarte
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1DAlexandre Duarte
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de DadosAlexandre Duarte
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosAlexandre Duarte
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de SurveysAlexandre Duarte
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Alexandre Duarte
 
Introdução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosIntrodução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosAlexandre Duarte
 

Mehr von Alexandre Duarte (20)

Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de Experimentos
 
Causalidade e Abdução
Causalidade e AbduçãoCausalidade e Abdução
Causalidade e Abdução
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!
 
Atividades Científica
Atividades CientíficaAtividades Científica
Atividades Científica
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de Pesquisa
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como Ciência
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: Introdução
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPB
 
Agrupamento com K-Means
Agrupamento com K-MeansAgrupamento com K-Means
Agrupamento com K-Means
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis Nominais
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e Classificação
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2D
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1D
 
Transformação de Dados
Transformação de DadosTransformação de Dados
Transformação de Dados
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de Dados
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de Experimentos
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de Surveys
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01
 
Introdução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosIntrodução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de Dados
 

Construção de Índices

  • 1. Centro de Informática – Universidade Federal da Paraíba Ordenação e Recuperação de Dados Aula 4: Construção de Índices Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br 1
  • 2. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 2
  • 3. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 3
  • 4. Dicionário como um array de estruturas de tamanho fixo Espaço necessário: 20 bytes 4 bytes 4 bytes 4
  • 5. Árvore B para localizar entradas em um índice 5
  • 6. Distância de Levenshtein para correção ortográfica 6
  • 7. Aula de hoje  Dois algoritmos para a construção de índices: BSBI (simples) e SPIMI (mais realista)  Contrução distribuída de índices: MapReduce  Construção dinâmica de índices: como manter o índice atualizado quando a coleção de documentos muda 7
  • 8. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 8
  • 9. Hardware  Muitas decisões de projeto em sistemas de recuperação da informação se devem a restrições do hardware.  Vamos agora revisar os aspectos do hardware que são importantes para este curso. 9
  • 10. Hardware  Acesso aos dados em memória é mais rápido que acesso aos dados no disco (grosseiramente por um fator de 10)  Tempo de busca no disco é desperdício: Nenhum dado é transferido enquanto a cabeça de leitura do disco está sendo posicionada.  Para otimizar a transferência de dados do disco para a memória é melhor transferir um pedaço grande do que vários pedaços menores.  Sistema de entrada/saída de disco é baseado em blocos: Leitura e escrita de blocos inteiros. Tamanho do bloco varia de 8KB a 256 KB  Os servidores utilizados em sistemas de recuperação da informação geralmente tem vários GB de memória principal e TBs de espaço em disco.  Tolerar falhas é caro: É melhor utilizar várias máquinas convencionais do que uma máquina tolerante a falhas. 10
  • 11. Coleção RCV1  A coleção com as obras de Shakespeare não é grande o suficiente para demonstrar muitos dos pontos deste curso.  Como exemplo para aplicar técnicas de construção de índices utilizaremos a coleção RCV1 da Reuters.  Conjunto de artigos de notícias escritos em ingles entre 1995 e 1996 (um ano). 11
  • 12. Um documento da coleção RCV1 12
  • 13. Estatísticas da RCV1 N documentos 800,000 L tokens por documento 200 M termos 400,000 bytes por token (incl. espaços/pontuação) 6 bytes por token (sem espaços/pontuação) 4.5 bytes por termo 7.5 T postings não posicionais 100,000,000 Exercícios: • Qual a frequência média de um termo (quantos tokens) ? • 4.5 bytes por token vs. 7.5 bytes por termo: por que essa diferença? • Quantos postings posicionais? 13
  • 14. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 14
  • 15. Objetivo: construir o índice invertido dicionário postings 15
  • 16. Construção de índice Ordenação dos postings em memória 16
  • 17. Construção de índices baseada em ordenação  Enquanto construímos o índice, analisamos os documentos um de cada vez.  As listas de postings para cada termo estão incompletas até o final do processamento.  Podemos manter todos os postings na memória e ordenar tudo ao fim do processamento?  Não para grandes coleções de documentos  Utilizando 10–12 bytes por posting, precisamos de muito espaço para grandes coleções.  T = 100,000,000 para a RCV1: podemos ordenar isso em memória utilizando uma máquina convencional.  Porém, construções de índices em memória principal não tem escala para grandes coleções de documentos.  Portanto: precisamos armazenar resultados intermediários em disco. 17
  • 18. Podemos utilizar o mesmo algoritmo?  Podemos utilizar o mesmo algoritmo de construção de índices para coleções maiores, apenas utilizando o disco ao invés da memória principal?  Não: Ordenar T = 100,000,000 registros no disco é muito lento – muito tempo desperdiçado com o posicionamento da cabeça de leitura.  Precisamos de um algoritmo de ordenação externa. 18
  • 19. Algoritmo de ordenação externa (movimentando menos a cabeça de leitura)  Precisamos ordenar T = 100,000,000 postings não posicionais.  Cada posting tem 12 bytes (4+4+4: termID, docID, frequencia).  Definir um bloco com 10.000.000 desses postings  Podemos armazenar facilmente um bloco desses na memória principal.  Para o RCV1 teremos 10 desses blocos.  Ideia básica do algoritmo:  Para cada bloco: (i) armazene os postings, (ii) ordene em memória, (iii) grave no disco  Mais tarde, faça o merge dos blocos formando uma grande lista ordenada. 19
  • 20. Fazendo o merge de dois blocos 20
  • 21. Indexação baseada em blocos ordenados (Blocked Sort-Based Indexing – BSBI)  Decisão chave: Qual o tamanho do bloco? 21
  • 22. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 22
  • 23. Problema com os algoritmos baseados em ordenação  Supomos que poderíamos manter o dicionário na memória principal.  Precisamos do dicionário (que cresce dinamicamente) para poder implementar um mapeamento entre termo e termID.  Na verdade, poderíamos trabalhar com postings do tipo termo,docID ao invés de postings do tipo termID,docID . . .  . . . mas assim os arquivos intermediários ficariam muito grandes. 23
  • 24. Indexação em memória com passo único (Single-pass in-memory indexing)  Abreviação: SPIMI  Ideia chave 1: Gerar dicionários separados para cada bloco – não é necessário manter uma correspondência termo-termID entre blocos.  Ideia chave 2: Não ordene. Acumule os postings nas listas à medida em que ocorrem.  Com essas duas ideias é possível gerar um índice invertido completo para cada bloco.  Esses índices separados podem então ser combinados em um grande índice. 24
  • 26. SPIMI: Compressão  Compressão torna o SPIMI ainda mais eficiente.  Compressão de termos  Compressão de postings  Veremos mais na próxima aula 26
  • 27. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 27
  • 28. Indexação Distribuída  Indexação na escala da web: necessário utilizar um cluster de computação distribuída  Máquinas individuais são sujeitas a falhas.  Podem ficar muito lentas ou falhar de forma imprevisível.  Como explorar um conjunto muito grande dessas máquinas sujeitas a falhas? 28
  • 29. Data Centers do Google (estimativas de 2007)  Os data centers do Google são formados principalmente por máquinas comuns.  São distribuídos ao redor do mundo.  1 milhão de servidores, 3 milhões de processadores/núcleos  O Google instala 100.000 servidores por semestre.  Gastos entre 200 e 260 milhões de dólares por ano  Representa 10% da capacidade computacional mundial!  Se um sistema que não tolera falhas é formado por 1000 nós, cada nó com um uptime de 99.9%, qual é o uptime do sistema inteiro (assumindo que ele não tolera falhas)?  Resposta: 63%  Suponha que um servidor falhará a cada 3 anos. Qual o intervalo entre a falha de duas máquinas em uma instalação com 1 milhão de servidores?  Resposta: menos de dois minutos 29
  • 30. Indexação Distribuída  Mantenha uma máquina mestre controlando o trabalho de indexação  Quebre o processo de indexação em conjuntos de tarefas paralelas independentes  A máquina mestre distribui a execução das tarefas em uma coleção de máquinas. 30
  • 31. Tarefas paralelas  Definiremos dois conjuntos de tarefas paralelas e dois tipos de máquinas para executá-las:  Pré-processadores (parsers)  Indexadores (Inverters)  Quebre a coleção de documentos de entrada em sub-coleções (correspondentes aos blocos no BSBI/SPIMI) 31
  • 32. Pré-processadores (Parsers)  O mestre atribui uma sub-coleção a uma máquina desocupada.  O pré-processador lê os documentos e gera os pares (termo,docID).  Os pré-processadores gravam os pares em n partições de termos.  Cada partição representa uma faixa alfabética  E.g., a-f, g-p, q-z (com: n = 3) 32
  • 33. Indexadores  Um indexador coleta pares (termo,docID), que são os postings para uma determinada partição.  Ordena a lista em seguida grava o resultado 33
  • 35. MapReduce  O algoritmo de indexação que acabamos de ver é uma instância do MapReduce.  MapReduce é um framework robusto e conceitualmente simples para computação distribuída . . .  . . .que não exige a codificação para a parte da distribuição das tarefas.  O processo de indexação do Google consistia (em 2002) de um número de fases, cada uma delas implementadas utilizando o MapReduce.  Construção do índice invertido era uma das fases. 35
  • 36. Agenda ❶ Revisão ❷ Introdução ❸ Algoritmo BSBI ❹ Algoritmo SPIMI ❺ Indexação Distribuída ❻ Indexação Dinâmica 36
  • 37. Indexação dinâmica  Até agora assumimos que as coleções de documentos são estáticas.  Elas raramente são: documentos são inseridos, removidos e modificados  Isto significa que os dicionários e listas de postings precisam ser dinamicamente modificados 37
  • 38. Indexação dinâmica: a abordagem mais simples  Manter um índice principal no disco  Novos documentos são inseridos em pequenos índices auxiliares em memória principal.  Fazer a pesquisa em ambos e combinar os resultados  Periodicamente os índices auxiliares são combinados com o índice principal  Remoções  Vetor de bits de validade para os documentos removidos  Filtrar os documentos retornados utilizando os bits desse vetor 38
  • 39. Problemas com o uso de índice principal e auxiliares  Merges frequentes  Fraco desempenho em pesquisas realizadas durante um merge  Na verdade:  Combinar os índices auxiliares com o índice principal não leva tanto tempo se cada lista de postings é armazenada em um arquivo separado.  Nesse caso, o merge é simplesmente uma concatenação.  Porém, isso requer um número muito grande de arquivos, o que reduz a eficiência do sistema.  Suposição para o restante do curso: o índice é um grande arquivo único  Na prática: usa-se um esquema intermediário (e.g., quebrar listas de postings muito grandes em vários arquivos, combinar listas menores em um único arquivo, etc.) 39
  • 40. Indexação dinâmica em grandes motores de busca  Geralmente uma combinação  Modificações incrementais frequentes  Rotação de grandes partes do índice que podem então ser trazidas para a memória principal  Reconstrução completa ocasional (fica mais difícil com o aumento do tamanho – não é certo se o Google conseguiria reconstruir totalmente o seu índice) 40
  • 41. Construindo índices posicionais  Basicamente o mesmo problema com a exceção de que as estruturas de dados intermediárias são maiores. 41