Base de dados:O que é o Multiversion Concurrency Control (MVCC) e quem o oferece suporte?[fechado]
Pergunta
Recentemente, Jeff postou sobre seu problema com bloqueios de banco de dados relacionados à leitura. Controle de simultaneidade multiversão (MVCC) afirma resolver este problema.O que é e quais bancos de dados o suportam?
Atualizada:estes o apoiam (quais outros?)
- oráculo
- postgresql
Solução
A Oracle possui um excelente sistema de controle multiversão há muito tempo (pelo menos desde o Oracle 8.0)
A seguir deve ajudar.
- O usuário A inicia uma transação e está atualizando 1.000 linhas com algum valor no momento T1
- O usuário B lê as mesmas 1.000 linhas no tempo T2.
- O usuário A atualiza a linha 543 com o valor Y (valor original X)
- O usuário B chega à linha 543 e descobre que uma transação está em operação desde o Tempo T1.
- O banco de dados retorna o registro não modificado dos Logs.O valor retornado é o valor que foi confirmado no momento menor ou igual a T2.
- Se o registro não puder ser recuperado dos logs de redo, significa que o banco de dados não está configurado adequadamente.É necessário haver mais espaço alocado para os logs.
- Desta forma, a consistência da leitura é alcançada.Os resultados retornados são sempre os mesmos em relação ao horário de início da transação.Assim, dentro de uma transação, a consistência de leitura é alcançada.
Tentei explicar nos termos mais simples possíveis... há muito em multiversionamento em bancos de dados.
Outras dicas
Os seguintes têm uma implementação do MVCC:
SQL Server 2005 (não padrão, SET READ_COMMITTED_SNAPSHOT ON
)
Oracle (desde a versão 8)
MySQL 5 (somente com tabelas InnoDB)
PostgreSQL
Pássaro de Fogo
Informix
Tenho certeza de que Sybase e IBM DB2 Mainframe/LUW não possuem uma implementação de MVCC
Controle de simultaneidade multiversão do PostgreSQL
Assim como Este artigo que apresenta diagramas de como o MVCC funciona ao emitir instruções INSERT, UPDATE e DELETE.
XtremeData dbX suporta MVCC.
Além disso, o dbX pode fazer uso de primitivas SQL implementadas em hardware FPGA.
Firebird faz isso, eles chamam de MGA (Multi Generational Architecture).
Eles mantêm a versão original intacta e adicionam uma nova versão que apenas a sessão que a utiliza pode ver. Quando confirmada, a versão mais antiga é desabilitada e a versão mais recente é habilitada para todos (o arquivo se acumula com dados e precisa de limpeza regular) .
O Oracle sobrescreve os próprios dados e usa segmentos de reversão/desfazer espaços de tabela para outras sessões e para reversão.
SAP HANA também usa MVCC.SAP HANA é um sistema de computação In-Memory completo, portanto os custos de MVCC para seleção são muito baixos...:)
Aqui está um link para a página de documentos do PostgreSQL no MVCC.A citação escolhida (ênfase minha):
A principal vantagem de usar o modelo MVCC de controle de simultaneidade em vez de bloqueio é que no MVCC os bloqueios adquiridos para consulta (leitura) de dados não entram em conflito com os bloqueios adquiridos para gravação de dados e, portanto, a leitura nunca bloqueia a escrita e a escrita nunca bloqueia a leitura.
É por isso que Jeff ficou tão confuso com seus impasses.Uma leitura nunca deve ser capaz de causá-los.
O SQL Server 2005 e superior oferecem MVCC como opção;no entanto, não é o padrão.MS chama isso de isolamento de instantâneo, se não houver memória.
O MVCC também pode ser implementado manualmente, adicionando uma coluna de número de versão às suas tabelas e sempre fazendo inserções em vez de atualizações.
O custo disso é um banco de dados muito maior e seleções mais lentas, pois cada um precisa de uma subconsulta para encontrar o registro mais recente.
É uma excelente solução para sistemas que necessitam de auditoria 100% para todas as alterações.
MySQL também usa MVCC por padrão se você usar tabelas InnoDB:http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html
McObject anunciou em 09/11 que adicionou um gerenciador de transações MVCC opcional ao seu banco de dados incorporado eXtremeDB:
http://www.mcobject.com/november9/2009
O eXtremeDB, originalmente desenvolvido como um sistema de banco de dados em memória (IMDS), agora está disponível em edições com armazenamento híbrido (na memória/em disco), alta disponibilidade, suporte a 64 bits e muito mais.
Há uma boa explicação do MVCC - com diagramas - e alguns números de desempenho do eXtremeDB neste artigo, escrito pelo cofundador e CEO da McObject, na RTC Magazine:
http://www.rtcmagazine.com/articles/view/101612
Claramente, o MVCC é cada vez mais benéfico à medida que um aplicativo é dimensionado para incluir muitas tarefas executadas em vários núcleos de CPU.
O DB2 versão 9.7 possui uma versão licenciada do postgress plus.Isso significa que este recurso (no modo correto) oferece suporte a esse recurso.
Banco de dados de Berkeley também suporta MVCC.
E quando Mecanismo de armazenamento BDB é usado no MySQL, o MySQL também suporta MVCC.
Berkeley DB é um DBMS muito poderoso e personalizável, totalmente em conformidade com ACID.Ele suporta vários métodos diferentes para indexação, replicação mestre-escravo, pode ser usado como um armazenamento de valor de chave puro com sua própria API dinâmica ou consultado com SQL, se desejado.Vale a pena dar uma olhada.
Outro SGBD orientado a documentos que abraça o MVCC seria CouchDB.O MVCC aqui também é uma grande vantagem para a replicação ponto a ponto integrada.
De http://vschart.com/list/multiversion-concurrency-control/
Couchbase, Orientdb, CouchDB, PostgreSQL, Project Voldemort, BigTable, servidor Percona, Hypergraphdb, Drizzle, Cloudant, IBM DB2, Caché intersystems, Interbase