Class BTree
java.lang.Object
AEDs3.DataBase.Index.BTree
- All Implemented Interfaces:
ForwardIndex
Classe que representa uma Árvore B, implementando a interface Index.
Esta classe fornece métodos para gerenciar uma estrutura de Árvore B,
que é uma estrutura de dados auto-balanceada que mantém dados ordenados
e permite operações eficientes de inserção, exclusão e busca.
A Árvore B é armazenada em um arquivo, permitindo o armazenamento persistente da estrutura da árvore. Cada nó na Árvore B é representado por uma Página, que contém elementos e páginas filhas. Páginas só são mantidas na memória enquanto necessário.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate classRepresenta uma página na Árvore B, que contém elementos e filhos. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate RandomAccessFileArquivo de acesso aleatório para manipulação da Árvore B.private StringCaminho do arquivo onde a Árvore B é armazenada.private final intCapacidade de meia página da Árvore B.private final intCapacidade total de uma página na Árvore B.private BTree.PageA raiz da Árvore B. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate booleanantecessor(BTree.Page page, int ind, BTree.Page parentPage) Encontra e substitui o registro pelo seu antecessor.voiddelete(int id) Remove um registro da Árvore B com o identificador fornecido.private voidMétodo auxiliar para remover um registro da árvore B.private BTree.Pagedelete(ForwardIndexRegister reg, BTree.Page page, boolean[] shrunk) Método recursivo para remover um registro de uma página específica.voiddestruct()Destrói a Árvore B, fechando o arquivo e deletando-o do sistema de arquivos.intObtém a capacidade de meia página da Árvore B.private voidInsere um novo registro na árvore B.private BTree.Pageinsere(ForwardIndexRegister reg, BTree.Page page, ForwardIndexRegister[] regRet, boolean[] grown) Insere um registro em uma página específica da árvore B.voidinsert(int id, long pos) Insere um novo registro na Árvore B com o identificador e posição fornecidos.String[]Lista os caminhos relativos de todos os arquivos associados ao índice atual.private voidpageInsert(BTree.Page page, ForwardIndexRegister reg, BTree.Page pageRight) Insere um registro em uma página específica, ajustando os elementos e filhos.private booleanreconstruct(BTree.Page page, BTree.Page parentPage, int parentIdx) Reconstrói a árvore após a remoção de um registro, se necessário.private voidsave()Salva todas as páginas carregadas, partindo da raiz e seguindo recursivamente.longsearch(int id) Busca um registro na Árvore B pelo identificador fornecido.private ForwardIndexRegisterBusca um registro na árvore B a partir de um registro de índice fornecido.private ForwardIndexRegistersearch(ForwardIndexRegister reg, BTree.Page page) Busca um registro na árvore B a partir de um registro de índice e uma página fornecidos.private voidunload()Descarrega a Árvore B da memória, liberando os recursos associados.
-
Field Details
-
root
A raiz da Árvore B. -
halfPageCapacity
private final int halfPageCapacityCapacidade de meia página da Árvore B. -
pageCapacity
private final int pageCapacityCapacidade total de uma página na Árvore B. -
filePath
Caminho do arquivo onde a Árvore B é armazenada. -
file
Arquivo de acesso aleatório para manipulação da Árvore B.
-
-
Constructor Details
-
BTree
Construtor que cria uma Árvore B a partir de um arquivo existente.- Parameters:
filePath- O caminho para o arquivo onde a Árvore B está armazenada.- Throws:
IOException- Se ocorrer um erro de I/O ao acessar o arquivo.
-
BTree
Construtor que cria uma nova Árvore B com uma ordem especificada e caminho de arquivo.- Parameters:
order- A ordem da Árvore B, que determina o número máximo de filhos que cada nó pode ter.filePath- O caminho para o arquivo onde a Árvore B será armazenada.- Throws:
IOException- Se ocorrer um erro de I/O ao criar o arquivo.
-
-
Method Details
-
destruct
Destrói a Árvore B, fechando o arquivo e deletando-o do sistema de arquivos.- Specified by:
destructin interfaceForwardIndex- Throws:
IOException- Se ocorrer um erro de I/O ao fechar ou deletar o arquivo.
-
save
Salva todas as páginas carregadas, partindo da raiz e seguindo recursivamente.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de salvamento.
-
unload
private void unload()Descarrega a Árvore B da memória, liberando os recursos associados. -
search
Busca um registro na Árvore B pelo identificador fornecido.- Specified by:
searchin interfaceForwardIndex- Parameters:
id- O identificador do registro a ser buscado.- Returns:
- A posição do registro no arquivo, ou -1 se o registro não for encontrado.
- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de busca.
-
search
Busca um registro na árvore B a partir de um registro de índice fornecido.- Parameters:
reg- O registro de índice a ser buscado.- Returns:
- O registro de índice encontrado ou null se não encontrado.
- Throws:
IOException- Se ocorrer um erro de I/O durante a busca.
-
search
Busca um registro na árvore B a partir de um registro de índice e uma página fornecidos.- Parameters:
reg- O registro de índice a ser buscado.page- A página atual onde a busca é realizada.- Returns:
- O registro de índice encontrado ou null se não encontrado.
- Throws:
IOException- Se ocorrer um erro de I/O durante a busca.
-
insert
Insere um novo registro na Árvore B com o identificador e posição fornecidos.- Specified by:
insertin interfaceForwardIndex- Parameters:
id- O identificador do registro a ser inserido.pos- A posição do registro no arquivo.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de inserção.
-
insere
Insere um novo registro na árvore B.- Parameters:
reg- O registro a ser inserido.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de inserção.
-
insere
private BTree.Page insere(ForwardIndexRegister reg, BTree.Page page, ForwardIndexRegister[] regRet, boolean[] grown) throws IOException Insere um registro em uma página específica da árvore B.- Parameters:
reg- O registro a ser inserido.page- A página atual onde a inserção é realizada.regRet- Array para armazenar o registro retornado.grown- Array para indicar se a árvore cresceu.- Returns:
- A página resultante após a inserção.
- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de inserção.
-
pageInsert
private void pageInsert(BTree.Page page, ForwardIndexRegister reg, BTree.Page pageRight) throws IOException Insere um registro em uma página específica, ajustando os elementos e filhos.- Parameters:
page- A página onde o registro será inserido.reg- O registro a ser inserido.pageRight- A página à direita do registro inserido.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de inserção.
-
delete
Remove um registro da Árvore B com o identificador fornecido.- Specified by:
deletein interfaceForwardIndex- Parameters:
id- O identificador do registro a ser removido.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de remoção.
-
delete
Método auxiliar para remover um registro da árvore B.- Parameters:
reg- O registro a ser removido.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de remoção.
-
delete
private BTree.Page delete(ForwardIndexRegister reg, BTree.Page page, boolean[] shrunk) throws IOException Método recursivo para remover um registro de uma página específica.- Parameters:
reg- O registro a ser removido.page- A página atual onde a busca e remoção são realizadas.shrunk- Array booleano que indica se a página diminuiu de tamanho.- Returns:
- A página resultante após a remoção.
- Throws:
IOException- Se ocorrer um erro de I/O durante a operação de remoção.
-
antecessor
Encontra e substitui o registro pelo seu antecessor.- Parameters:
page- A página atual.ind- O índice do registro na página.parentPage- A página pai.- Returns:
truese a página diminuiu de tamanho, caso contráriofalse.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação.
-
reconstruct
private boolean reconstruct(BTree.Page page, BTree.Page parentPage, int parentIdx) throws IOException Reconstrói a árvore após a remoção de um registro, se necessário.- Parameters:
page- A página atual.parentPage- A página pai.parentIdx- O índice da página atual na página pai.- Returns:
truese a página diminuiu de tamanho, caso contráriofalse.- Throws:
IOException- Se ocorrer um erro de I/O durante a operação.
-
getHalfPageCapacity
public int getHalfPageCapacity()Obtém a capacidade de meia página da Árvore B. Este é o mesmo valor passado ao construtor na criação do índice.- Returns:
- A capacidade de meia página, que é a metade do número máximo de elementos que uma página pode conter.
-
listFilePaths
Description copied from interface:ForwardIndexLista os caminhos relativos de todos os arquivos associados ao índice atual.- Specified by:
listFilePathsin interfaceForwardIndex- Returns:
- Um array de strings contendo os caminhos relativos de todos os arquivos utilizados por este índice.
-