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


Доступ к таблицам 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

Использование имен виртуальной сети (VNN) с группами доступности Always On

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

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

См. также

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