stringtranslate.com

Motor de base de datos de Access

Access Database Engine ( también conocido como Office Access Connectivity Engine o ACE y anteriormente como Microsoft Jet Database Engine , Microsoft JET Engine o simplemente Jet ) es un motor de base de datos sobre el que se han construido varios productos de Microsoft . La primera versión de Jet se desarrolló en 1992 y constaba de tres módulos que podían utilizarse para manipular una base de datos.

JET son las siglas de Joint Engine Technology (tecnología de motor conjunto ). Microsoft Access y Visual Basic utilizan o han utilizado Jet como motor de base de datos subyacente. Sin embargo, ha sido reemplazado para uso general, primero por Microsoft Desktop Engine (MSDE) y luego por SQL Server Express . Para necesidades de bases de datos más grandes, las bases de datos Jet se pueden actualizar (o, en la jerga de Microsoft, "redimensionar") al producto de base de datos estrella de Microsoft, SQL Server.

Arquitectura

Jet, al ser parte de un sistema de gestión de bases de datos relacionales (RDBMS), permite la manipulación de bases de datos relacionales . [1] Ofrece una única interfaz que otro software puede utilizar para acceder a las bases de datos de Microsoft y proporciona soporte para seguridad, integridad referencial , procesamiento de transacciones , indexación , bloqueo de registros y páginas y replicación de datos. En versiones posteriores, el motor se ha ampliado para ejecutar consultas SQL , almacenar datos de caracteres en formato Unicode , crear vistas de bases de datos y permitir la replicación bidireccional con Microsoft SQL Server.

DLL de Jet

Jet consta de tres módulos: uno es el controlador ISAM nativo de Jet , una biblioteca de vínculos dinámicos (DLL) que puede manipular directamente los archivos de base de datos de Microsoft Access (MDB) utilizando una API de sistema de archivos (de acceso aleatorio). Otro de los módulos contiene los controladores ISAM , DLL que permiten el acceso a una variedad de bases de datos ISAM de método de acceso secuencial indexado , entre ellas xBase , Paradox , Btrieve y FoxPro , dependiendo de la versión de Jet. El módulo final es la DLL de objetos de acceso a datos (DAO). [2] DAO proporciona una API que permite a los programadores acceder a las bases de datos JET utilizando cualquier lenguaje de programación.

Cierre

Jet permite que varios usuarios accedan a la base de datos simultáneamente. Para evitar que los datos se corrompan o invaliden cuando varios usuarios intentan editar el mismo registro o página de la base de datos, Jet emplea una política de bloqueo. Cualquier usuario puede modificar únicamente aquellos registros de la base de datos (es decir, elementos de la base de datos) a los que haya aplicado un bloqueo , lo que otorga acceso exclusivo al registro hasta que se libere el bloqueo. En las versiones de Jet anteriores a la versión 4, se utiliza un modelo de bloqueo de páginas y, en Jet 4, se emplea un modelo de bloqueo de registros. Las bases de datos de Microsoft están organizadas en "páginas" de datos, que son estructuras de datos de longitud fija (2  kB antes de Jet 4, 4 kB en Jet 4). Los datos se almacenan en "registros" de longitud variable que pueden ocupar menos o más de una página. El modelo de bloqueo de páginas funciona bloqueando las páginas, en lugar de los registros individuales, lo que, aunque consume menos recursos, también significa que cuando un usuario bloquea un registro, todos los demás registros de la misma página se bloquean colateralmente. Como resultado, ningún otro usuario puede acceder a los registros bloqueados de forma colateral, aunque ningún usuario esté accediendo a ellos y no haya necesidad de bloquearlos. En Jet 4, el modelo de bloqueo de registros elimina los bloqueos colaterales, de modo que todos los registros que no están en uso están disponibles.

Existen dos mecanismos que Microsoft utiliza para bloquear : el bloqueo pesimista y el bloqueo optimista . Con el bloqueo pesimista, el registro o la página se bloquean inmediatamente cuando se solicita el bloqueo, mientras que con el bloqueo optimista, el bloqueo se retrasa hasta que se guarda el registro editado. Es menos probable que se produzcan conflictos con el bloqueo optimista, ya que el registro se bloquea solo durante un breve período de tiempo. Sin embargo, con el bloqueo optimista no se puede estar seguro de que la actualización se realizará correctamente porque otro usuario podría bloquear el registro primero. Con el bloqueo pesimista, se garantiza que la actualización se realizará correctamente una vez que se obtiene el bloqueo. Otros usuarios deben esperar hasta que se libere el bloqueo para realizar sus cambios. Los conflictos de bloqueo, que requieren que el usuario espere o hacen que la solicitud falle (normalmente después de un tiempo de espera), son más comunes con el bloqueo pesimista.

