Base de datos:¿Qué es el Control de Concurrencia Multiversion (MVCC) y quién lo admite?[cerrado]

StackOverflow https://stackoverflow.com/questions/27499

  •  09-06-2019
  •  | 
  •  

Pregunta

Recientemente Jeff ha al corriente con respecto a su problema con los bloqueos de bases de datos relacionados con la lectura. Control de concurrencia multiversión (MVCC) pretende solucionar este problema.¿Qué es y qué bases de datos lo respaldan?

actualizado:estos lo apoyan (¿cuáles otros?)

  • oráculo
  • postgresql
¿Fue útil?

Solución

Oracle ha tenido un excelente sistema de control de versiones múltiples desde hace mucho tiempo (al menos desde Oracle 8.0)

Lo siguiente debería ayudar.

  1. El usuario A inicia una transacción y está actualizando 1000 filas con algún valor en el momento T1
  2. El usuario B lee las mismas 1000 filas en el momento T2.
  3. El usuario A actualiza la fila 543 con el valor Y (valor original X)
  4. El usuario B llega a la fila 543 y descubre que hay una transacción en operación desde el momento T1.
  5. La base de datos devuelve el registro no modificado de los Registros.El valor devuelto es el valor que se confirmó en el momento menor 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 asignar más espacio a los registros.
  7. De esta manera se logra la coherencia 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 coherencia de lectura.

He tratado de explicarlo en los términos más simples posibles... hay muchas cosas relacionadas con la multiversión en bases de datos.

Otros consejos

Los siguientes tienen una implementación de MVCC:

SQL Server 2005 (no predeterminado, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (desde la versión 8)

MySQL 5 (sólo con tablas InnoDB)

PostgreSQL

pájaro de fuego

informax

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

Control de concurrencia multiversión de PostgreSQL

Así como Este artículo que presenta diagramas de cómo funciona MVCC al emitir declaraciones INSERT, UPDATE y DELETE.

Datos extremos dbX es compatible con MVCC.

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

Firebird lo hace, lo llaman MGA (Arquitectura Multi Generacional).

Mantienen la versión original intacta y agregan una nueva versión que solo la sesión que la usa puede ver; cuando se confirma, la versión anterior se deshabilita y la versión más nueva se habilita para todos (el archivo se acumula con datos y necesita una limpieza regular) .

Oracle sobrescribe los datos en sí y utiliza segmentos de reversión/deshacer espacios de tabla para otras sesiones y para revertir.

SAP HANA también utiliza MVCC.SAP HANA es un sistema informático completo en memoria, por lo que los costos de MVCC para una selección son muy bajos...:)

Aquí hay un enlace a la página de documentación de PostgreSQL en MVCC.La cita de elección (el énfasis es mío):

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

Por eso Jeff estaba tan confundido por sus puntos muertos.Una lectura nunca debería poder causarlos.

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

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 selecciones más lentas ya que cada una necesita una subconsulta para encontrar el último registro.

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

MySQL también usa MVCC de forma predeterminada si usa tablas InnoDB:http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

McObject anunció el 9 de noviembre que había agregado un administrador 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), ahora está disponible en ediciones con almacenamiento híbrido (en memoria/en disco), alta disponibilidad, soporte de 64 bits y más.

Hay una buena explicación de MVCC (con diagramas) y algunas cifras de rendimiento para eXtremeDB en este artículo, escrito por el cofundador y director ejecutivo de McObject, en la revista RTC:

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

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

DB2 versión 9.7 tiene una versión con licencia de postgress plus.Esto significa que esta función (en el modo correcto) es compatible con esta función.

Berkeley DB También es compatible con MVCC.

Y cuando motor de almacenamiento BDB se usa en MySQL, MySQL también es compatible con MVCC.

Berkeley DB es un DBMS muy potente, personalizable y totalmente compatible con ACID.Admite varios métodos diferentes de indexación, replicación maestro-esclavo, puede usarse como un almacén de valores clave puro con su propia API dinámica o consultarse con SQL si se desea.Vale la pena echarle un vistazo.

Otro DBMS orientado a documentos que adopte MVCC sería sofádb.MVCC aquí también es una gran ventaja para la replicación punto a punto integrada.

De http://vschart.com/list/multiversion-concurrency-control/

Couchbase, Orientdb, CouchDB, PostgreSQL, Project Voldemort, BigTable, Percona Server, HypergraphDB, llovizna, Cloudant, IBM DB2, Intersystems Caché, Interbase

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top