Articulo de referencia

Arquitectura de Btrieve

Btrieve es una base de datos desarrollada por Pervasive Software . Su arquitectura se ha diseñado pensando en la gestión de registros. Esto significa que Btrieve se encarga únic...

Btrieve es una base de datos desarrollada por Pervasive Software . Su arquitectura se ha diseñado pensando en la gestión de registros. Esto significa que Btrieve se encarga únicamente de las operaciones básicas de creación, recuperación, actualización y eliminación de registros. Junto con el motor de base de datos MicroKernel, utiliza ISAM ( Método de Acceso Secuencial Indexado ) como mecanismo de almacenamiento.

Btrieve es esencialmente una base de datos que utiliza claves e índices para organizar los datos . Sin embargo, la estructura del archivo se basa principalmente en unidades de datos más pequeñas, llamadas "páginas" en Btrieve. Aunque la estructura ha cambiado a lo largo de las distintas versiones de Btrieve, sigue girando en torno a un Registro de Control de Archivo (FCR), que define la configuración de las páginas, y las páginas del archivo Btrieve que contienen datos. Históricamente, Btrieve utilizaba "páginas físicas", es decir, páginas ubicadas en posiciones fijas del archivo. A partir de la versión 6.0, se empezaron a utilizar "páginas lógicas", que se asignaban a tablas de asignación de páginas (PAT). Esto permitió a Btrieve cambiar su técnica de actualización de registros, pasando de lo que más tarde se conocería como "paginación de preimagen" a una técnica llamada "paginación en la sombra".

Btrieve está comprometido con la retrocompatibilidad , ya que las versiones de Btrieve hasta la versión 6.15 utilizan un formato de archivo estándar y, hasta que se lanzó Btrieve 6.0, eran completamente retrocompatibles. Btrieve 6.0 introdujo nuevas características y tuvo que romper la compatibilidad con versiones anteriores del software para implementar características más avanzadas. La API también se mantuvo retrocompatible, con solo una característica (dividir archivos en medios separados) que se eliminó. En un momento dado, el ex director ejecutivo de Btrieve , Ron Harris, declaró que "¡La API de la versión 1.0 todavía es compatible con la versión 6.15, y la vamos a mantener para siempre!" [ 1 ] : 11 .

Terminología de bases de datos

Inicialmente, Pervasive utilizó el término "base de datos de navegación" para describir Btrieve, pero posteriormente lo cambió a "base de datos transaccional". El uso del término "base de datos de navegación" era inusual porque una base de datos de navegación utiliza "punteros" y "rutas" para navegar entre los registros de datos , y estos punteros están contenidos en el propio registro; ISAM, que es la estructura fundamental de Btrieve, utiliza una tabla de índices secundaria para almacenar estos punteros y así reducir los tiempos de búsqueda. Por lo tanto, los dos tipos de bases de datos son diferentes, lo que podría explicar, o no, por qué Pervasive comenzó a utilizar una terminología distinta para clasificar su base de datos. [ a ]

Motor de base de datos de micro-núcleo

El modelo MKDE permite integrar diferentes sistemas de bases de datos en el producto de software de Pervasive.

A partir de la versión 6.15, Pervasive comenzó a utilizar un nuevo método modular para separar el backend de la base de datos de la interfaz que utilizaban los desarrolladores. Separaron las operaciones principales de la base de datos (como actualizar, escribir y eliminar registros) de los módulos Btrieve y Scalable SQL . Al separar el Motor de Base de Datos de Micro-Kernel (MKDE) de las demás funciones, permitió a los programadores utilizar varios métodos para acceder a la base de datos simultáneamente. Por ejemplo, una aplicación puede crearse utilizando la API de Btrieve y otra aplicación que necesite acceder a los mismos datos puede utilizar un método totalmente diferente, como Scalable SQL. Dado que las primitivas de registro se han separado de estos métodos, ambas aplicaciones pueden utilizar el MKDE para acceder al mismo archivo de datos .

El motor de base de datos de microkernel no guarda relación con los núcleos de los sistemas operativos de microkernel .

Paginación

