Suponga que una transacción en un programa actualiza los datos de una geodatabase de ArcSDE pero, antes de que se confirme la transacción, otro programa lee los mismos datos. ¿Leerá el segundo programa los datos nuevos pero no confirmados o leerá los datos antiguos? La respuesta depende del nivel de aislamiento de la transacción.
Si la transacción permite a otros programas leer los datos no confirmados, el segundo programa leerá los datos actualizados. Esto puede mejorar el rendimiento, porque el segundo programa no tiene que esperar a que finalice la transacción para leer los datos. Pero hay un inconveniente: si el segundo programa lee datos que no finalmente no se hayan confirmado, habría leído datos incorrectos o datos que no existen.
Para permitir a los usuarios elegir lo mejor para su aplicación, los DBMS proporcionan niveles de aislamiento que definen cómo se aislarán los procesos subsiguientes de otros procesos que se ejecuten simultáneamente. Los niveles de aislamiento pueden ser establecidos por el administrador de bases de datos y se aplican a todas las transacciones dentro de la base de datos. También pueden establecerse dentro de una aplicación o antes de una transacción individual. Un nivel de aislamiento especifica lo siguiente:
- El grado hasta el cual las filas leídas y actualizadas por la aplicación están disponibles para otros procesos que se ejecuten simultáneamente
- El grado hasta el cual las actualizaciones de otros procesos de aplicación que se ejecuten simultáneamente están disponibles para la aplicación
Los DBMS permiten establecer uno de cuatro niveles de aislamiento, que se muestran a continuación desde el aislamiento inferior hasta el superior. Cada nivel se agrega a las entidades del nivel anterior. Los niveles de aislamiento superiores proporcionan un grado mayor de integridad de datos, pero a costa de reducir la simultaneidad, puesto que mantienen más tiempo los bloqueos.
UNCOMMITTED READ: permite un aislamiento mínimo de las transacciones simultáneas. La transacción puede leer datos modificados por transacciones simultáneas incluso antes de que se confirmen.
COMMITTED READ: la transacción solo leerá los datos confirmados; no leerá los datos no confirmados.
REPEATABLE READ: impone una restricción adicional que se aplica cuando las mismas filas se leen varias veces durante el curso de la transacción. Esto garantiza que, cuando se lean de nuevo las mismas filas, sean iguales.
SERIALIZABLE: este nivel de aislamiento proporciona el grado superior de aislamiento de las transacciones simultáneas. Todas las lecturas de la transacción verán solo datos confirmados antes de que se inicie la transacción, y nunca verán cambios de la transacción simultánea confirmados durante la ejecución de la transacción.
Su DBMS puede hacer referencia a estos niveles por otros nombres. Cada nivel funciona de manera similar en todos los DBMS, pero hay diferencias importantes. Para evitar errores en el diseño de aplicaciones y flujos de trabajo, asegúrese de entender cómo afectan los niveles de aislamiento al bloqueo y la simultaneidad en su DBMS. Consulte la documentación del DBMS para obtener más información.
Para obtener información sobre cómo se aplican los niveles de aislamiento a ArcGIS, así como el potencial para problemas de simultaneidad, vea Simultaneidad y bloqueo.