¿Qué es la organización física? ¿Qué es el diseño de archivos? ¿Qué es un archivo físico? ¿Cuáles son los sistemas de archivo físico?

Diseño físico y organizaciones de archivo

Las decisiones que se toman en el diseño físico de la base de datos impactan en el almacenamiento en disco y en el sistema operativo. Tienen que ver con el almacenamiento y configuración de los parámetros del SGBD:

Hardware y jerarquía de almacenamiento

El medio de almacenamiento utilizado para los datos con los que se opera es la memoria principal. Se define por su uso: es la memoria con la que trabaja casi directamente el procesador. Es volátil: su contenido suele perderse en caso de fallo del suministro eléctrico o de caída del sistema. La más común es la RAM (memoria de acceso aleatorio), la cual se caracteriza por poder acceder a cualquier posición de memoria a la misma velocidad sin tener que recorrer dichas posiciones secuencialmente. Como el procesador es muy rápido, la memoria con la que debe trabajar tiene que ser lo más rápida posible para no generar cuellos de botella. El procesador pide datos, lee y escribe todo el tiempo, necesita estar el menor tiempo posible esperando a que ese dato llegue. Por eso es más importante la velocidad que la capacidad de la memoria principal. La RAM le permite al procesador tener acceso más rápido a una mayor cantidad de datos. Si se llena, el procesador envía los datos que no usa al almacenamiento auxiliar y deja en la RAM aquellos que va a utilizar en ese momento.

La caché es una pequeña memoria ubicada entre la RAM y el procesador con la que éste trabaja directamente. Le indica qué archivos deben ser traídos desde el almacenamiento auxiliar hacia la memoria principal para trabajar con ellos.

