construção de Índices

Post on 19-Jul-2015

738 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related