Доступ к таблицам FileTable с помощью API-интерфейсов ввода-вывода файлов

Применимо к:SQL Server

Описание работы файловой системы ввода-вывода с таблицами FileTable.

Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable

Предполагается, что таблицы FileTable в первую очередь будут использоваться через файловую систему Windows и API-интерфейсы файлового ввода-вывода. Таблицы FileTable поддерживают нетранзакционный доступ с помощью широкого набора API-интерфейсов файлового ввода-вывода.

  1. Доступ API-интерфейса файлового ввода-вывода обычно начинается с получения логического UNC-пути к файлу или каталогу. Приложения могут использовать инструкцию Transact-SQL с функцией GetFileNamespacePath (Transact-SQL), чтобы получить логический путь к файлу или каталогу. Дополнительные сведения см. в статье Work with Directories and Paths in FileTables.

  2. Затем приложение использует этот логический путь для получения дескриптора файла или каталога и совершения каких-либо действий с объектом. Путь может быть передан какой-либо из поддерживаемых функций API файловой системы, например CreateFile() или CreateDirectory(), для создания или открытия файла и получения дескриптора. Затем дескриптор может использоваться для потоковой передачи данных, перечисления или упорядочивания каталогов, получения или задания атрибутов файлов, удаления файлов или каталогов и т. д.

Создание файлов и каталогов в таблице FileTable

Файл или каталог в таблице FileTable можно создать путем вызова таких API-интерфейсов файлового ввода-вывода, как CreateFile или CreateDirectory.

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

  • Создание нового файла или каталога соответствует созданию новой строки в базовой таблице FileTable.

  • Для файлов потоковые данные хранятся в столбце file_stream , в то время как для каталогов этот столбец содержит значение null.

  • Для файлов столбец is_directory содержит значение false. Для каталогов этот столбец содержит значение true.

  • Совместное использование и параллелизм доступа применяются, если несколько параллельных операций ввода-вывода файлов или операций Transact-SQL влияют на один файл или каталог в иерархии.

Чтение файлов и каталогов в таблице FileTable

Семантика изоляции read Committed применяется в SQL Server для всех операций доступа к файлам ввода-вывода в потоке и данных атрибутов.

Запись и обновление файлов и каталогов в таблице FileTable

  • Все операции записи и обновления файлового ввода-вывода в таблице FileTable являются нетранзакционными. То есть транзакция SQL Server не привязана к этим операциям, и гарантии ACID не предоставляются.

  • Для таблицы FileTable поддерживаются все потоковые обновления и обновления на месте при файловом вводе-выводе.

  • При обновлении данных FILESTREAM или атрибутов с помощью API-интерфейсов файлового ввода-вывода обновляются соответствующие столбцы file_stream и столбцы атрибутов файлов в таблицах FileTable.

Удаление файлов и каталогов в таблице FileTable

При удалении файла или каталога применяется вся семантика API-интерфейсов файлового ввода-вывода Windows.

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

  • При удалении файла или каталога удаляется соответствующая строка из таблицы FileTable. Это эквивалентно удалению строки с помощью операции Transact-SQL.

Поддерживаемые операции файловой системы

Таблицы FileTable поддерживают API-интерфейсы файловой системы, связанные со следующими операциями файловой системы:

  • Управление каталогом

  • Управление файлами

Таблицы FileTable не поддерживают следующие операции:

  • Управление дисками

  • Управление томами

  • Поддержка транзакций в NTFS

Дополнительные соображения при доступе файлового ввода-вывода к таблицам FileTable

Использование имен виртуальной сети для групп доступности AlwaysOn

Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит к группе доступности AlwaysOn, то любой доступ к данным FILESTREAM или FileTable через API-интерфейсы файловой системы должен осуществляться по именам виртуальной сети, а не по именам компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).

Частичные обновления

Дескриптор, полученный для данных FILESTREAM в FileTable с помощью функции GetFileNamespacePath (Transact-SQL), можно использовать для создания на месте частичных обновлений содержимого FILESTREAM. Это отличается от транзакционного доступа к данным FILESTREAM с помощью дескриптора, полученного путем вызова OpenSQLFILESTREAM() и передачи явного контекста транзакции.

Семантика транзакций

При доступе к файлам в таблице FileTable с помощью API-интерфейсов файлового ввода-вывода эти операции не связаны с какими-либо пользовательскими транзакциями и имеют следующие дополнительные характеристики.

  • Поскольку нетранзакционный доступ к данным FILESTREAM в таблице FileTable не связан с какой-либо транзакцией, у него нет какой-либо особой семантики изоляции. Однако SQL Server может использовать внутренние транзакции для принудительной блокировки или семантики параллелизма в данных FileTable. Любые внутренние транзакции данного типа осуществляется с изоляцией read-committed.

  • Для таких нетранзакционных операций с данными FILESTREAM нет гарантий ACID. Гарантии согласованности сходны с таковыми при обновлении файлов, выполняемым приложениями в файловой системе.

  • Эти изменения нельзя откатить.

Однако к столбцу FILESTREAM в таблице FileTable также можно получить транзакционный доступ FILESTREAM путем вызова OpenSqlFileStream(). Этот вид доступа может быть полностью транзакционным и будет поддерживать все уровни транзакционной согласованности, предлагаемые в настоящий момент.

Управление параллелизмом

SQL Server применяет управление параллелизмом для доступа к FileTable среди приложений файловой системы, а также между приложениями файловой системы и приложениями Transact-SQL. Такое управление параллелизмом обеспечивается путем создания соответствующих блокировок для строк FileTable.

Триггеры

Создание, изменение и удаление файлов, каталогов или их атрибутов в файловой системе приведет к соответствующим операциям вставки, обновления и удаления в таблице FileTable. Все связанные триггеры DML Transact-SQL запускаются в рамках этих операций.

Функции файловой системы, поддерживаемые в таблицах FileTable

Возможность Поддерживается Комментарии
Операционные блокировки Да Поддерживаются операционные блокировки уровня 2, уровня 1, пакетные операционные блокировки и операционные блокировки фильтров.
Расширенные атрибуты No
Точки повторного синтаксического анализа No
Постоянные ACL No
Именованные потоки No
Разреженные файлы Да Разреженность можно задавать только для файлов, она влияет на способ хранения потока данных. Поскольку данные FILESTREAM хранятся на томах NTFS, функции FileTable поддерживают разреженные файлы, перенаправляя запросы в файловую систему NTFS.
Сжатие Да
Шифрование Да
TxF No
Идентификаторы файлов No
Идентификаторы объектов No
Символические ссылки No
Жесткие связи No
Краткие имена No
Уведомления об изменении каталога No
Блокировка диапазона байтов Да Запросы блокировки диапазона байтов передаются в файловую систему NTFS.
Файлы, отображенные в памяти No
Отмена ввода-вывода Да
Безопасность No Безопасность на уровне общего ресурса Windows и безопасность на уровне таблицы SQL Server и уровня столбцов применяются.
Журнал USN No Изменения метаданных в файлах и каталогах в FileTable — это операции DML в базе данных SQL Server. Поэтому они записываются в соответствующий файл журнала базы данных. Однако они не регистрируются в журнале USN файловой системы NTFS (за исключением изменения размера).

Возможности отслеживания изменений SQL Server можно использовать для сбора аналогичных сведений.

См. также

Загрузка файлов в таблицы FileTable
Work with Directories and Paths in FileTables
Доступ к таблицам FileTable с помощью Transact-SQL
Инструкции FileTable языка DDL, функции, хранимые процедуры и представления