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


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

Описание работы файловой системы ввода-вывода с таблицами FileTable.

В этом разделе

Необходимо...

  • Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable

  • Создание файлов и каталогов в таблице FileTable

  • Чтение файлов и каталогов в таблице FileTable

  • Обновление файлов и каталогов в таблице FileTable

  • Удаление файлов и каталогов в таблице FileTable

Дополнительные сведения

  • Поддерживаемые операции файловой системы

  • Дополнительные соображения при доступе файлового ввода-вывода к таблицам FileTable

    • Использование имен виртуальной сети для групп доступности AlwaysOn

    • Частичные обновления

    • Семантика транзакций

    • Управление параллелизмом

    • Триггеры

  • Функции файловой системы, поддерживаемые в таблицах FileTable

Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable

Предполагается, что таблицы FileTable в первую очередь будут использоваться через файловую систему Windows и API-интерфейсы файлового ввода-вывода. Таблицы FileTable поддерживают нетранзакционный доступ с помощью широкого набора API-интерфейсов файлового ввода-вывода.

  1. Доступ API-интерфейса файлового ввода-вывода обычно начинается с получения логического UNC-пути к файлу или каталогу. Для получения логического пути к файлу или каталогу приложения могут использовать инструкцию Transact-SQL с функцией GetFileNamespacePath (Transact-SQL). Дополнительные сведения см. в разделе Работа с каталогами и путями в таблицах FileTable.

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