2011-04-22 15 views
10

Estoy tratando de averiguar cuál es la diferencia entre el control de concurrencia optimista (OCC) y el control de concurrencia de múltiples versiones (MVCC).Optimistic vs Multi Version Concurrency Control - ¿Diferencias?

Hasta ahora, sé que ambos se basan en la versión que comprueba las actualizaciones.

En OCC, leo sobre las transacciones que no adquieren bloqueos para el acceso de lectura, solo para la actualización posterior que fracasará si la versión se incrementó y la verificación de la versión falla. En este caso, la transacción se revertirá.

En MVCC, ¿es básicamente igual o no? ¿Dónde está la diferencia?

+0

¿es el almacenamiento de múltiples versiones hasta la compactación? –

+0

sí, MVCC es un mecanismo de implementación utilizado por motores de base de datos, cachés, etc. para proporcionar lecturas aisladas sin ser bloqueado por escrituras. –

+0

@Binil Thomas sí, occ tiene el mismo propósito que yo lo entendí. Es por eso que surgió la pregunta :) –

Respuesta

13

Creo que a veces se usan indistintamente, y si la transacción solo involucra un objeto, entonces son esencialmente iguales, pero MVCC es una extensión de concurrencia optimista (o una versión) que proporciona garantías cuando hay más de un objeto esta involucrado. Supongamos que tiene dos objetos, A y B, que deben mantener alguna invariante entre ellos, p. son dos números cuya suma es constante. Ahora, una transacción T1 resta 10 de A y lo agrega a B, mientras que, al mismo tiempo, otra transacción T2 lee los dos números. Incluso si actualiza de manera optimista A y B de forma independiente (CAS ellos), T2 podría obtener una vista incoherente de los dos números (por ejemplo, si lee A antes de que se modifique, pero lee B después de haber sido modificado). MVCC se aseguraría de que T2 lea una vista consistente de A y B posiblemente devolviendo sus valores anteriores, es decir, debe guardar las versiones anteriores.

En resumen, el bloqueo optimista (o el control de concurrencia optimista) es un principio general para la sincronización sin bloqueos. MVCC es una técnica optimista que permite transacciones aisladas que abarcan múltiples objetos.

3

Para responder directamente a la pregunta, control de versiones múltiples de concurrencia (MVCC) es un método de control de concurrencia, que pertenece a la categoría de control de concurrencia optimista (OCC).

Hay 2 principales enfoques de control de concurrencia:

  • de control de concurrencia pesimista: este enfoque asume que las operaciones conflictivas ocurren con mayor frecuencia (por eso se llama pesimista). Dado que los conflictos son comunes, este enfoque hace uso de bloqueos para evitar la ejecución de operaciones conflictivas, suponiendo que no hay una sobrecarga significativa por su uso.
  • Optimistic Concurrency Control: este enfoque asume que las operaciones conflictivas son raras y no ocurren con tanta frecuencia. De acuerdo con estas suposiciones, los bloqueos impondrían un significativo & no necesario para el rendimiento. Por esta razón, este enfoque generalmente evita el bloqueo e intenta ejecutar las operaciones, verificando (en la confirmación de cada transacción) si ha habido un conflicto con otra transacción durante sus operaciones. Si hubo algún conflicto, este enfoque procede a abortar las transacciones que tuvieron operaciones conflictivas.

Un algoritmo ampliamente conocido de control de simultaneidad pesimista es el 2-phase locking.

Dos algoritmos ampliamente conocidos de control de concurrencia optimista son:

La principal diferencia entre estos 2 algoritmos es el siguiente. El algoritmo basado en la marca de tiempo asigna a cada objeto (más correctamente uno para cada tipo de operación, lectura & escritura), indicando la última transacción que tuvo acceso a él. Entonces, cada transacción revisa durante la operación, si entra en conflicto con la última transacción que accedió al objeto. El enfoque de varias versiones mantiene múltiples versiones de cada objeto, cada una correspondiente a una transacción. Como resultado, el enfoque de varias versiones consigue menos interrupciones que el primer enfoque, ya que una transacción potencialmente conflictiva puede escribir una nueva versión, en lugar de anularla en algunos casos. Sin embargo, esto se logra a costa de más almacenamiento requerido para todas las versiones.

0

Solo para rectificar la respuesta de Dimos: el control de concurrencia basado en la marca de tiempo sigue siendo un método pesimista (aún puede abortar/bloquear transacciones durante su fase de ejecución).