Como el procesador es volátil y trabaja con las memorias RAM y caché, no es un costo que ambas memorias sean volátiles también y que sus datos se pierdan cuando no reciba corriente eléctrica (después de todo, el procesador no podrá usarlos. El problema entonces pasa por definir dónde almacenar los datos para que no se borran permanentemente. El almacenamiento secundario cumple esa función: almacena los archivos hasta que sean requeridos por el procesador y sean enviados a la memoria principal. Es un almacenamiento no volátil: para mantener los datos guardados no depende de estar conectado a una fuente de alimentación.

El disco rígido es esencial para los sistemas de datos, ya que es allí donde se almacenarán los datos ingresados a la base. De hecho, generalmente se guarda en ellos toda la base de datos. Para acceder a ellos es necesario trasladarlos desde el disco hacia la memoria principal. Se compone de una serie de discos, con sus cabezales, uno arriba del otro, que giran sobre un eje. El cabezal se mueve hacia delante y hacia atrás (más lejos y más cerca del centro) para recorrer el disco y de leer la información en ambas caras del mismo. Se ubica en la pista correcta y espera a que la rotación del disco lo lleve a la posición de memoria que necesita. Cuanto más rápido giren los discos, más velozmente se accede a esa posición. Una vez ubicado allí puede leer o escribir la información de esa ubicación. Los tiempos de acceso dependen de la localización de los datos y la latencia, es decir, qué tan distanciado esté el dato del eje rotacional del disco y de la posición del cabezal.

Acceso físico al dispositivo

Una página o bloque de memoria es la unidad de lectura y escritura. Es el conjunto de bytes transferidos del disco a la RAM en un solo acceso (generalmente 4 kB). Como los archivos suelen ser mayores a esta unidad, se dividen en varios bloques. Es más fácil de leer si se guardan en forma secuencial ya que serán leídos también de forma secuencial, dando lugar a las extensiones.

Una extensión es un conjunto de páginas contiguas físicamente que el Adm. de disco asigna y libera. Se persigue que páginas contiguas lógicamente lo estén también físicamente, reduciendo al mínimo el acceso.

Acceso a los datos

El SGBD posee una memoria intermedia (buffer de la BD:RAM almacenamiento primario del servidor) entre éste y el almacenamiento secundario. Es un espacio reservado en la memoria principal para el sistema de gestión de bases de datos. Éste recibe peticiones de escritura, lectura, actualización y borrado de registros. Cada uno de ellos se van a convertir en archivos y, por ende, en bloques que estarán en esa memoria intermedia (sean actuales o bloques ya trabajados).

Cuando se llena el buffer se deben borrar del mismo algunos bloques para que su lugar sea ocupado por otro que se esté requiriendo para una determinada operación en ese momento. En función de la prioridad que se haya establecido para determinar cuáles bloques borrar, si éstos no fueron modificados, pueden eliminarse de la memoria intermedia sin problemas porque, en caso de necesitarlo, se lo puede traer otra vez desde el almacenamiento secundario.

En cambio, si los bloques a eliminar de memoria principal sufrieron modificaciones, primero se escriben las mismas en el almacenamiento secundario para poder recuperar el valor actualizado, de ser necesario. Una vez hecho eso, se trae a memoria intermedia el bloque que estaba esperando. Esto también ocurre cuando el bloque a eliminar no existe en memoria secundaria.

Considerando que el SGBD hace uso de la memoria intermedia para mejorar su desempeño de acceso a memoria secundaria, es factible que, al actualizar el valor de un atributo de un registro de una tabla de una base de datos, esa modificación esté en memoria principal y no en memoria secundaria (aunque sea temporalmente).

Arreglo redundante de discos independientes (RAID)

Un arreglo redundante de discos independientes (RAID) es un arreglo de dos o más discos rígidos que se presentan ante el sistema operativo como uno solo. Cada disco trabaja de manera independiente y es el controlador de RAID el que administra su funcionamiento.

Un RAID persigue dos objetivos muy distintos, que a veces se logran complementar según el tipo de RAID:

Al tratarse de discos que trabajan en paralelo, es recomendable que todos posean la misma velocidad de lectura y escritura e igual capacidad de almacenamiento. En caso de que sean diferentes, todo el arreglo funcionará a la velocidad del disco más lento y refleja la capacidad de aquel disco que posea menor cantidad de almacenamiento.

Niveles de RAID

Divide cada bloque en n partes (según la cantidad de discos), distribuyendo cada una de ellas en un disco. Cuando se necesite leerlos, se recupera cada parte guardada en los discos. Si se rompe un disco, se pierden todos los datos que estaban almacenados en el arreglo, ya que los bloques no pueden ser reconstruidos (cada parte es incompleta).

  • RAID 1:
  • Cada bloque se escribe en los n discos de forma paralela. Al estar multiplicados los bloques, si se rompe un disco no se pierde la información almacenada en el arreglo y el sistema sigue funcionando.

  • RAID 10 (o RAID 0+1):
  • se trata de 2 o más arreglos RAID 1 en donde cada bloque se divide en n2 partes y cada una de ellas se escribe en 2 discos, como en el RAID 0. La situación si se rompe un disco dependerá de cuál disco se rompa. Se pierden todos los datos si se rompe una cantidad de discos tal que resulte imposible reconstruir los bloques.

  • RAID 5:
  • divide el bloque de datos en p partes, distribuyendo cada una en n-1 discos, almacenando en el disco información de paridad. La misma consiste en una función que, aplicada sobre una de las p partes del bloque, permite reconstruir la parte que falta. Este tipo de paridad se denomina paridad por bloque distribuida ya que puede guardar la paridad en diferentes discos del arreglo, a veces en uno y otras veces en otro distinto, en bloques reservados (y no en un disco reservado). Un bloque de paridad no puede guardar la paridad de los bloques del mismo disco, ya que un fallo del disco supondría la pérdida de los datos y de la paridad y, por tanto, no sería recuperable. Existen niveles inferiores de RAID que dividen por bit (paridad por bit en RAID 3) o por bloque (paridad por bloque en RAID 4).

    Nivel de RAID

    Cantidad de discos

    Velocidad de E/S

    Objetivo

    Cantidad mínima de discos

    Tolerancia de ruptura

    Capacidad de almacenamiento

    Sin RAID

    1

    m segundos

    Sólo guardar datos

    1

    0 discos

    x GB

    RAID 0

    n

    mn segundos

    Performance

    2

    0 discos

    n*x GB

    RAID 1

    n

    m segundos para escritura; sin embargo, se puede leer la mitad de un bloque de cada disco, tardando mn segundos en lectura

    Tolerancia a fallos y mayor performance en lectura.

    2

    n-1 discos

    x GB

    RAID 10

    n

    mn segundos

    Tolerancia a fallos y performance de lectura y escritura

    4

    Variable

    n2*x GB

    RAID 5

    n

    mn segundos + cálculo de paridad y distribución

    Tolerancia a fallos; mínima mejora de performance

    3

    1 disco

    (n-1)*x GB

    también conocido como organización de códigos de corrección de errores tipo memoria (memory-style-error-correcting-code organization, ECC), emplea bits de paridad. Hace tiempo que los sistemas de memoria utilizan los bits de paridad para la detección y corrección de errores. Cada byte del sistema de memoria puede tener asociado un bit de paridad que registra si el número de bits del byte que valen uno es par (paridad = 0) o impar (paridad = 1).

  • El nivel 3 de RAID
  • organización de paridad con bits entrelazados, mejora respecto al nivel 2 al aprovechar que los controladores de disco, a diferencia de los sistemas de memoria, pueden detectar si los sectores se han leído correctamente, por lo que se puede utilizar un solo bit de paridad para la corrección y para la detección de los errores. La idea es la siguiente: si uno de los sectores se deteriora, se sabe exactamente el sector que es y, para cada uno de sus bits, se puede determinar si es un uno o un cero calculando la paridad de los bits correspondientes de los sectores de los demás discos. Si la paridad de los bits restantes es igual que la paridad guardada, el bit perdido es un cero; en caso contrario, es un uno.

  • El nivel 4 de RAID,
  • organización de paridad con bloques entrelazados, emplea la distribución del nivel de bloques, como RAID 0, y, además, guarda un bloque de paridad en un disco independiente para los bloques correspondientes de los otros N discos. Este esquema se muestra gráficamente en la Figura 11.3e. Si falla uno de los discos, se puede utilizar el bloque de paridad con los bloques correspondientes de los demás discos para restaurar los bloques del disco averiado.

    Almacenamiento de registros

    En un bloque puede almacenarse filas o columnas de una tabla de la base de datos. Esto permite distinguir:

    Los valores de las filas se almacenan físicamente en forma contigua dentro del archivo. Este tipo es más eficiente para, por ej., leer todos los datos de un registro ya que para ello sólo debería leer 1 bloque.

  • Bases de datos orientadas a columnas:
  • Los valores de las columnas se almacenan físicamente en forma contigua dentro del archivo, en donde uno de los bloques contendrá los atributos de la tabla. Este tipo es más eficiente para, por ej., obtener promedios o cantidades de un atributo de varios registros, ya que para eso también debería leer 1 bloque. Por este motivo son más analíticas. Permite comprimir los datos que se almacenan porque no se guardan valores repetidos: dos registros para el mismo valor del mismo atributo apuntan a la misma PK. Además, no guarda los valores vacíos o nulos. Cuanto más repetidos estén los datos, mayor será la posibilidad de compresión.

  • Los valores de las columnas se almacenan físicamente en forma contigua dentro del archivo.
  • Los datos se guardan comprimidos, almacenando valores únicos (no se repiten valores).
  • El concepto de “Familia de columnas” o grupos de columnas.
  • Son eficientes para consultas en entornos OLAP.
  • Las bases de datos relacionales poseen mayoritariamente almacenamiento

    orientado a filas. Para separar los datos, se utilizan caracteres separadores que:

    Cada bloque posee un factor de bloqueo, que es la cantidad de registros que entran en un bloque para una tabla determinada. Los espacios de longitud fija no utilizados se almacenan en blanco.

    Almacenamiento orientado a columnas – Bases de datos columnares

    Beneficios:

    Almacenamiento orientado a filas: Registros y Archivos

    1. Registro de longitud fija con 6 campos y 71 bytes.
    2. un registro con dos campos de longitud variable y tres de longitud fija.
    3. un registro de longitud variable con tres campos variables.

    Asignación de archivos a bloques

    Existen diversas maneras de ordenar en el disco los distintos bloques que componen un archivo:

    Organización de registros ordenados

    Guardar los registros ordenados utilizando como criterio alguno de los atributos permite reducir la cantidad de bloques que se leen para acceder a los datos que se están buscando. Existen distintas alternativas de guardar los registros ordenados en un archivo para optimizar el funcionamiento:

    Organización de registros desordenados

    Existen dos formas de organizar registros desordenados:

    Organización de archivos en el montículo.

    En esta organización se puede colocar cualquier registro en cualquier parte del archivo en que haya espacio suficiente. No hay ninguna ordenación de los registros. Generalmente sólo hay un archivo por cada relación.

    Se crea un índice con id=0, que está desordenado. Tabla sin índice clúster (o agrupado)

    Páginas IAM:

    Las páginas IAM son páginas que administran los extents que una tabla o índice utilizan. Las páginas IAM contienen la localidad de las 8 páginas iniciales y un bitmap de extents indicando que extents pertenecen al objeto. Una sola página IAM puede administrar hasta 512,000 páginas de datos. Las páginas IAM siempre están alojadas en extents mixtos, y pueden estar en cualquier archivo o filegroup. SQL Server trata de mantener a todas las páginas IAM agrupadas para mejorar el performance.

    Organización directa

    Índices

    Un índice es un lugar donde se puede buscar por una clave de búsqueda, encontrar (si existe) lo buscado y tiene un puntero que indica en dónde se encuentra el dato buscado. La clave de búsqueda consiste en uno o varios atributos. Si los registros están ordenados, existe una clave de orden, que es el atributo según el cual se ordenan los registros.

    El índice se guarda en otro bloque de memoria. La idea de utilizarlo es, cuando se busca un dato, poder traerlo a la memoria principal primero para recorrerlo y determinar en qué bloques buscar los datos que se necesiten, y también determinar si éstos existen antes de leer los bloques de datos.

    Clasificación de índices