Доступ к файлам с помощью API-интерфейсов файла ввода-вывода
Описание работы файловой системы ввода-вывода с таблицами FileTable.
В этом разделе
Необходимо...
Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable
Создание файлов и каталогов в таблице FileTable
Чтение файлов и каталогов в таблице FileTable
Обновление файлов и каталогов в таблице FileTable
Удаление файлов и каталогов в таблице FileTable
Дополнительные сведения
Поддерживаемые операции файловой системы
Дополнительные соображения при доступе файлового ввода-вывода к таблицам FileTable
Использование имен виртуальной сети для групп доступности AlwaysOn
Частичные обновления
Семантика транзакций
Управление параллелизмом
Триггеры
Функции файловой системы, поддерживаемые в таблицах FileTable
Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable
Предполагается, что таблицы FileTable в первую очередь будут использоваться через файловую систему Windows и API-интерфейсы файлового ввода-вывода. Таблицы FileTable поддерживают нетранзакционный доступ с помощью широкого набора API-интерфейсов файлового ввода-вывода.
Доступ API-интерфейса файлового ввода-вывода обычно начинается с получения логического UNC-пути к файлу или каталогу. Для получения логического пути к файлу или каталогу приложения могут использовать инструкцию Transact-SQL с функцией GetFileNamespacePath (Transact-SQL). Дополнительные сведения см. в разделе Работа с каталогами и путями в таблицах FileTable.
Затем приложение использует этот логический путь для получения дескриптора файла или каталога и совершения каких-либо действий с объектом. Путь может быть передан какой-либо из поддерживаемых функций API файловой системы, например CreateFile() или CreateDirectory(), для создания или открытия файла и получения дескриптора. Затем дескриптор может использоваться для потоковой передачи данных, перечисления или упорядочивания каталогов, получения или задания атрибутов файлов, удаления файлов или каталогов и т. д.
[В НАЧАЛО]
Создание файлов и каталогов в таблице FileTable
Файл или каталог в таблице FileTable можно создать путем вызова таких API-интерфейсов файлового ввода-вывода, как CreateFile или CreateDirectory.
Поддерживаются все флаги создания назначения, режимы совместного использования и режимы доступа. Поддерживаются создание, удаление и изменение файлов на месте. Также поддерживаются обновления пространства имен файлов, то есть операции создания, удаления, переименования и перемещения каталогов.
Создание нового файла или каталога соответствует созданию новой строки в базовой таблице FileTable.
Для файлов потоковые данные хранятся в столбце file_stream, в то время как для каталогов этот столбец содержит значение null.
Для файлов столбец is_directory содержит значение false. Для каталогов этот столбец содержит значение true.
Совместный и одновременный доступ действуют, если несколько одновременных операций ввода-вывода или операций Transact-SQL обращаются к одному и тому же файлу или каталогу в иерархии.
[В НАЧАЛО]
Чтение файлов и каталогов в таблице FileTable
Для всех операций файлового ввода-вывода (для потоковых данных и данных атрибутов) уровень изоляции для данных в SQL Server имеет значение READ COMMITTED.
[В НАЧАЛО]
Запись и обновление файлов и каталогов в таблице 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
Capability |
Поддержка |
Комментарии |
---|---|---|
Операционные блокировки |
Да |
Поддерживаются операционные блокировки уровня 2, уровня 1, пакетные операционные блокировки и операционные блокировки фильтров. |
Расширенные атрибуты |
Нет |
|
Точки повторного синтаксического анализа |
Нет |
|
Постоянные ACL |
Нет |
|
Именованные потоки |
Нет |
|
Разреженные файлы |
Да |
Разреженность можно задавать только для файлов, она влияет на способ хранения потока данных. Поскольку данные FILESTREAM хранятся на томах NTFS, функции FileTable поддерживают разреженные файлы, перенаправляя запросы в файловую систему NTFS. |
Сжатие |
Да |
|
Шифрование |
Да |
|
TxF |
Нет |
|
Идентификаторы файлов |
Нет |
|
Идентификаторы объектов |
Нет |
|
Символические ссылки |
Нет |
|
Жесткие связи |
Нет |
|
Краткие имена |
Нет |
|
Уведомления об изменении каталога |
Нет |
|
Блокировка диапазона байтов |
Да |
Запросы блокировки диапазона байтов передаются в файловую систему NTFS. |
Файлы, отображенные в памяти |
Нет |
|
Отмена ввода-вывода |
Да |
|
Безопасность |
Нет |
Принудительно применяются настройки безопасности уровня общего ресурса Windows и уровня таблицы или столбца SQL Server. |
Журнал USN |
Нет |
Изменения метаданных для файлов и каталогов в таблице FileTable являются операциями DML в базе данных SQL Server. Поэтому они записываются в соответствующий файл журнала базы данных. Однако они не регистрируются в журнале USN файловой системы NTFS (за исключением изменения размера). Для сбора подобных данных можно использовать функции отслеживания изменений в SQL Server. |
[В НАЧАЛО]
См. также
Основные понятия
выполнить загрузку файлов в таблицу FileTables
Работа с каталогами и путями в таблицах FileTable
Доступ к таблицам FileTable с помощью Transact-SQL
Инструкции FileTable языка DDL, функции, хранимые процедуры и представления