2008-08-26 10 views
38

Jeff recientemente tiene posted con respecto a su problema con los bloqueos de la base de datos relacionados con la lectura. Multiversion Concurrency Control (MVCC) pretende resolver este problema. ¿Qué es y qué bases de datos lo admiten?Base de datos: ¿Qué es el Control de Concurrencia Multiversion (MVCC) y quién lo admite?

actualización: éstos apoyo (lo que otros?)

  • oráculo
  • PostgreSQL
+1

no se puede obtener el documento original de Jim Starkey, pero hay algunos informes posteriores: http: // web. firebirdsql.org/doc/whitepapers/fb_vs_ibm_vs_oracle.htm http://mike.kruckenberg.com/archives/2006/04/jim_starkey_int.html –

+0

El [H2 Database Engine] (http://www.h2database.com/) también [admite MVCC de forma predeterminada] (http://h2database.com/html/advanced.html#mvcc). –

Respuesta

32

Oracle ha tenido un excelente sistema de control de versiones múltiples en el lugar desde mucho tiempo (por lo menos desde Oracle 8,0)

Siguiendo debe ayudar.

  1. usuario A inicia una transacción y está actualizando 1000 filas con algún valor en el tiempo T1
  2. usuario B lee las mismas 1000 filas en el tiempo T2.
  3. Usuario A actualiza la fila 543 con el valor Y (valor original X)
  4. El usuario B alcanza la fila 543 y descubre que una transacción está en funcionamiento desde la hora T1.
  5. La base de datos devuelve el registro sin modificar de los registros. El valor devuelto es el valor que se confirmó en el momento inferior o igual a T2.
  6. Si no se pudo recuperar el registro de los registros de rehacer, significa que la base de datos no está configurada correctamente. Es necesario que haya más espacio asignado a los registros.
  7. De esta forma se logra la consistencia de lectura. Los resultados devueltos son siempre los mismos con respecto a la hora de inicio de la transacción. Entonces, dentro de una transacción, se logra la consistencia de lectura.

He tratado de explicar en los términos más simples posibles ... hay mucho para la multiversión en las bases de datos.

+0

+1 Desde mucho antes de Oracle 8.0 - desde Oracle 4.0, creo. –

+0

¿Y es lo mismo entre la consistencia de lectura y la lectura repetida? – Chao

1

Aquí hay un link to the PostgreSQL doc page on MVCC. La elección de presupuesto (el énfasis es mío):

La principal ventaja de utilizar el modelo MVCC de control de concurrencia en lugar de bloqueo es que en las cerraduras MVCC adquiridos para la consulta (lectura) de datos no están en conflicto con los bloqueos adquiridos para escribir datos, y así leer nunca bloquea la escritura y la escritura nunca bloquea la lectura.

Es por eso que Jeff estaba tan confundido por sus interbloqueos. Una lectura nunca debería ser capaz de causarlos.

1

SQL Server 2005 y versiones posteriores ofrecen MVCC como opción; no es el predeterminado, sin embargo. MS lo llama aislamiento de instantáneas, si la memoria sirve.

1

MVCC también se puede implementar manualmente, agregando una columna de número de versión a sus tablas, y siempre haciendo inserciones en lugar de actualizaciones.

El costo de esto es una base de datos mucho más grande, y las selecciones más lentas ya que cada una necesita una subconsulta para encontrar el último registro.

Es una solución excelente para sistemas que requieren un 100% de auditoría para todos los cambios.

2

Firebird lo hace, lo llaman MGA (multi generacional Arquitectura).

Mantienen intacta la versión original y agregan una nueva versión que solo la sesión que usa puede ver, cuando se confirma que la versión anterior está deshabilitada, y la última versión está habilitada para todos (el archivo se acumula con datos y necesita una limpieza regular).

Oracle sobrescribe los datos en sí, y utiliza un rollback segmentos/deshacer espacios de tabla para otras sesiones y para deshacer.

+0

Lo mismo para Interbase, aunque no creo que tenga sentido usarlo cuando hay un Firebird. http://ibexpert.net/ibe/index.php?n=Doc.Multi-generationalArchitectureMGAAndRecordVersioning –

+1

Firebird es Interbase ... :) –

+0

Firebird WAS Interbase, son y divergirán –

8

La siguiente tienen una implementación de MVCC:

SQL Server 2005 (no predeterminado, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (desde la versión 8)

MySQL 5 (solo con tablas InnoDB)

PostgreSQL

Firebird

Informix

Estoy bastante seguro de Sybase y DB2 de IBM Mainframe/LUW no tienen una implementación de MVCC

0

DB2 versión 9.7 tiene una versión con licencia de Postgress plus en eso. Esto significa que esta característica (en el modo correcto) admite esta característica.

1

McObject anunció en 11/09 que se ha añadido un gestor de transacciones MVCC opcional a su base de datos integrada eXtremeDB:

http://www.mcobject.com/november9/2009

eXtremeDB, desarrollado originalmente como un sistema de base de datos en memoria (IMDS), es ahora disponible en ediciones con almacenamiento híbrido (en memoria/en disco), alta disponibilidad, soporte de 64 bits y más.

1

Hay una buena explicación de MVCC - con diagramas - y algunos números de rendimiento para eXtremeDB en este artículo, escrito por el co-fundador y CEO de McObject, en RTC Revista:

http://www.rtcmagazine.com/articles/view/101612

Claramente MVCC es cada vez más beneficioso ya que una aplicación se amplía para incluir muchas tareas que se ejecutan en múltiples núcleos de CPU.

2

XtremeData dbX admite MVCC.

Además, dbX puede hacer uso de primitivas SQL implementadas en hardware FPGA.

0

Berkeley DB también es compatible con MVCC.

Y cuando se utiliza BDB storage engine en MySQL, MySQL también admite MVCC.

Berkeley DB es un DBMS muy potente, totalmente personalizable y conforme con ACID. Es compatible con varios métodos diferentes para la indexación, la replicación maestro-esclavo, se puede utilizar como un almacén de valores de clave pura con su propia API dinámica o consultar con SQL si así lo desea. Vale la pena echarle un vistazo.

Otro documento orientado DBMS abrazando MVCC sería CouchDB. MVCC aquí también es una gran ventaja para la replicación punto a punto integrada.

2

SAP HANA también utiliza MVCC. SAP HANA es un sistema de computación en la memoria completo, por lo que los costos de MVCC para select son muy bajos ... :)

+1

Puede agregar un enlace a esa afirmación . –

Cuestiones relacionadas