El formato de archivo Btrieve se compone exclusivamente de páginas, que son los datos que se transfieren entre la memoria y el medio de almacenamiento cuando el motor realiza una operación de entrada/salida . Las versiones anteriores a la 6.0 solo utilizaban páginas de datos, páginas de índice y un registro de control de archivo (FCR). El archivo tenía un índice de búsqueda vinculado a páginas físicas. A partir de la versión 6.0, se empezaron a utilizar páginas lógicas , que son páginas que se asignan a páginas físicas (páginas en una ubicación fija del archivo) en el disco mediante un conjunto de tablas de asignación de páginas (PAT).

Registro de control de archivos

El registro de control de archivo (FCR) contiene información importante sobre los archivos de la base de datos Btrieve. Almacena el tamaño de página , el número de páginas en uso, el número de claves que pueden indexar el archivo, el número de registros en el archivo y otros detalles. Después de la versión 6.0, se utilizaron dos FCR para redundancia. Un campo de conteo de uso de 32 bits que existe en cada FCR se utiliza para determinar cuál era válido para usar. Cada vez que se realiza una operación en un archivo, el campo se incrementa. El FCR con el conteo de uso más alto se convierte en el FCR válido. El FCR está bien descrito en los ejemplos de código fuente de Jim Kyle. Con la introducción de la versión 8 de MKDE, la estructura de la página FCR cambió. El tamaño de página ahora se encuentra dentro del FCR y no es un campo regular de 32 bits. Desde la versión 8, debe calcular el tamaño de página tomando el campo de 32 bits en el desplazamiento 0x2A y multiplicándolo por 256.

Tablas de asignación de páginas

Una tabla de asignación de páginas (PAT) relaciona las páginas lógicas con las páginas físicas. Cada PAT es simplemente una página física ubicada en posiciones bien definidas. Al igual que las FCR, las PAT siempre aparecen en pares, y la copia actualmente válida se indica con un mayor número de usos. El primer par de PAT sigue inmediatamente a las dos primeras FCR y ocupa las páginas físicas 2 y 3. A continuación, se asignan varias páginas adicionales, y un nuevo par de PAT sigue a estas. Cada PAT tiene un número fijo de punteros a páginas lógicas, y cada entrada vacía tiene un valor de cero.

La cantidad de registros lógicos que se pueden almacenar en la PAT está determinada por el tamaño de su página. Cada puntero de página en las versiones 6.x y 7.x de MKDE ocupa 4 bytes de espacio, y el encabezado de la PAT ocupa 8 bytes, por lo que la cantidad de páginas lógicas en la PAT es:

Número de páginas lógicas = ( Tamaño de página ÷ 4) - 8

Con la introducción de la versión 8 de MKDE, el tamaño del encabezado de página cambió, por lo que esta fórmula ya no se aplica, pero el principio sigue siendo el mismo.

Paginación de preimagen frente a paginación de sombra

Hasta la versión 6.0, se utilizaba la paginación de preimagen para actualizar los registros. Este proceso implicaba la creación de un nuevo archivo de preimagen antes de realizar los cambios, y luego las páginas del archivo de datos original se copiaban temporalmente en este nuevo archivo. Posteriormente, el sistema realizaba los cambios en el archivo original. Si la actualización se interrumpía y solo se escribía la mitad de los datos en la página, el motor revertía la página copiando el contenido del archivo de preimagen a la página dañada del archivo de base de datos original, y luego se eliminaba el archivo de preimagen temporal. Los archivos de preimagen tenían la extensión .PRE, por lo que su presencia en el sistema generalmente indicaba que una transacción no se había realizado correctamente y que la recuperación no había sido exitosa.

A partir de la versión 6.0, se utilizó la paginación de sombra en lugar de la preimagen, y se sigue utilizando hasta el día de hoy. En lugar de copiar la página en un archivo temporal , se buscaba la siguiente ubicación física disponible en el archivo de base de datos y se escribía la página en dicha ubicación. Esta página se denomina página de sombra porque su ubicación aún no se ha escrito en la tabla de accesos personales (PAT) del archivo. Una vez completada la actualización de la página de sombra, se actualizaba la PAT y se registraba la entrada correspondiente a la siguiente página física disponible y actual del archivo. Sin embargo, si se producía un fallo del sistema durante la actualización de la página de sombra, la PAT no se actualizaba y, por lo tanto, el cambio se perdía, ya que la entrada actual y la siguiente no se habían actualizado en la PAT.

