Доступ к таблицам FileTable с помощью API-интерфейсов ввода-вывода файлов
Область применения: SQL Server
Описание работы файловой системы ввода-вывода с таблицами FileTable.
Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable
Предполагается, что таблицы FileTable в первую очередь будут использоваться через файловую систему Windows и API-интерфейсы файлового ввода-вывода. Таблицы FileTable поддерживают нетранзакционный доступ с помощью широкого набора API-интерфейсов файлового ввода-вывода.
Доступ API-интерфейса файлового ввода-вывода обычно начинается с получения логического UNC-пути к файлу или каталогу. Приложения могут использовать инструкцию Transact-SQL с функцией GetFileNamespacePath (Transact-SQL), чтобы получить логический путь к файлу или каталогу. Дополнительные сведения см. в статье Work with Directories and Paths in FileTables.
Затем приложение использует этот логический путь для получения дескриптора файла или каталога и совершения каких-либо действий с объектом. Путь может быть передан какой-либо из поддерживаемых функций 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, функции, хранимые процедуры и представления