Database:Che cosa è Multiversione di Controllo della Concorrenza (MVCC) e a chi lo sostiene?[chiuso]

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

  •  09-06-2019
  •  | 
  •  

Domanda

Recentemente, Jeff ha inviato per quanto riguarda i suoi problemi con i database di deadlock relative alla lettura. Multiversione di Controllo della Concorrenza (MVCC) crediti per risolvere questo problema.Che cosa è, e cosa database di supporto?

aggiornamento:questi supporto (quali altri?)

  • oracle
  • postgresql
È stato utile?

Soluzione

Oracle ha avuto un ottimo multi sistema di controllo di versione in atto da tempo(almeno dal oracle 8.0)

Seguente dovrebbe aiutare.

  1. Utente avvia una transazione e l'aggiornamento di 1000 righe con un po ' di valore Al Tempo T1
  2. L'utente B si legge uguale 1000 righe al tempo T2.
  3. L'utente A riga aggiornamenti 543 con valore Y (valore originale X)
  4. Utente B raggiunge riga 543 e scopre che una transazione è in funzione dal Tempo T1.
  5. Il database restituisce il non registrare dai Registri.Il valore restituito è il valore che è stato commesso al momento inferiore o uguale a T2.
  6. Se il record non poteva essere recuperati dal redo logs significa che il database non è configurato in modo appropriato.C'è bisogno di più spazio allocato per i registri.
  7. In questo modo la lettura consitency è raggiunto.I risultati sono sempre gli stessi rispetto all'ora di inizio della transazione.Così all'interno di una transazione la lettura si ottiene la consistenza.

Ho cercato di spiegare in termini più semplici possibili...c'è un sacco di multiversioning nel database.

Altri suggerimenti

I seguenti sono un'implementazione di MVCC:

SQL Server 2005 (Non di default, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (dalla versione 8)

MySQL 5 (solo con le tabelle InnoDB)

PostgreSQL

Firebird

Informix

Sono abbastanza sicuro di Sybase e IBM DB2 su Mainframe/LUW non si dispone di una implementazione di MVCC

PostgreSQL Multi-Versione per il Controllo della Concorrenza

Così come questo articolo che caratteristiche diagrammi di come MVCC funziona quando il rilascio di INSERT, UPDATE e DELETE.

XtremeData dbX supporta MVCC.

Inoltre, dbX può fare uso di SQL primitive implementato in hardware FPGA.

Firebird fa, la chiamano MGA (Multi Generazionale Architettura).

Essi mantenere la versione originale, intatto, e aggiungere una nuova versione che solo la sessione di utilizzo si può vedere, quando si impegna la versione precedente è disattivato, e la versione più recente è abilitato per tutti(il file di pile-up dei dati e ha bisogno di una regolare pulizia).

Oracle sovrascrive i dati stessi, e utilizza un segmenti di rollback/annulla spazi per altre sessioni e di rollback.

SAP HANA utilizza anche MVCC.SAP HANA è un In-Memory Computing di Sistema, in modo MVCC costi per selezionare è molto basso...:)

Qui è un link al PostgreSQL doc pagina MVCC.La scelta citazione (sottolineatura mia):

Il vantaggio principale di il MVCC modello di controllo della concorrenza, piuttosto che di chiusura è che in MVCC blocchi acquisiti per l'esecuzione di query (lettura) i dati non sono in conflitto con blocchi acquisiti per la scrittura dei dati, e così la lettura non bloccano la scrittura e la scrittura non si blocca la lettura.

Questo è il motivo per cui Jeff era così confuso dal suo deadlock.Una lettura non dovrebbe mai essere in grado di causare loro.

SQL Server 2005 e offerta di MVCC come opzione;non è l'impostazione predefinita, tuttavia.MS chiama l'isolamento dello snapshot, se la memoria non serve.

MVCC può essere implementato anche manualmente, con l'aggiunta di un numero di versione di colonna per le tabelle, e sempre facendo inserti invece di aggiornamenti.

Il costo di questo è un molto più grande database, e più lento seleziona dal momento che ognuno ha bisogno di una sottoquery per trovare il recente record.

È un'ottima soluzione per i sistemi che richiedono il 100% di controllo per tutte le modifiche.

MySQL utilizza anche MVCC per impostazione predefinita, se si utilizzano le tabelle InnoDB:http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

McObject annunciato in 11/09, che ha aggiunto un optional MVCC di gestione delle transazioni per la sua eXtremeDB database incorporato:

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

eXtremeDB, è stato originariamente sviluppato come un database in-memory system (IMDS), è ora disponibile in varie versioni, con ibrido (in memoria/disco) storage ad Alta Disponibilità, il supporto a 64 bit e di più.

C'è una buona spiegazione di MVCC -- con diagrammi-e alcuni numeri delle prestazioni per eXtremeDB in questo articolo, scritto da McObject, co-fondatore e CEO di, di RTC Rivista:

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

Chiaramente MVCC è sempre più vantaggioso, in quanto un'applicazione scale per molti compiti in esecuzione su più core della CPU.

DB2 versione 9.7 è una versione con licenza di postgress plus in esso.Questo significa che questa funzione (in modo corretto) supporta questa funzione.

Berkeley DB supporta anche MVCC.

E quando BDB motore di archiviazione è utilizzato in MySQL, MySQL supporta anche MVCC.

Berkeley DB è molto potente, personalizzabile, completamente ACIDO conformi DBMS.Esso supporta diversi metodi per l'indicizzazione, la replica master-slave, può essere utilizzato come un puro valore della chiave di negozio con una propria dinamica API o la query con SQL, se voleva.Vale la pena dare un occhiata.

Un altro documento oriented DBMS abbracciando MVCC sarebbe CouchDB.MVCC anche qui è un grande vantaggio per il peer-to-peer di replica.

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

Couchbase, OrientDB, CouchDB, PostgreSQL, Progetto Di Voldemort, BigTable, Percona Server, HyperGraphDB, Filo, Cloudant, IBM DB2, InterSystems, InterBase

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top