Un motor de base de datos (o motor de almacenamiento ) es el componente de software subyacente que utiliza un sistema de gestión de bases de datos (DBMS) para crear, leer, actualizar y eliminar (CRUD) datos de una base de datos . La mayoría de los sistemas de gestión de bases de datos incluyen su propia interfaz de programación de aplicaciones (API) que permite al usuario interactuar con su motor subyacente sin pasar por la interfaz de usuario del DBMS.
El término "motor de base de datos" se utiliza con frecuencia de forma intercambiable con " servidor de base de datos " o "sistema de gestión de base de datos". Una "instancia de base de datos" se refiere a los procesos y estructuras de memoria del motor de base de datos en ejecución.
Muchos de los sistemas de gestión de bases de datos modernos admiten varios motores de almacenamiento dentro de la misma base de datos. Por ejemplo, MySQL admite InnoDB y MyISAM .
Algunos motores de almacenamiento son transaccionales .
Los tipos de motores adicionales incluyen:
La información de una base de datos se almacena en forma de bits, dispuestos en estructuras de datos en el hardware de almacenamiento. Estas estructuras de datos están diseñadas para lecturas y escrituras eficientes hacia y desde el hardware de almacenamiento. Normalmente, el hardware de almacenamiento en sí está diseñado para cumplir con los requisitos de varios sistemas, incluidas las bases de datos, que utilizan ampliamente el almacenamiento. Un DBMS en funcionamiento siempre utiliza varios tipos de almacenamiento simultáneamente. Estos diferentes tipos de almacenamiento, como la memoria flash y el almacenamiento en disco externo , requieren cada uno de ellos diferentes métodos de disposición de datos.
En principio, el almacenamiento de bases de datos puede considerarse como un espacio de direcciones lineal en el que cada bit de datos tiene una dirección única. En la práctica, solo un porcentaje muy pequeño de direcciones se conservan como puntos de referencia iniciales, que también requieren almacenamiento. En cambio, se accede a la mayoría de los datos de forma indirecta mediante cálculos de desplazamiento (distancia en bits desde los puntos de referencia) y estructuras de datos que definen rutas de acceso (mediante punteros) a todos los datos necesarios de una manera eficaz y optimizada para las operaciones de acceso a los datos necesarias.
Una base de datos, mientras está en funcionamiento, reside simultáneamente en varios tipos de almacenamiento, formando una jerarquía de almacenamiento . Dentro de una computadora contemporánea que aloja un DBMS, la mayor parte de la parte de "base de datos" reside, parcialmente replicada, en un almacenamiento volátil . Los datos que se procesan y manipulan activamente residen dentro del procesador , posiblemente en las memorias caché del procesador . Estos datos se leen y escriben en la memoria, generalmente a través de un bus de computadora , que suele ser un componente de almacenamiento volátil. La memoria de la computadora comunica datos hacia y desde el almacenamiento externo, generalmente a través de interfaces o redes de almacenamiento estándar (por ejemplo, canal de fibra , iSCSI ).
Una matriz de almacenamiento , una unidad de almacenamiento externo común, normalmente tiene su propia jerarquía de almacenamiento. Una memoria caché rápida, que normalmente consta de memoria DRAM volátil y rápida , está conectada (a través de interfaces estándar) a las unidades. Estas unidades pueden tener diferentes velocidades, como las unidades flash y las unidades de disco magnético no volátil . La velocidad y el precio suelen estar correlacionados. Las unidades pueden estar conectadas a cintas magnéticas , en las que pueden residir las partes menos activas de una base de datos grande. Aquí también pueden estar ubicadas las copias de seguridad .
Una estructura de datos es una construcción abstracta que integra datos de una manera bien definida. Una estructura de datos eficiente permite manipular los datos de manera eficiente. La manipulación de datos puede incluir la inserción, eliminación, actualización y recuperación de datos en varios modos. Un determinado tipo de estructura de datos puede ser muy eficaz en determinadas operaciones y muy ineficaz en otras. Un tipo de estructura de datos se selecciona durante el desarrollo del DBMS para satisfacer mejor las operaciones necesarias para los tipos de datos que contiene. El tipo de estructura de datos seleccionado para una determinada tarea normalmente también tiene en cuenta el tipo de almacenamiento en el que reside (por ejemplo, velocidad de acceso, tamaño mínimo del fragmento de almacenamiento al que se accede, etc.). En algunos DBMS, los administradores de bases de datos tienen la flexibilidad de seleccionar entre las opciones de estructuras de datos para contener los datos del usuario por razones de rendimiento. A veces, las estructuras de datos tienen parámetros seleccionables para ajustar el rendimiento de la base de datos.
Las bases de datos pueden almacenar datos en muchos tipos de estructuras de datos. [1] Algunos ejemplos comunes son los siguientes:
A diferencia de la orientación por filas convencional, las bases de datos relacionales también pueden estar orientadas a columnas o ser correlacionales en la forma en que almacenan datos en cualquier estructura particular.
En general, se obtiene una mejora sustancial del rendimiento si se almacenan en un lugar cercano los distintos tipos de objetos de base de datos que se utilizan habitualmente juntos, "agrupados". Esto suele permitir recuperar los objetos relacionados necesarios del almacenamiento en un número mínimo de operaciones de entrada (cada una de ellas, a veces, consume mucho tiempo). Incluso en el caso de las bases de datos en memoria, la agrupación en clústeres ofrece una ventaja de rendimiento debido al uso común de grandes cachés para operaciones de entrada y salida en memoria, con un comportamiento resultante similar.
Por ejemplo, puede resultar beneficioso agrupar un registro de un "artículo" en stock con todos sus respectivos registros de "pedido". La decisión de agrupar o no determinados objetos depende de las estadísticas de utilización de los objetos, los tamaños de los objetos, los tamaños de las memorias caché, los tipos de almacenamiento, etc.
La indexación es una técnica que utilizan algunos motores de almacenamiento para mejorar el rendimiento de las bases de datos. Los distintos tipos de índices comparten la propiedad común de que reducen la necesidad de examinar cada entrada al ejecutar una consulta. En bases de datos grandes, esto puede reducir el tiempo y el costo de la consulta en órdenes de magnitud. La forma más simple de índice es una lista ordenada de valores que se pueden buscar mediante una búsqueda binaria con una referencia adyacente a la ubicación de la entrada, análoga al índice en la parte posterior de un libro. Los mismos datos pueden tener múltiples índices (una base de datos de empleados podría indexarse por apellido y fecha de contratación).
Los índices afectan el rendimiento, pero no los resultados. Los diseñadores de bases de datos pueden agregar o eliminar índices sin cambiar la lógica de la aplicación, lo que reduce los costos de mantenimiento a medida que la base de datos crece y su uso evoluciona. Los índices pueden acelerar el acceso a los datos, pero consumen espacio en la base de datos y deben actualizarse cada vez que se modifican los datos. Por lo tanto, los índices pueden acelerar el acceso a los datos, pero ralentizar su mantenimiento. Estas dos propiedades determinan si vale la pena invertir en un índice determinado.