b'\n_START_ARTICLE_\nMultiversion concurrency control\n_START_PARAGRAPH_\nEl control de concurrencia mediante versiones m\xc3\xbaltiples (Multiversion concurrency control o MVCC) es un m\xc3\xa9todo para control de acceso generalmente usado por SGBDs para proporcionar acceso concurrente a los datos, y en lenguajes de programaci\xc3\xb3n para implementar concurrencia._NEWLINE_Aplicado a una base de datos el procedimiento consistir\xc3\xada en implementar las actualizaciones de datos no borrando los datos antiguos y sobreescribi\xc3\xa9ndolos con los nuevos, sin\xc3\xb3 marcando los antiguos como obsoletos y a\xc3\xb1adiendo los nuevos. De ese modo habr\xc3\xa1 en alg\xc3\xban momento m\xc3\xa1s de una versi\xc3\xb3n de los mismos datos almacenada, teniendo validez s\xc3\xb3lo la versi\xc3\xb3n m\xc3\xa1s reciente. Se evita as\xc3\xad al sistema gestor de la base de datos dedicar tiempo a rellenar huecos en memoria o disco, al precio de tener que recorrer peri\xc3\xb3dicamente la memoria o el disco para eliminar dichos objetos obsoletos. En el caso de una base de datos documental esta estrategia permite optimizar los documentos escribi\xc3\xa9ndolos en memoria contigua, evitando as\xc3\xad tener un documento parcheado o con una lista encadenada de sus piezas en una estructura no contigua._NEWLINE_MVCC tambi\xc3\xa9n proporciona vistas consistentes en tiempo. La lectura de transacciones en MVCC usan t\xc3\xadpicamente marca de tiempo o ID de transacci\xc3\xb3n para determinar qu\xc3\xa9 estado de la base de datos leer. Las lecturas se pueden as\xc3\xad independizar de las escrituras a merced de la conservaci\xc3\xb3n de las versiones con valores antiguos, y se evitan as\xc3\xad los procesos de bloqueo o de exclusi\xc3\xb3n mutua. Las escrituas afectan a futuras versiones, pero el ID de transacci\xc3\xb3n en curso garantiza la consistencia ya que las escrituras posteriores se contemplar\xc3\xa1n m\xc3\xa1s tarde._NEWLINE_Dicho de otro modo, MVCC proporciona a cada usuario conectado a la base de datos una instant\xc3\xa1nea de la misma para \xc3\xa9l s\xc3\xb3lo. Cualquier cambio que se haga no ser\xc3\xa1 visible a los dem\xc3\xa1s usuarios hasta que la transacci\xc3\xb3n se haya completado.\n_START_SECTION_\nImplementaci\xc3\xb3n\n_START_PARAGRAPH_\nMVCC usa marcas de tiempo o identificadores de transacci\xc3\xb3n crecientes para conseguir consistencia transaccional. Asegura que ninguna transacci\xc3\xb3n tenga que esperar por un objeto de la base de datos a base de mantener varias versiones de ese objeto. Cada versi\xc3\xb3n tiene asociada su marca de tiempo de escritura por el que permite leer a una transacci\xc3\xb3n hecha en el momento t\xe1\xb5\xa2 los objetos m\xc3\xa1s recientes que la preceden._NEWLINE_Si una transacci\xc3\xb3n t\xe1\xb5\xa2 quiere escribir sobre un objeto, y adem\xc3\xa1s hay otra transacci\xc3\xb3n t\xe2\x82\x96, la marca de tiempo de t\xe1\xb5\xa2 debe preceder la marca de tiempo de t\xe2\x82\x96 para que la escritura sea aceptada. Es lo mismo que decir que una escritura no puede completarse si hay transacciones pendientes con una marca de tiempo anterior._NEWLINE_Cada objeto debe tener tambi\xc3\xa9n una marca de tiempo de lectura, y si una transacci\xc3\xb3n t\xe1\xb5\xa2 quiere escribir sobre un objeto P, y la marca de tiempo de esa transacci\xc3\xb3n es anterior a la de lectura del objeto, se aborta la transacci\xc3\xb3n t\xe1\xb5\xa2 y se comienza de nuevo. En caso contrario, t\xe1\xb5\xa2 crea una nueva versi\xc3\xb3n de P y establece sus marcas de tiempo de lectura y escritura igual a su marca de tiempo._NEWLINE_El inconveniente obvio de este mecanismo est\xc3\xa1 en el coste de almacenar versiones m\xc3\xbaltiples del mismo objeto. Por otro lado las lecturas nunca se bloquean, lo que favorece aqu\xc3\xa9llas aplicaciones que realizan muchas lecturas de la base de datos. El m\xc3\xa9todo MVCC est\xc3\xa1 particularmente adaptado a la toma de instant\xc3\xa1neas aisladas, algo que otros m\xc3\xa9todos de concurrencia no lo hacen bien o a un coste muy alto.\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nEl mecanismo de control de concurrencia mediante versiones m\xc3\xbaltiples est\xc3\xa1 descrito en detalle en el art\xc3\xadculo de 1981 de Philip Bernstein y Nathan Goodman "Concurrency Control in Distributed Database Systems",\xe2\x80\x8b por entonces empleados en Computer Corporation of America. El art\xc3\xadculo de Bernstein y Goodman cita una disertaci\xc3\xb3n\xe2\x80\x8b de 1978 por David P. Reed que describe claramente MVCC y la reclama como original._NEWLINE_La primera base de datos comercial con MVCC fue VAX Rdb/ELN de Digital. La segunda fue InterBase, todav\xc3\xada activa.'