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 comando ochain init. Por padrão, o parâmetro é definido como false. Para ativar a otimização, adicione -m true à linha de comando ochain 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:

  1. 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.
  2. Edite o arquivo .ochain.json na pasta raiz do chaincode para definir enableMvccOptimization como true.
  3. Sincronize o chaincode, que adiciona a otimização e cria duas novas pastas na pasta raiz do chaincode: statedb e tokens. 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.