Upload
alexandre-duarte
View
740
Download
2
Embed Size (px)
Citation preview
Ordenação e Recuperação de Dados
Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br
Centro de Informática – Universidade Federal da Paraíba
Aula 4: Construção de Índices
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
4
Dicionário como um array de estruturas de tamanho fixo
4
Espaço necessário: 20 bytes 4 bytes 4 bytes
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
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
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
NL M
T
documentostokens por documentotermosbytes por token (incl. espaços/pontuação)bytes por token (sem espaços/pontuação)bytes por termopostings não posicionais
800,000200400,00064.57.5100,000,000
Agenda
❶ Revisão
❷ Introdução
❸ Algoritmo BSBI
❹ Algoritmo SPIMI
❺ Indexação Distribuída
❻ Indexação Dinâmica
14
15
Objetivo: construir o índice invertido
15
dicionário postings
16
Construção de índiceOrdenaçã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
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-termIDentre 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
25
SPIMI-Invert
25
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
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
34
Fluxo de dados
34
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
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