Class InvertedListIndex
java.lang.Object
AEDs3.DataBase.Index.InvertedListIndex
- All Implemented Interfaces:
AutoCloseable
Classe que implementa um índice reverso por Lista Invertida.
Gerencia um índice invertido no disco, mantendo um cache limitado (LRU)
na memória com número ajustável de entradas. O restante é armazenado nos
arquivos em disco.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classRepresenta uma postagem em cache, contendo uma lista de IDs associados a uma palavra e a frequência dessa palavra.private static final recordClasse auxiliar para armazenar informações sobre a localização de um bloco no disco. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final RandomAccessFileAcesso aleatório ao arquivo de blocos.private final StringCaminho para o arquivo que armazena as postagens reais (palavra para lista de IDs).private final Map<String, InvertedListIndex.CachedPosting> Este cache armazena as postagens para atécacheSizepalavras.private longTamanho atual do cache.private static final intTamanho padrão do cache, definido como 1024.private final StringCaminho para o arquivo que armazena o dicionário mapeando palavra para offset nos blocos.private final RandomAccessFileAcesso aleatório ao arquivo de diretório.private final RandomAccessFileAcesso aleatório ao arquivo de frequência.private final StringCaminho para o arquivo que armazena o dicionário mapeando palavra para frequência.private static final intFrequência máxima permitida para uma palavra, definida como 4096. -
Constructor Summary
ConstructorsConstructorDescriptionInvertedListIndex(String blocksFilePath, String directoryFilePath, String frequencyFilePath) Construtor único. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Fecha o índice invertido, garantindo que todas as postagens em cache sejam descarregadas para o disco antes de fechar os arquivos de acesso aleatório.booleanCria (insere) uma nova entrada.booleanDeleta uma associação (palavra para id).voiddestruct()Destrói o índice invertido.voidDescarrega todas as postagens que estão atualmente no cache para o disco.private voidflushPostingToDisk(String word, InvertedListIndex.CachedPosting posting) Salva a postagem que está na memória de volta para o disco, adicionando novos registros.longRetorna o tamanho atual do cache.static intRetorna o tamanho padrão do cache.private InvertedListIndex.CachedPostinggetPosting(String word) Recupera uma postagem do cache ou a carrega do disco se não estiver em cache.private voidInicializa os arquivos necessários para o índice invertido.String[]Lista todos os caminhos de arquivoprivate InvertedListIndex.CachedPostingloadPostingFromDisk(String word) Carrega ou cria a lista de postagens e frequência para uma palavra específica do disco.int[]Lê (busca) uma entrada.private static StringMétodo auxiliar que lê uma string codificada em UTF-8 a partir de um arquivo de acesso aleatório.voidsetCacheSize(long cacheSize) Define o tamanho do cache.private static voidwriteString(RandomAccessFile raf, String s) Método auxiliar que escreve uma string codificada em UTF-8 em um arquivo de acesso aleatório, precedida por um inteiro que indica o comprimento da string.
-
Field Details
-
DEFAULT_CACHE_SIZE
private static final int DEFAULT_CACHE_SIZETamanho padrão do cache, definido como 1024.- See Also:
-
MAX_FREQUENCY
private static final int MAX_FREQUENCYFrequência máxima permitida para uma palavra, definida como 4096.- See Also:
-
blocksFilePath
Caminho para o arquivo que armazena as postagens reais (palavra para lista de IDs). -
directoryFilePath
Caminho para o arquivo que armazena o dicionário mapeando palavra para offset nos blocos. -
frequencyFilePath
Caminho para o arquivo que armazena o dicionário mapeando palavra para frequência. -
blkRaf
Acesso aleatório ao arquivo de blocos. -
dirRaf
Acesso aleatório ao arquivo de diretório. -
freqRaf
Acesso aleatório ao arquivo de frequência. -
cacheSize
private long cacheSizeTamanho atual do cache. -
cache
Este cache armazena as postagens para atécacheSizepalavras. Evicção baseada em LRU (LinkedHashMap com ordem de acesso = true).
-
-
Constructor Details
-
InvertedListIndex
public InvertedListIndex(String blocksFilePath, String directoryFilePath, String frequencyFilePath) throws IOException Construtor único.- Parameters:
blocksFilePath- Caminho para o arquivo de blocos (postagens).directoryFilePath- Caminho para o arquivo de diretório (palavra para offset).frequencyFilePath- Caminho para o arquivo de frequência (palavra para frequência).- Throws:
IllegalStateException- se alguns arquivos existirem enquanto outros não. Cria novos arquivos vazios se nenhum existir; caso contrário, recarrega os arquivos existentes minimamente (não os lê inteiramente na memória).IOException- se ocorrer um erro de entrada/saída durante a inicialização.
-
-
Method Details
-
create
Cria (insere) uma nova entrada.- Parameters:
word- A palavra a ser inserida.id- O ID do documento/entidade a ser associado a essa palavra.- Returns:
- true se a entrada foi criada com sucesso.
- Throws:
IllegalStateException- se a frequência da palavra for > 10000 ou qualquer outro erro lógico.
-
read
Lê (busca) uma entrada.- Parameters:
word- A palavra a ser buscada.- Returns:
- Todos os IDs correspondentes, ou um array vazio se nenhum for encontrado.
- Throws:
IllegalStateException- se a frequência da palavra for > 10000.
-
delete
Deleta uma associação (palavra para id).- Parameters:
word- a palavra a ser atualizadaid- o ID a ser removido de suas postagens- Returns:
- true se foi realmente removido; false se não encontrado
-
destruct
Destrói o índice invertido. Este método deleta todos os arquivos associados a este índice do disco, garantindo que todos os dados em cache sejam primeiro descarregados para o disco.- Throws:
IOException- se ocorrer um erro de entrada/saída durante o processo.
-
listFilePaths
Lista todos os caminhos de arquivo- Returns:
- um array de caminhos de arquivo que este objeto gerencia
-
initFiles
private void initFiles()Inicializa os arquivos necessários para o índice invertido. Verifica a existência dos arquivos de blocos, diretório e frequência. Se nenhum dos arquivos existir, cria novos arquivos vazios. Se apenas alguns dos arquivos existirem, lança uma exceção indicando que não é possível inicializar o índice devido à inconsistência.- Throws:
RuntimeException- se ocorrer um erro ao criar novos arquivos.IllegalStateException- se alguns arquivos existirem enquanto outros não.
-
getPosting
Recupera uma postagem do cache ou a carrega do disco se não estiver em cache. Se não houver entrada no disco (palavra não encontrada no diretório), retorna uma nova postagem.- Parameters:
word- A palavra cuja postagem deve ser recuperada.- Returns:
- A postagem em cache correspondente à palavra, ou uma nova postagem se não encontrada.
-
readString
Método auxiliar que lê uma string codificada em UTF-8 a partir de um arquivo de acesso aleatório. A string é precedida por um inteiro que indica seu comprimento.- Parameters:
raf- O arquivo de acesso aleatório de onde a string será lida.- Returns:
- A string lida do arquivo.
- Throws:
IOException- Se ocorrer um erro de entrada/saída durante a leitura.
-
writeString
Método auxiliar que escreve uma string codificada em UTF-8 em um arquivo de acesso aleatório, precedida por um inteiro que indica o comprimento da string.- Parameters:
raf- O arquivo de acesso aleatório onde a string será escrita.s- A string a ser escrita no arquivo.- Throws:
IOException- Se ocorrer um erro de entrada/saída durante a escrita.
-
loadPostingFromDisk
Carrega ou cria a lista de postagens e frequência para uma palavra específica do disco.- Parameters:
word- A palavra cuja lista de postagens deve ser recuperada.- Returns:
- A postagem em cache correspondente à palavra, ou uma nova postagem se não encontrada.
- Throws:
RuntimeException- Se ocorrer um erro de entrada/saída ao carregar a palavra.
-
flushPostingToDisk
Salva a postagem que está na memória de volta para o disco, adicionando novos registros.- Parameters:
word- A palavra cuja postagem deve ser salva.posting- A postagem em cache que contém a lista de IDs e a frequência da palavra.
-
flushAllPostingsToDisk
public void flushAllPostingsToDisk()Descarrega todas as postagens que estão atualmente no cache para o disco. Este método itera sobre todas as entradas no cache, salvando cada postagem no disco e, em seguida, limpa o cache. Isso garante que todas as alterações feitas nas postagens em cache sejam persistidas no armazenamento permanente. -
close
Fecha o índice invertido, garantindo que todas as postagens em cache sejam descarregadas para o disco antes de fechar os arquivos de acesso aleatório.- Specified by:
closein interfaceAutoCloseable- Throws:
IOException- se ocorrer um erro de entrada/saída ao fechar os arquivos.
-
getDefaultCacheSize
public static int getDefaultCacheSize()Retorna o tamanho padrão do cache.- Returns:
- O tamanho padrão do cache.
-
getCacheSize
public long getCacheSize()Retorna o tamanho atual do cache.- Returns:
- O tamanho atual do cache.
-
setCacheSize
public void setCacheSize(long cacheSize) Define o tamanho do cache.- Parameters:
cacheSize- O novo tamanho do cache.
-