Alternativas ao uso do NTFS transacional

Resumo

A Microsoft recomenda fortemente que os desenvolvedores investiguem a utilização das alternativas discutidas (ou, em alguns casos, investiguem outras alternativas) em vez de adotar uma plataforma de API que pode não estar disponível em versões futuras do Windows.

Introdução

O TxF foi introduzido com o Windows Vista como um meio de introduzir transações de arquivo atômico no Windows. Ele permite que os desenvolvedores do Windows tenham atomicidade transacional para operações de arquivo em transações com um único arquivo, em transações que envolvem vários arquivos e em transações que abrangem várias fontes , como o Registro (por meio de TxR) e bancos de dados (como SQL). Embora o TxF seja um conjunto poderoso de APIs, há um interesse de desenvolvedor extremamente limitado nessa plataforma de API, pois o Windows Vista é principalmente devido à sua complexidade e várias nuances que os desenvolvedores precisam considerar como parte do desenvolvimento de aplicativos. Como resultado, a Microsoft está considerando preterir APIs TxF em uma versão futura do Windows para concentrar os esforços de desenvolvimento e manutenção em outros recursos e APIs que têm mais valor para a maioria dos clientes. A próxima seção descreve métodos alternativos de exemplo para obter resultados semelhantes aos que o TxF faria para vários tipos de cenários de aplicativo.

Alternativas ao TxF por cenário

Com as limitações descritas acima, os desenvolvedores devem investigar alternativas ao TxF para cobrir cenários de aplicativo que não são atendidos pelo TxF. Aqui estão discutidas algumas alternativas sugeridas para usos comuns do TxF para os desenvolvedores considerarem. Observe que essa lista não é completa nem exaustiva.

Aplicativos atualizando um único arquivo com dados "semelhantes a documentos"

Muitos aplicativos que lidam com dados "semelhantes a documentos" tendem a carregar todo o documento na memória, operar nele e, em seguida, gravá-lo novamente para salvar as alterações. A atomicidade necessária aqui é que as alterações são completamente aplicadas ou não aplicadas, pois um estado inconsistente renderizaria o arquivo corrompido. Uma abordagem comum é gravar o documento em um novo arquivo e, em seguida, substituir o arquivo original pelo novo. Um método para fazer isso é com a API ReplaceFile .

Aplicativos executando atualizações para vários arquivos e/ou para o hive do registro

Há muitos aplicativos que precisam executar atomicamente uma atualização para um conjunto de arquivos e para o Registro. Esse cenário é mais comumente obtido por meio de um aplicativo instalador, como o Windows Installer. Para obter mais informações sobre o Windows Installer, consulte Windows Installer.

Aplicativos que gerenciam um conjunto de dados estruturados

Muitos aplicativos gerenciam algum conjunto de estruturas de dados proprietárias de tipos variados como um meio de armazenar dados. Um desafio significativo para esses aplicativos é o processo de manter a integridade de ponteiros/referências internos se ocorrer uma falha durante uma operação de atualização. Criar o mecanismo para isso é, de fato, um "problema difícil", e, portanto, a maioria dos aplicativos dependerá de um servidor de banco de dados verdadeiro para gerenciar seu conjunto de dados.

Duas sugestões para ajudar a gerenciar dados estruturados são:

  • A Microsoft fornece a caixa de entrada ESE (Extensible Storage Engine) no Windows para permitir que os aplicativos executem operações de recuperação e atualização de dados transacionadas. Para obter mais informações sobre o ESE (Mecanismo de Armazenamento Extensível), consulte https://msdn.microsoft.com/library/gg269259.aspx.
  • Para aplicativos que exigem um provedor de banco de dados mais avançado, robusto e escalonável, é recomendável que os clientes considerem usar o recurso Filestream disponível com o Microsoft SQL Server. Para obter mais informações sobre fluxos de arquivos SQL, consulte https://technet.microsoft.com/library/bb933993.aspx.

Aplicativos com transações envolvendo arquivos em um volume NTFS local e tabelas em um banco de dados SQL externo

Há classes de aplicativos que têm grandes necessidades de conjunto de dados ou precisam ter atomicidade transacional em uma operação que envolve um banco de dados externo e um armazenamento local. Para esse cenário, é altamente recomendável que os desenvolvedores considerem usar fluxos de arquivos SQL para executar operações de arquivo transacional. Para obter mais informações sobre fluxos de arquivos SQL, consulte https://technet.microsoft.com/library/bb933993.aspx.

O TxF é um conjunto complexo e nuances de APIs que não são comumente usadas por aplicativos de terceiros. Com a possibilidade de que essas APIs possam não estar disponíveis em versões futuras do Windows e o fato de haver meios alternativos mais simples para alcançar muitos dos cenários para os quais o TxF foi desenvolvido, a Microsoft recomenda fortemente que os desenvolvedores investiguem esses meios alternativos em vez de criar uma dependência do TxF em seus aplicativos.