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


Когда следует использовать транзакционный NTFS

Приложение может использовать транзакционный NTFS (TxF) для сохранения целостности данных на диске во время непредвиденных ошибок. Как правило, приложение должно рассмотреть возможность использования TxF, если приложение очищает файлы и использует другие методы для поддержания целостности данных. TxF может работать лучше и упростить код обработки ошибок приложения, одновременно улучшая восстановление ошибок и надежность. В следующих разделах этого раздела приведены примеры сценариев использования TxF.

Обновление файла

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

TxF упрощает для приложения защиту операций обновления файлов от сбоев системы или приложения. Чтобы безопасно обновить файл, приложение открывает файл в режиме транзакций, вносит необходимые обновления, а затем фиксирует транзакцию. Если во время обновления файла происходит сбой системы или приложения, TxF автоматически восстанавливает файл до состояния, которое было до начала обновления файла, что позволяет избежать повреждения файла.

Многофайловые Обновления

TxF еще более важен, когда одна логическая операция влияет на несколько файлов. Например, если вы хотите использовать средство для переименования одной из СТРАНИЦ HTML или ASP на веб-сайте, то хорошо спроектированный инструмент также исправит все ссылки для использования нового имени файла. Однако сбой во время этой операции оставляет веб-сайт в несогласованном состоянии, при этом некоторые ссылки по-прежнему ссылаются на старое имя файла. Делая операцию переименования файла и операцию исправления связи одной транзакцией, TxF гарантирует, что переименование файла и исправление ссылки будут успешными или неудачными как одна операция.

Согласованные параллельные Обновления

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

Приложение может использовать эту функцию, чтобы позволить клиентам просматривать файлы, пока другие клиенты вносят обновления. Например, транзакционный веб-сервер может предоставлять единое согласованное представление файлов, в то время как другое средство одновременно обновляет эти файлы.

Примечание

TxF не поддерживает одновременные обновления несколькими модулями записи в разных транзакциях. TxF поддерживает только один модуль записи с несколькими параллельными и согласованными средствами чтения.

 

Координация с другими диспетчерами ресурсов с транзакциями

Транзакции, используемые с файловыми системами с транзакциями, также могут использоваться с реестром транзакций. Обновления к файлу и реестру согласовываются с одной транзакцией.

С помощью транзакций координатора распределенных транзакций (DTC) или System.Transactions обновления, внесенные в SQL, MSMQ и другие транзакционные ресурсы, можно координировать с обновлениями транзакционных файлов. Дополнительные сведения см. в разделе IKernelTransaction DTC.

Неподдерживаемые сценарии

TxF не поддерживает следующие сценарии транзакций:

  • Транзакции на томах сети, например в общих папках. Протоколы CIFS/SMB не поддерживают TxF.
  • Транзакции в любой файловой системе, отличной от NTFS.
  • Транзакции операций с файлами, кэшируемыми путем кэширования на стороне клиента.
  • Доступ к файлам с помощью идентификаторов объектов.
  • Любой общий сценарий записи.
  • Любая ситуация, когда файл открывается в течение длительного периода времени (дней или недель).