Поделиться через


Альтернативы транзакционной NTFS

Аннотация

Корпорация Майкрософт настоятельно рекомендует разработчикам изучить использование обсуждаемых альтернатив (или в некоторых случаях изучить другие альтернативные варианты), а не использовать платформу API, которая может быть недоступна в будущих версиях Windows.

Знакомство

TxF появился в Windows Vista в качестве средства для внедрения атомарных транзакций файлов в Windows. Это позволяет разработчикам Windows иметь атомарность транзакций для операций с файлами в транзакциях с одним файлом, в транзакциях с несколькими файлами и транзакциях, охватывающих несколько источников, таких как Реестр (через TxR) и базы данных (например, SQL). Хотя TxF является мощным набором API, интерес разработчиков к этой платформе API был крайне ограничен с момента выхода Windows Vista, главным образом из-за её сложности и различных нюансов, которые разработчики должны учитывать как часть процесса разработки приложений. В результате корпорация Майкрософт рассматривает возможность постепенного отказа от использования API TxF в будущей версии Windows, чтобы сосредоточить усилия по разработке и поддержке других функций и API, которые имеют большее значение для большинства клиентов. В следующем разделе описаны примеры альтернативных методов для достижения аналогичных результатов, как TxF для нескольких типов сценариев приложений.

Альтернативные варианты TxF в зависимости от сценария

С описанными выше ограничениями разработчикам следует исследовать альтернативы TxF для сценариев приложений, которые не покрываются TxF. Здесь рассматриваются некоторые предлагаемые альтернативы общим случаям использования TxF для разработчиков. Обратите внимание, что этот список не является ни исчерпывающим, ни полным.

Приложения обновляют один файл с данными, похожими на документ.

Многие приложения, которые имеют дело с данными, похожими на документ, обычно загружают весь документ в память, работают с ним, а затем записывают его обратно, чтобы сохранить изменения. Здесь необходима атомарность: изменения либо полностью применяются, либо не применяются вообще, так как несогласованное состояние приведет к повреждению файла. Распространенный подход заключается в том, чтобы записать документ в новый файл, а затем заменить исходный файл новым. Одним из способов этого является api ReplaceFile.

Приложения, обновляющие несколько файлов и/или улей реестра.

Существует множество приложений, которые должны атомарно выполнять обновление набора файлов и реестра. Этот сценарий чаще всего достигается с помощью приложения установщика, например установщика Windows. Дополнительные сведения о установщике Windows см. в установщике Windows.

Приложения, управляющие набором структурированных данных

Многие приложения управляют некоторыми наборами собственных структур данных различных типов в качестве средства хранения данных. Значительный вызов для этих приложений — это процесс поддержания целостности внутренних указателей и ссылок при сбое во время операции обновления. Создание механизма для этого действительно является "сложной проблемой", и поэтому большинство приложений будут полагаться на истинный сервер базы данных для управления их набором данных.

Ниже приведены два предложения по управлению структурированными данными:

  • Microsoft предоставляет встроенный механизм хранения Extensible Storage Engine (ESE) в операционной системе Windows, чтобы приложения могли выполнять транзакционные операции обновления и извлечения данных. Более подробные сведения о расширяемом ядре хранилища (ESE) см. в https://msdn.microsoft.com/library/gg269259.aspx.
  • Для приложений, которым требуется более мощный, надежный и масштабируемый поставщик баз данных, рекомендуется использовать функцию Filestream, доступную в Microsoft SQL Server. Дополнительные сведения о файловых потоках SQL см. в https://technet.microsoft.com/library/bb933993.aspx.

Приложения с транзакциями с файлами в локальном томе NTFS и таблицах во внешней базе данных SQL

Существуют классы приложений, для которых требуются большие наборы данных, или требуется атомарность транзакций в операции с внешней базой данных и локальным хранилищем. В этом сценарии настоятельно рекомендуется использовать файловые потоки SQL для выполнения транзакционных операций с файлами. Дополнительные сведения о файловых потоках SQL см. в https://technet.microsoft.com/library/bb933993.aspx.

TxF — это сложный и нюансированный набор API, которые часто не используются сторонними приложениями. С возможностью того, что эти API-интерфейсы могут быть недоступны в будущих версиях Windows, и тот факт, что существуют более простые средства для достижения многих сценариев, для которых была разработана TxF, корпорация Майкрософт настоятельно рекомендует разработчикам исследовать эти альтернативные средства вместо создания зависимости от TxF в своих приложениях.