Procesamiento de transacciones

Jet admite el procesamiento de transacciones para sistemas de bases de datos que tienen esta capacidad ( los sistemas ODBC tienen procesamiento de transacciones de un nivel, mientras que varios sistemas ISAM como Paradox no admiten el procesamiento de transacciones). Una transacción es una serie de operaciones realizadas en una base de datos que deben realizarse juntas; esto se conoce como atomicidad y es uno de los conceptos ACID (atomicidad, consistencia, aislamiento y durabilidad), considerados las características clave del procesamiento de transacciones de un sistema de administración de bases de datos . Para que el procesamiento de transacciones funcione (hasta Jet 3.0), el programador necesitaba comenzar la transacción manualmente, realizar las operaciones necesarias para realizarla y luego confirmar (guardar) la transacción. Hasta que se confirma la transacción, los cambios se realizan solo en la memoria y no se escriben realmente en el disco. [1] Las transacciones tienen varias ventajas sobre las actualizaciones de bases de datos independientes. Una de las principales ventajas es que las transacciones se pueden abandonar si ocurre un problema durante la transacción. Esto se llama revertir la transacción, o simplemente revertir, y restaura el estado de los registros de la base de datos exactamente al estado antes de que comenzara la transacción. Las transacciones también permiten que el estado de la base de datos se mantenga constante si ocurre una falla del sistema en medio de una secuencia de actualizaciones que deben ser atómicas. No existe la posibilidad de que solo algunas de las actualizaciones terminen escribiéndose en la base de datos; o todas se ejecutarán correctamente o los cambios se descartarán cuando se reinicie el sistema de base de datos. Con la política en memoria de ODBC, las transacciones también permiten que muchas actualizaciones de un registro ocurran completamente dentro de la memoria, con solo una costosa escritura en disco al final.

En Jet 3.0 se admitían transacciones implícitas. Se trata de transacciones que se inician automáticamente después de que se confirma la última transacción en la base de datos. En Jet, las transacciones implícitas se producían cuando se emitía una sentencia DML de SQL . Sin embargo, se descubrió que esto tenía un impacto negativo en el rendimiento en Windows de 32 bits (Windows 95, Windows 98), por lo que en Jet 3.5 Microsoft eliminó las transacciones implícitas cuando se realizaban sentencias DML de SQL.

Integridad de los datos

Jet hace cumplir la integridad de la entidad y la integridad referencial . Jet evitará de forma predeterminada cualquier cambio en un registro que rompa la integridad referencial, pero las bases de datos Jet pueden usar restricciones de propagación (actualizaciones en cascada y eliminaciones en cascada) para mantener la integridad referencial.

Jet también admite "reglas de negocio" (también conocidas como "restricciones"), o reglas que se aplican a cualquier columna para imponer qué datos se pueden colocar en la tabla o columna . Por ejemplo, se puede aplicar una regla que no permita ingresar una fecha en una columna date_logged que sea anterior a la fecha y hora actuales, o se puede aplicar una regla que obligue a las personas a ingresar un valor positivo en un campo solo numérico.

Seguridad

El acceso a las bases de datos Jet se realiza a nivel de usuario. La información del usuario se guarda en una base de datos del sistema independiente y el acceso se controla en cada objeto del sistema (por ejemplo, por tabla o por consulta). En Jet 4, Microsoft implementó una funcionalidad que permite a los administradores de bases de datos configurar la seguridad mediante los comandos SQL CREATE, ADD, ALTER, DROP USER y DROP GROUP. Estos comandos son un subconjunto del estándar ANSI SQL 92 y también se aplican a los comandos GRANT/REVOKE. [3] Cuando se lanzó Jet 2, la seguridad también se podía configurar mediante programación a través de DAO .

Consultas