El cambio de la paginación previa a la imagen a la paginación en la sombra provocó cambios radicales en el formato de archivo que rompieron la compatibilidad entre las versiones anteriores de Btrieve y la versión 6.x del producto.

Páginas de secuencia de intercalación alternativa

Las páginas de secuencia de intercalación alternativa (ACS, por sus siglas en inglés) permiten ordenar los registros de forma diferente. La intercalación consiste en organizar la información escrita en un orden estándar. En el lenguaje común, se denomina alfabetización, aunque no se limita a ordenar las letras del alfabeto . Por ejemplo, una ACS puede permitir ordenar tanto con distinción entre mayúsculas y minúsculas como sin ella. Antes de la versión 6.0, solo se podía almacenar una ACS en el archivo; sin embargo, tras su lanzamiento, se podían asociar varias páginas ACS a un archivo simultáneamente.

Páginas adicionales

En la versión 6.0 y posteriores, pueden existir más páginas físicas de las que se utilizan realmente. Esto se debe a que, con la paginación en la sombra, algunas páginas del sistema pueden no tener una entrada en la tabla de asignación de páginas (PAT). Estas páginas se marcan como páginas "adicionales" y se utilizan antes de que se asigne espacio para nuevas páginas.

Tablas de asignación de cola variable

En Btrieve, cada página tiene un tamaño fijo, pero un registro puede ser mayor que el tamaño de la página. Esto significa que, a menudo, los registros deben fragmentarse y distribuirse en varias páginas. Con registros muy grandes, esto puede implicar que se necesiten cientos de páginas para almacenar el registro. Un enfoque de lista enlazada permitiría esta fragmentación, pero el motor de Btrieve tendría dificultades para leer registros secuenciales. Por lo tanto, a partir de la versión 6.1, se utiliza una tabla en el archivo que almacena punteros a cada una de las páginas que componen el registro de datos. Esta tabla se denomina tabla de asignación de cola variable (VAT).

Indexación

Btrieve utiliza índices en ciertas columnas para recuperar datos rápidamente. La estructura superior es una estructura de datos de árbol B e indexa la columna ID de empleado de la tabla de la base de datos. Las flechas apuntan desde el valor del índice a las filas que contienen el valor en la columna ID de empleado.

Btrieve utiliza un formato de árbol B para almacenar índices de registros en columnas de tabla específicas . El índice asigna cada conjunto de valores de columna indexados al conjunto de identificadores únicos de las filas que contienen dichos valores, lo que permite encontrar rápidamente las filas dentro de una tabla utilizando la columna indexada. Los árboles B son estructuras de datos de árbol y resultan muy eficientes como mecanismo para la recuperación rápida de datos. La desventaja de un árbol B es que los datos deben estar constantemente equilibrados al insertarse en el árbol; por lo tanto, Btrieve solo almacena el índice de registro como un árbol B para reducir el tiempo necesario para insertar y actualizar registros. Se mantiene un árbol B independiente para cada índice del sistema, y ​​la información del nodo raíz se guarda en el FCR. En Btrieve 6.xa, se puede crear un nuevo índice al crear un archivo, o agregarlo y eliminarlo después de su creación. Las páginas de índice también se crean según sea necesario. Antes de Btrieve 6.0, no se podían eliminar los índices de clave existentes, aunque sí se podían crear y eliminar índices suplementarios según fuera necesario.

Btrieve permite valores de clave duplicados en un índice. Btrieve maneja las claves duplicadas mediante un método de duplicado vinculado o un método de duplicado repetido (esta terminología comenzó a usarse con el lanzamiento de la versión 6.0). El método de duplicado vinculado utilizaba un par de punteros de registro en la propia página del índice para apuntar al principio y al final de una lista doblemente enlazada de claves duplicadas. Esto significaba que el orden de las claves duplicadas en la lista era el orden en que se introdujeron. El método de clave duplicada no utilizaba una lista enlazada, sino que hacía que todas las claves fueran únicas creando una nueva clave de índice y añadiendo la dirección del puntero de registro al final de la clave. Esto significa que la clave se recupera según su posición.

Compartir archivos

Cuando Btrieve necesitaba compartir archivos para acceder a los registros, podía utilizar dos modos diferentes: el modo de uso compartido de archivos de un solo motor (SEFS) y el modo de uso compartido de archivos de varios motores (MEFS). El modo SEFS solo permitía a los clientes que accedían a ese motor modificar la base de datos; otros clientes que accedían a un motor diferente no podían acceder a ella. El modo MEFS permite que diferentes clientes que se ejecutan en distintos motores accedan a la base de datos.

