Поделиться через


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

Описание работы файловой системы ввода-вывода с таблицами 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

Для всех операций файлового ввода-вывода (для потоковых данных и данных атрибутов) уровень изоляции для данных в 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, функции, хранимые процедуры и представления