Las consultas son los mecanismos que Jet utiliza para recuperar datos de la base de datos. Se pueden definir en Microsoft QBE (Query By Example), a través de la ventana SQL de Microsoft Access o mediante el lenguaje Data Access Objects (DAO) de Access Basic. A continuación, se convierten en una sentencia SQL SELECT . A continuación, se compila la consulta, lo que implica analizar la consulta (involucra la comprobación de la sintaxis y la determinación de las columnas que se van a consultar en la tabla de la base de datos) y, a continuación, convertirla en un formato de objeto de consulta interno de Jet, que luego se convierte en tokens y se organiza en una estructura similar a un árbol. A partir de Jet 3.0, se optimizan mediante la tecnología de optimización de consultas Microsoft Rushmore. A continuación, se ejecuta la consulta y los resultados se devuelven a la aplicación o al usuario que solicitó los datos.

Jet pasa los datos recuperados para la consulta en un conjunto dinámico . Este es un conjunto de datos que se vincula dinámicamente a la base de datos. En lugar de tener el resultado de la consulta almacenado en una tabla temporal, donde el usuario no puede actualizar los datos directamente, el conjunto dinámico permite al usuario ver y actualizar los datos contenidos en el conjunto dinámico. Por lo tanto, si un profesor universitario consulta a todos los estudiantes que recibieron una distinción en su tarea y encuentra un error en el registro de ese estudiante, el usuario solo necesitaría actualizar los datos en el conjunto dinámico, que actualizaría automáticamente el registro de la base de datos del estudiante sin la necesidad de que el usuario envíe una consulta de actualización específica después de almacenar los resultados de la consulta en una tabla temporal.

Historia

Jet comenzó originalmente en 1992 como una tecnología de acceso a datos subyacente que surgió de un proyecto de desarrollo de productos de base de datos interna de Microsoft, cuyo nombre en código era Cirrus. Cirrus se desarrolló a partir de una versión preliminar del código de Visual Basic y se utilizó como motor de base de datos de Microsoft Access . Tony Goodhew, que trabajaba para Microsoft en ese momento, dice

"Sería razonablemente preciso decir que hasta ese momento Jet era más el nombre del equipo que se había asignado para trabajar en los módulos del motor de bases de datos de Access que un equipo de componentes. Para VB [Visual Basic] 3.0, básicamente tuvieron que extraerlo de Access e incorporarlo a VB. Es por eso que han tenido todos esos problemas de Jet/ODBC en VB 3.0".

Jet se volvió más componentizado cuando se lanzó Access 2.0 porque los desarrolladores de ODBC de Access usaron partes del código Jet para producir el controlador ODBC. Se proporcionó una actualización que permitió a los usuarios de Visual Basic 3.0 usar el Jet actualizado que se publicó en Access 2.0. [6]

Jet 2.0 se lanzó como varias bibliotecas vinculadas dinámicamente (DLL) que se utilizaban en el software de aplicación , como la base de datos Access de Microsoft. Las DLL de Windows son "bibliotecas" de código común que pueden ser utilizadas por más de una aplicación: al mantener el código que más de una aplicación usa bajo una biblioteca común que cada una de estas aplicaciones puede usar de forma independiente, se reduce el mantenimiento del código y aumenta la funcionalidad de las aplicaciones, con menos esfuerzo de desarrollo. Jet 2.0 comprendía tres DLL: la DLL de Jet, la DLL de objetos de acceso a datos (DAO) y varias DLL ISAM externas. La DLL de Jet determinaba a qué tipo de base de datos estaba accediendo y cómo realizar lo que se le solicitaba. Si la fuente de datos era un archivo MDB (un formato de Microsoft Access), entonces leía y escribía directamente los datos en el archivo. Si la fuente de datos era externa, entonces invocaba el controlador ODBC correcto para realizar su solicitud. La DLL DAO era un componente que los programadores podían usar para interactuar con el motor Jet, y era utilizada principalmente por programadores de Visual Basic y Access Basic. Las DLL ISAM eran un conjunto de módulos que permitían a Jet acceder a tres bases de datos basadas en ISAM: xBase, Paradox y Btrieve. [2] Jet 2.0 fue reemplazado por Jet 2.1, que usaba la misma estructura de base de datos pero diferentes estrategias de bloqueo, lo que lo hacía incompatible con Jet 2.0.

