Extendible Hashing - XChanitoX/Proyecto1_BD2 GitHub Wiki

Consideraciones

Para la construcción del Extendible Hashing se implementó con la idea de una árbol binario con una altura máxima. Para utilizar esta clase ExtendibleHash se debe definir el tipo de registro y el tipo de dato de su key. En esta ocasión, estamos utilizando un dataset de datos de una institución educativa en el cual tiene campos como id que será su llave primaria, gender, entre otros que especificaremos a continuación.

Descripcion del Codigo

Para la implementación de esta estructura de indexación se han utilizado las siguientes clases:

  • class Bucket
  • class FreeList
  • class ExtendibleHash

Class Bucket <class Record, class Key>

Un bucket generalmente corresponde a un bloque de memoria en donde se almacena uno o más registros. Los datos para la extructura de indexación en archivos Hash-based Index se almacenarán en los Buckets que tendrá un factor de bloque = 0.

Atributos

Record arrayRecords[BLOCKFACTOR]: En este arreglo de registros se guardarán todos los datos y tendrá una longitud máxima que se define en el factor de bloque.

int nextBucket: Indica el siguiente Bucket.

int count: Este es un contador para saber la cantidad de registros guardos en el arreglo.

Metodos

Veremos los métodos más resaltantes de esta clase.

void addRecord(Record record)

En este método agregamos un registro al bucket.Si el contador es menor que el factor de bloque, entonces se añade al array de registros. Sino se lanza una excepción.

static bool compareRecords(const Record& recordA,const Record& recordB)

Este método estático se implementó para comparar dos registros según su key que usaremos para ordenar los registros. Asimismo es importante en búsqueda por rangos.

vector<Record> getAllDifferentRecords(Key key)

Este vector obtiene todos los registros diferentes a un key dado como argumento.

Class FreeList <class Record, class Key>

Un FreeList es una técnica utilizada en un esquema para asignación de memoria dinámica. Su objetivo es conectar regiones de memoria no asignadas o eilimanada en un linkedlist. Se utilizará la estrategia LIFO para reducir la complejidad de la eliminación e inserción.

Métodos

int length()

Este método tiene la función de devolver la cantidad de registros que hay en un archivo.

vector scanAll()
addRecord()

Complejidad

⚠️ **GitHub.com Fallback** ⚠️