Альтернативные варианты использования транзакционных 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 .

Приложения, выполняющие обновления для нескольких файлов и (или) hive реестра

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

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

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

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

  • Корпорация Майкрософт предоставляет папку "Расширяемый модуль служба хранилища( 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 в своих приложениях.