Jet 3.0 incluyó muchas mejoras, incluyendo una nueva estructura de índice que redujo el tamaño de almacenamiento y el tiempo que se tardaba en crear índices que estaban altamente duplicados, la eliminación de bloqueos de lectura en páginas de índice, un nuevo mecanismo para la reutilización de páginas, un nuevo método de compactación para el cual la compactación de la base de datos resultó en que los índices se almacenaran en un formato de índice agrupado, un nuevo mecanismo de asignación de páginas para mejorar las capacidades de lectura anticipada de Jet, operaciones de eliminación mejoradas que aceleraron el procesamiento, subprocesos múltiples (se usaban tres subprocesos para realizar lectura anticipada, escritura retrasada y mantenimiento de caché), transacciones implícitas (los usuarios no tenían que indicarle al motor que se iniciara manualmente y confirmara las transacciones en la base de datos), un nuevo motor de ordenación, valores largos (como notas o tipos de datos binarios) se almacenaban en tablas separadas y almacenamiento en búfer dinámico (por el cual el caché de Jet se asignaba dinámicamente al inicio y no tenía límite y que cambiaba de una política de reemplazo de búfer de primero en entrar, primero en salir (FIFO) a una política de reemplazo de búfer menos utilizado recientemente (LRU)). [7] Jet 3.0 también permitía la replicación de bases de datos. Jet 3.0 fue reemplazado por Jet 3.5, que utiliza la misma estructura de base de datos, pero diferentes estrategias de bloqueo, lo que lo hace incompatible con Jet 3.0.

Jet 4.0 incorporó numerosas características y mejoras adicionales. [3]

Las versiones de Microsoft Access desde Access 2000 hasta Access 2010 incluían un "Asistente para actualizar" que podía " actualizar " una base de datos Jet a "una base de datos equivalente en SQL Server con la misma estructura de tablas, datos y muchos otros atributos de la base de datos original". Esta herramienta no se encargaba de los informes, las consultas, las macros y la seguridad, lo que significa que podrían haber sido necesarias algunas modificaciones manuales si la aplicación dependía en gran medida de estas funciones de Jet. [8]

Una versión independiente del motor de base de datos Jet 4 era un componente de Microsoft Data Access Components (MDAC) y se incluyó en todas las versiones de Windows a partir de Windows 2000. [9] El motor de base de datos Jet era solo de 32 bits y no se ejecutaba de forma nativa en versiones de 64 bits de Windows. Esto significaba que las aplicaciones nativas de 64 bits (como las versiones de 64 bits de SQL Server) no podían acceder a los datos almacenados en archivos MDB a través de ODBC, OLE DB o cualquier otro medio, excepto a través de un software intermedio de 32 bits (que se ejecutaba en WoW64 ) que actuaba como un proxy para el cliente de 64 bits. [10]

A partir de la versión 2007, Access incluye una versión específica de Office de Jet, inicialmente llamada Office Access Connectivity Engine (ACE), pero que ahora se llama Access Database Engine (sin embargo, los consultores de MS-Access y los desarrolladores de VBA que se especializan en MS-Access son más propensos a referirse a él como "ACE Database Engine"). [ cita requerida ] Este motor era compatible con versiones anteriores del motor Jet, por lo que podía leer y escribir archivos (.mdb) de versiones anteriores de Access. Introdujo un nuevo formato de archivo predeterminado, (.accdb), que trajo varias mejoras a Access, incluidos tipos de datos complejos como campos de múltiples valores, el tipo de datos adjuntos y el seguimiento del historial en campos de notas. También trajo cambios de seguridad y mejoras de cifrado y permitió la integración con Microsoft Windows SharePoint Services 3.0 y Microsoft Office Outlook 2007. [11] [12] [13] Se puede obtener por separado. [14]

El motor de Microsoft Access 2010 dejó de ofrecer compatibilidad con archivos de Access 1.0, Access 2.0, Lotus 1-2-3 y Paradox. [15] Se introdujo una versión de 64 bits de Access 2010 y su controlador/proveedor ACE, que en esencia proporciona una versión de 64 bits de Jet. El controlador no forma parte del sistema operativo Windows, pero está disponible como redistribuible. [16] [17]

