Otimização MVCC
Os bancos de dados do Hyperledger Fabric usam o controle de simultaneidade de várias versões (MVCC) para evitar gastos duplos e inconsistência de dados.
Quando o mesmo estado é atualizado, uma nova versão do registro substitui a versão antiga. Se houver solicitações simultâneas para atualizar a mesma chave em um bloco, um erro MVCC_READ_CONFLICT poderá ser gerado.
Para reduzir erros MVCC para operações de transferência, hortelã, queima e retenção, você pode ativar a otimização MVCC para chaincode de token. Essa otimização funciona apenas no Oracle Blockchain Platform. Por padrão, a otimização está desativada. Para ativar a otimização, conclua a etapa a seguir aplicável.
- CLI: Especifique o parâmetro
-m
ou--enable_mvcc_optimization
booliano com o comandoochain init
. Por padrão, o parâmetro é definido comofalse
. Para ativar a otimização, adicione-m true
à linha de comandoochain init
. - Visual Studio Code: Ao criar um chaincode, selecione Ativar otimização MVCC na janela Criar Chaincode.
Para usar a otimização com chaincode criado em versões anteriores do Blockchain App Builder, execute as seguintes etapas:
- Depois de instalar a versão mais recente do Blockchain App Builder, faça upgrade do chaincode conforme descrito em Upgrade de Projetos de Chaincode na CLI e Upgrade de Projetos de Chaincode no Visual Studio Code.
- Edite o arquivo
.ochain.json
na pasta raiz do chaincode para definirenableMvccOptimization
comotrue
. - Sincronize o chaincode, que adiciona a otimização e cria duas novas pastas na pasta raiz do chaincode:
statedb
etokens
. Para obter mais informações sobre sincronização, consulte Sincronizar Alterações do Arquivo de Especificação com o Código de Origem Gerado e Sincronizar Alterações do Arquivo de Especificação com o Código de Origem Gerado.
Outros métodos para contornar erros MVCC_READ_CONFLICT, incluindo ter solicitações de repetição do aplicativo cliente quando esse erro é gerado ou usar uma fila para capturar solicitações simultâneas antes de serem enviadas para a rede blockchain. Para obter mais informações, consulte Semântica definida para leitura/gravação na documentação do Hyperledger Fabric.
Observação:
A otimização do MVCC não funciona em redes híbridas que incluem pares do Oracle Blockchain Platform e do Hyperledger Fabric ou para testes em uma rede local do Hyperledger Fabric. Não habilite a otimização MVCC em redes híbridas, pois isso pode levar a inconsistências entre pares.