Partilhar via


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

TxF foi introduzido com o Windows Vista como um meio de introduzir transações de arquivos atômicos para o Windows. Ele permite que os desenvolvedores do Windows tenham atomicidade transacional para operações de arquivos em transações com um único arquivo, em transações envolvendo vários arquivos e em transações que abrangem várias fontes – como o Registro (através do TxR) e bancos de dados (como SQL). Embora o TxF seja um poderoso conjunto de APIs, tem havido um interesse extremamente limitado dos desenvolvedores nessa plataforma de API desde 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 substituir as 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 uma maioria maior de clientes. A próxima seção descreve métodos alternativos de exemplo para obter resultados semelhantes aos do TxF 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 aplicativos que não são atendidos pelo TxF. Discutimos aqui algumas alternativas sugeridas para usos comuns do TxF para os desenvolvedores considerarem. Note-se que esta lista não é exaustiva nem completa.

Aplicativos que atualizam um único arquivo com dados "semelhantes a documentos"

Muitos aplicativos que lidam com dados "semelhantes a documentos" tendem a carregar o documento inteiro 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 são aplicadas, pois um estado inconsistente tornaria 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 o ReplaceFile API.

Aplicativos que executam 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 alcançado por meio de um aplicativo instalador, como o Windows Installer. Para obter mais informações sobre o Windows Installer, consulte Windows Installer.

Aplicativos gerenciando um conjunto de dados estruturados

Muitos aplicativos gerenciam algum conjunto de estruturas de dados proprietárias de vários tipos como um meio de armazenar dados. Um desafio significativo para esses aplicativos é o processo de manter a integridade dos ponteiros/referências internos se ocorrer uma falha durante uma operação de atualização. Criar o mecanismo para isso é realmente um "problema difícil", e, portanto, a maioria dos aplicativos dependerá de um verdadeiro servidor de banco de dados 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 (Mecanismo de Armazenamento Extensível) no Windows para permitir que os aplicativos executem operações de atualização e recuperação de dados transacionados. Para obter mais informações sobre o mecanismo de armazenamento extensível (ESE), consulte https://msdn.microsoft.com/library/gg269259.aspx.
  • Para aplicativos que exigem um provedor de banco de dados mais poderoso, robusto e escalável, é recomendável que os clientes considerem o uso do recurso Filestream disponível com o Microsoft SQL Server. Para obter mais informações sobre SQL Filestreams, 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

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

TxF é um conjunto complexo e sofisticado de APIs que não são habitualmente usadas por aplicativos de terceiros. Com a possibilidade de que essas APIs podem não estar disponíveis em versões futuras do Windows, e o fato de que existem 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.