El motor de Microsoft Access 2013 dejó de brindar soporte para archivos de Access 95, Access 97 y xBase, y también dejó de brindar soporte para replicación. [18]

La versión 1608 de Microsoft Access 2016 restauró el soporte para archivos xBase, [19] y la versión 1703 introdujo un tipo de datos de Número grande. [20]

Desde el punto de vista de la tecnología de acceso a datos, Microsoft considera que Jet es una tecnología obsoleta, [21] pero Microsoft continúa brindando soporte a ACE como parte de Microsoft Access.

Compatibilidad

Microsoft proporciona los controladores JET solo para Microsoft Windows y el soporte de software de terceros para bases de datos JET se encuentra casi exclusivamente en Windows. Sin embargo, existen proyectos de código abierto que permiten trabajar con bases de datos JET en otras plataformas, incluido Linux . En particular, MDB Tools y su puerto Java muy extendido llamado Jackcess, así como UCanAccess.

Véase también

Referencias

  1. ^ "¿Qué es un RDBMS (sistema de gestión de bases de datos relacionales)? | Definición de TechTarget". Gestión de datos . Consultado el 20 de junio de 2024 .
  2. ^ "DAO, conectividad ODBC | PDF | Microsoft Access | Bases de datos". Scribd . Consultado el 20 de junio de 2024 .
  3. ^ Artículo 275561 de MS KB (29 de enero de 2007). «Descripción de las nuevas características incluidas en Microsoft Jet 4.0». Microsoft . Consultado el 19 de junio de 2008 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  4. ^ El programa de instalación de Access 2002 sólo actualiza los archivos del sistema en ciertas versiones de Windows y hasta un cierto nivel.
  5. ^ Access 2003 se basó en el componente de motor Jet del sistema operativo para el almacenamiento de datos y el procesamiento de consultas.
  6. ^ Goodhew, Tony (noviembre de 1996). «Motor a reacción: historia». Archivado desde el original el 8 de agosto de 2017. Consultado el 28 de marzo de 2020 .
  7. ^ Artículo 137039 de MS KB (3 de diciembre de 2003). «Nuevas características de Microsoft Jet versión 3.0». Microsoft . Consultado el 19 de junio de 2008 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  8. ^ Microsoft , "Opciones del motor de datos de Microsoft Access 2000", documento técnico.
  9. ^ Artículo 239114 de MS KB (29 de mayo de 2008). «Cómo obtener el último Service Pack para el motor de base de datos Microsoft Jet 4.0». Microsoft . Consultado el 2 de enero de 2010 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  10. ^ Gorm Braarvig. «Base de datos de Access desde SQL 2005/64» . Consultado el 18 de junio de 2007 .
  11. ^ Jakšić, Aleksandar (agosto de 2008). "Desarrollo de soluciones de Access 2007 con C nativo o C++". Microsoft Corporation . Consultado el 26 de agosto de 2008 .
  12. ^ Andy Baron, Optimización de aplicaciones de Microsoft Office Access vinculadas a SQL Server, noviembre de 2006.
  13. ^ Microsoft, Nuevas características del formato de archivo Access 2007 Archivado el 27 de diciembre de 2009 en Wayback Machine .
  14. ^ Controlador del sistema de oficina 2007: Componentes de conectividad de datos
  15. ^ Microsoft, Características discontinuadas y funcionalidad modificada en Access 2010.
  16. ^ Adam W. Saxton, Microsoft SQL Server Escalation Services (21 de enero de 2010). "¿Cómo obtener una versión x64 de Jet?" . Consultado el 29 de octubre de 2021 .
  17. ^ "Microsoft Access Database Engine 2010 Redistributable". Archivado desde el original el 7 de septiembre de 2010.
  18. ^ Microsoft, Características discontinuadas y funcionalidades modificadas en Access 2013.
  19. ^ Microsoft, de vuelta por demanda popular: compatibilidad con archivos dBASE en Access
  20. ^ Microsoft, Novedades de Access 2016
  21. ^ Shirolkar, Prash; Henry, Alyssa; Pepitone, Stephen; Bunch, Acey J. (enero de 2008). "Hoja de ruta de tecnologías de acceso a datos". Microsoft Corporation . Consultado el 19 de junio de 2008 .

Lectura adicional