Когда следует использовать NTFS для транзакций
Приложение может использовать транзакционные NTFS (TxF) для сохранения целостности данных на диске во время непредвиденных ошибок. Как правило, приложение должно рассмотреть возможность использования TxF, если приложение очищает файлы и использует другие методы для поддержания целостности данных. TxF может повысить эффективность и упростить код обработки ошибок приложения при улучшении восстановления ошибок и надежности. В следующих разделах этого раздела приведены примеры сценариев использования TxF.
Обновление файла
Обновление файла является обычной и обычно простой операцией. Однако если система или приложение завершается сбоем во время обновления информации на диске, результат может быть катастрофическим, так как данные пользователя могут быть повреждены из-за операции обновления файлов, завершенной частично. Надежные приложения часто выполняют сложные последовательности копирования и переименования файлов, чтобы гарантировать, что данные не повреждены в случае сбоя системы.
TxF упрощает работу приложения для защиты операций обновления файлов от сбоя системы или приложения. Чтобы безопасно обновить файл, приложение открывает файл в режиме транзакций, делает необходимые обновления, а затем фиксирует транзакцию. Если система или приложение завершается сбоем во время обновления файла, TxF автоматически восстанавливает файл в состояние, которое оно было до начала обновления файла, что позволяет избежать повреждения файлов.
Обновления для нескольких файлов
TxF еще более важен, если одна логическая операция влияет на несколько файлов. Например, если вы хотите использовать средство для переименования одной из страниц HTML или ASP на веб-сайте, хорошо разработанный инструмент также исправит все ссылки на использование нового имени файла. Однако сбой во время этой операции оставляет веб-сайт в несогласованном состоянии, при этом некоторые ссылки по-прежнему ссылаются на старое имя файла. Объединяя операции переименования файла и исправления ссылки в одну транзакцию, TxF гарантирует, что переименование файла и исправление ссылки выполнится успешно или завершится ошибкой как единая операция.
Согласованные параллельные обновления
TxF изолирует одновременные транзакции. Если приложение открывает файл для чтения транзакций, а другое приложение имеет тот же файл, открытый для обновления транзакций, TxF изолирует эффекты двух транзакций друг от друга. Другими словами, средство чтения транзакций всегда просматривает одну, согласованную версию файла, даже если этот файл находится в процессе обновления другой транзакцией.
Приложение может использовать эту функцию, чтобы пользователи могли просматривать файлы, а другие клиенты делают обновления. Например, веб-сервер транзакций может предоставлять единое, согласованное представление файлов, а другое средство одновременно обновляет эти файлы.
Заметка
TxF не поддерживает обновление одновременно несколькими писателями в разных транзакциях. TxF поддерживает только одного писателя с несколькими одновременными и консистентными читателями.
Координация с другими управляющими ресурсами, участвующими в транзакциях
Транзакции, используемые с транзакционными файловыми системами, также могут использоваться с транзакционным реестром. Обновления файла и реестра координируются с одной транзакцией.
С помощью транзакций координатора распределённых транзакций (DTC) или System.Transactions можно скоординировать изменения в SQL, MSMQ и других транзакционных ресурсах с обновлениями файлов в транзакциях. Дополнительные сведения см. в IKernelTransactionDTC.
Неподдерживаемые сценарии
TxF не поддерживает следующие сценарии транзакций:
- Транзакции на сетевых ресурсах, например, на общих папках. TxF не поддерживается протоколами CIFS/SMB.
- Транзакции в любой файловой системе, отличной от NTFS.
- Транзакционированные операции с файлами, кэшируемыми с помощью кэширования на стороне клиента.
- Доступ к файлам с помощью идентификаторов объектов.
- Любой сценарий совместного использования для авторов.
- Любая ситуация, когда файл открывается в течение длительного периода времени (дней или недель).