Concurrencia

Btrieve pudo gestionar transacciones concurrentes en la serie 6.x. Antes de Btrieve 6.0, el motor solo permitía el bloqueo a nivel de archivo o el bloqueo exclusivo ; a partir de la versión 6.0, los registros podían bloquearse individualmente. El bloqueo a nivel de registro (o página) se conocía como bloqueo concurrente . Las ventajas eran evidentes: varios clientes podían acceder al archivo simultáneamente, siempre que no intentaran acceder al mismo registro, lo que mejoraba el rendimiento. Además, otros clientes podían leer las páginas bloqueadas y no veían ningún cambio en un archivo involucrado en una transacción de escritura realizada por otro proceso que hubiera bloqueado el registro.

El modo MEFS no admitía completamente el bloqueo concurrente. Si un cliente iniciaba una transacción concurrente y luego intentaba realizar una operación de escritura en un registro, el motor Btrieve devolvía un código de estado 85 que indicaba que el archivo estaba bloqueado, incluso aunque se estuviera utilizando un bloqueo concurrente.

Transacciones del sistema y del usuario

A partir de la versión 6.15 de Btrieve, se introdujo un nuevo tipo de transacción de base de datos denominada transacción del sistema , que se separó de las transacciones de usuario . Las transacciones de usuario son exclusivas y concurrentes, mientras que las transacciones del sistema son un conjunto de operaciones no transaccionales y/o transacciones de usuario. Las transacciones del sistema se utilizaban exclusivamente para la recuperación de datos por parte del MKDE. Si un fallo del sistema provocaba corrupción de datos, al reiniciar el MKDE, este detectaba todos los archivos que habían sufrido una transacción del sistema fallida e intentaba recuperarlos. Sin embargo, dado que las transacciones de usuario podrían haberse perdido al revertirse la última transacción del sistema, se podía configurar una opción que obligaba al MKDE a completar las transacciones del sistema que contenían transacciones de usuario cuando el motor recibía una solicitud de "Fin de operación".

Notas

  1. Esto no es del todo correcto. Una base de datos navegacional es aquella en la que el acceso lógico a los datos se realiza a través de la interfaz de nivel de aplicación o API. Es navegacional en el sentido de que el código de la aplicación recorre las relaciones lógicas "navegando" por la base de datos. Las técnicas físicas utilizadas para lograr esto, como ISAM, punteros incrustados, etc., son prácticamente irrelevantes para esta discusión. Por el contrario, una base de datos relacional no proporciona a la capa de aplicación ninguna forma de "navegar" por la estructura lógica de la base de datos, sino que ofrece una interfaz de nivel de conjunto para seleccionar, agregar y combinar datos. Las bases de datos relacionales también pueden utilizar diversas técnicas físicas para acceder a los datos, incluidas las mencionadas anteriormente, pero el aspecto importante de ser "relacional" es que el acceso a los datos se realiza de forma relacional, es decir, mediante un modelo de consulta de conjuntos en lugar de un modelo navegacional.

Referencias

  • Dahunsi, Ayodele (1 de enero de 1998). Entendiendo Btrieve y SQL4 escalable . Revista Clarion .
  • Novell (sin fecha). Componentes de NetWare Btrieve . Consultado el 12 de diciembre de 2004.
  • Pervasive (1997). Manual de instalación y funcionamiento de Btrieve para DOS . Manual del producto.
  • Pervasive (1998). Estado 96 de una aplicación NetWare NLM . Artículo de la base de conocimientos de Pervasive (ID del artículo: BTRTT-97070801). Consultado el 12 de diciembre de 2004.
  • Pervasive (noviembre de 1996). Instalación y funcionamiento de Btrieve para Windows NT/Windows 95. Manual del producto.
  • C Fiedler (julio de 2010). Acceso a archivos de base de datos btrieve (detección de PageSize) .
  • dbcoretech (julio de 2010). Utilidad de recuperación btrieve (código abierto) .
  1. Kyle, Jim (1995). Btrieve complete: una guía para desarrolladores y administradores de sistemas . Reading, Massachusetts: Addison-Wesley Publishing Company. ISBN 0-201-48326-2.