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