WinFS

WinFS (сокращение от англ. Windows Future Storage)[1] — кодовое название отменённого[2] проекта системы хранения и управления данными на базе реляционных баз данных, разрабатывавшегося компанией Microsoft и впервые продемонстрированного в 2003 году. Предполагалось, что WinFS станет расширенной подсистемой хранения для операционной системы Microsoft Windows, обеспечивающей долговременную сохранность и управление структурированными, полуструктурированными и неструктурированными данными.

WinFS включает реляционную базу данных для хранения информации и позволяет хранить любые типы данных при условии наличия чётко определённой схемы для типа данных. Отдельные элементы данных могут быть связаны между собой — эти связи либо определяются системой автоматически на основе некоторых атрибутов, либо задаются явно пользователем. Благодаря чётко определённым схемам приложений возможно повторное использование данных, а с помощью связей данные могут быть эффективно организованы и извлечены. Понимание структур и смыслового содержания информации системой позволяет выполнять сложные запросы для поиска и агрегации данных.

Хотя WinFS и обеспечивает общий механизм работы с типами данных, приложения всё равно должны быть реализованы с учётом необходимости отображения разных типов данных — универсальное приложение для работы со всеми типами WinFS не предполагалось. В 2003 году на конференции Professional Developers Conference вместе с презентацией WinFS было выпущено концептуальное видео IWish[3], демонстрировавшее возможные интерфейсы приложений, использующих единый типовой механизм.

WinFS позиционировалась как одна из ключевых технологий Longhorn — следующего поколения Windows. Позже было решено выпустить WinFS отдельно уже после выхода Windows Vista, однако в июне 2006 года эти планы были отменены[4], а отдельные компоненты проекта были перенесены в ADO.NET и Microsoft SQL Server[5].

Мотивация

Большинство файловых систем, таких как NTFS (используемая в современных версиях Windows), хранят объекты просто как поток байтов и практически не содержат информации о структуре и содержании данных в файлах. Обычно файлы могут быть организованы лишь через структуру каталогов[6][7], что ограничивает способы поиска и использования этих данных.

Такое устройство файловых систем приводит к тому, что приложения нередко используют свои закрытые форматы файлов, затрудняя обмен данными между различными программами и работу с несколькими типами информации[8]. Даже использование стандартных форматов не решает проблему универсально, так как не гарантирует их поддержку всеми программами. Данные с жёстко заданными схемами (например, XML, реляционные БД) позволяют упростить обмен благодаря стандартизированной структуре[9].

Файловые системы также могут искать информацию только по имени файла[8], что ограничивает их функциональность. Использование атрибутов — метаданных файлов (тип: документ, изображение, музыка, автор и др.) — улучшает поиск[6]. Desktop search-решения идут дальше, извлекая метаданные из файлов через фильтры и индексируя их содержимое[6]. Однако ни добавление атрибутов, ни индексирование не решает задачу поиска и управления связанными данными — структура отношений между элементами (например, «все телефоны людей, живущих в Акапулько, чьи фотографии есть у меня более 100 раз и от кого я получал письма за месяц») остаётся невыраженной[6][7]. WinFS была призвана обеспечить схему данных и инфраструктуру исполнения для хранения данных и отношений между ими при приемлемой производительности.

Общее описание

WinFS «нативно» различает типы данных, такие как фотография, электронная почта, документ, аудио, видео, календарь, контакт, а не хранит их как поток неструктурированных байтов (как традиционные файловые системы). Данные хранятся как экземпляры определённых типов, структура которых описывается свойствами. Например, резюме — это тип, имеющий поля Имя, Образование, Опыт работы; каждое свойство может быть простым (строка, число, дата) или сложным типом (контакт)[8][10]. Различные экземпляры данных могут быть связаны, например, документ и контакт связываются через отношение «Автор». Связи реализуются как свойства, а сами отношения WinFS может строить автоматически или вручную[7].[10] Благодаря схемам и типизированным отношениям приложения могут использовать данные и их связи без написания специальных парсеров[8]; WinFS предоставляет API, реализующее доступ к данным в виде объектов .NET с соответствующими свойствами[6]. Таким образом, обеспечивается доступ к универсальному репозиторию данных и минимизируется их дублирование[11].

Одной из сильных сторон WinFS считался мощный механизм поиска: можно проводить сложные запросы по отношениям между элементами, используя структурированное описание объектов и связей между ними.

WinFS поддерживает схемы для структурированных (XML, реляционные базы), полуструктурированных (например, изображения с метаданными) и неструктурированных данных (файлы). Неструктурированные данные хранятся как файлы, а метаданные — в структурированном хранилище[10]. Для управления используется реляционная база — схема данных автоматически отображается в структуру таблиц и связей SQL Server (метод объектно-реляционного отображения); по умолчанию предоставляются маппинги для XML и .NET-схем[6][10]

История

Разработка WinFS — продолжение идей, заложенных ещё в начале 1990-х. Первый проект — Object File System для Cairo, — был отменён[12].. Позже, при разработке COM, планировалась Storage+ на SQL Server 8.0, а затем — Relational File System (RFS) для SQL Server 2000[12]; оба проекта также не были реализованы. Эти идеи стали базой для WinFS[12].

WinFS первоначально планировалась как часть Windows Vista[13]. В 2003-м на англ. Professional Developers Conference была показана предварительная версия, но из-за проблем с производительностью её исключили из состава Vista[12]. В августе 2005 года для подписчиков MSDN была доступна beta-версия WinFS для Windows XP, требовавшая .NET Framework[14]. Позднее бета-версии корректировались под .NET Framework 2.0 и дополнялись возможностями интеграции с Windows Desktop Search и ADO.NET. В июне 2006 года было объявлено о прекращении самостоятельного развития WinFS, а ключевые решения были внедрены в другие продукты компании[4][15] — например, функции для работы с метаданными, навигацией и поиском были реализованы в Windows Vista[16][17]. Элементы WinFS легли в основу ADO.NET Entity Framework, поддержки неструктурированных данных в SQL Server 2008, а также компонентов Microsoft Sync Framework[5].

В 2013 году Билл Гейтс назвал свёртывание WinFS своим самым большим разочарованием в Microsoft и отметил, что идея опередила время и рано или поздно получит развитие.

Технические особенности

Архитектура

undefined

WinFS использует реляционный движок на основе Microsoft SQL Server 2005 с поддержкой механизма файлового поля FILESTREAM[18]. Базы данных WinFS хранятся как файлы .MDF в системном каталоге System Volume Information, внутри отдельных папок для каждого хранилища[19].

В нижнем уровне стека находится WinFS Core, отвечающий за взаимодействие с файловой системой и адресацию[8]. Надстройки включают сервисы синхронизации, правила и службы блокировки. Сервис функционирует как отдельная служба Windows с тремя процессами: WinFS.exe (хранилище данных), WinFSSearch.exe (поисковый движок) и WinFPM.exe (обработка взаимодействия с файловой системой)[20].

Доступ к возможностям обеспечивается через .NET-API, с помощью которых приложения могут определять собственные типы данных, отношения, работать с данными и выполнять сложные поисковые запросы[6][8].

Хранилище данных

Данные хранятся во внутренних реляционных хранилищах (stores), доступных как виртуальные каталоги[12]. Любое приложение может сохранить данные с метаданными, схемой и отношениями. Система способна самостоятельно обнаруживать отношения между объектами по совпадающим атрибутам[21]. Для интерпретации пользовательских форматов требуется соответствующая схема[6].

Можно создавать несколько хранилищ на одном ПК[22]; по умолчанию создаётся «DefaultStore». Доступ к данным ведётся через виртуальные объекты ОС, аналогично виртуальным папкам.

Модель данных и типизация

undefined

WinFS реализует собственную иерархию объектов: Item, Relationship, ScalarType и NestedType[6]. Каждый объект несёт схему, определяющую его структуру (на основе XML)[6].

Можно определять пользовательские типы путём наследования и композиции — схема определяет обязательные и дополнительные поля[23]. Объекты и их связи хранятся в таблицах SQL Server; отношения реализуются через внешние ключи и специальные типы ссылок. Для доступа к данным и отношениям в API используются свойства IncomingRelationships и OutgoingRelationships.

Связи (Relationships)

undefined

WinFS поддерживает различные виды отношений между объектами: Holding (владение), Reference (ссылка), Embedding (вложенность)[6]. Связи и правила могут задаваться программно или вручную пользователем. Для визуализации структуры связей был создан WinFS Item Browser.

Правила (Rules)

WinFS поддерживает механизмы автоматического выполнения действий по наступлению определённых событий — правила (Rules)[24]. Можно создавать правила, связывающие объекты при выполнении определённых условий, например, определённого значения поля. Допускается реализация интеграции с внешними приложениями.

RAV (Rich Application Views)

WinFS позволяет создавать виртуальные представления (Rich Application Views), агрегирующие различные виды данных по заданной схеме. RAV могут включать сложные вложения и коллекции объектов.

Контроль доступа

WinFS использует средства аутентификации Windows — разграничение доступа возможно как на уровне репозитория, так и отдельных объектов. Поддерживаются дискреционные списки безопасности NT. В Windows Vista реализована дополнительная многоуровневая модель «integrity level».

Извлечение и поиск данных

undefined

Основной способ извлечения данных — выполнение запросов через API на базе языка OPath[8] с возвращением коллекции объектов .NET для дальнейшей обработки[23]. Связанные элементы доступны через специальные свойства отношений.

Благодаря этому поддерживается гибкая организация данных и реализация альтернативных (не только иерархических) структур для пользователя: элемент может входить в несколько папок или быть объединён с другими объектами по смысловому признаку.

Запросы и язык OPath

WinFS API использует классы ItemContext и ItemSearcher для управления и поиска. Поиск ведётся по типу, схеме и условиям на языке OPath[25]; доступны сложные условия (булевы, диапазоны, LIKE, GROUP BY, ORDER BY и др.).

Уведомления, агент информации

WinFS реализует механизм подписки на события о изменениях (Notifications) и возможность автоматической обработки событий (Information Agent) — например, связывание новых фотографий с календарными событиями, фильтрация по сложным критериям, оповещения на другие устройства.

Обмен и синхронизация данных

WinFS поддерживает совместное использование данных приложениями и автоматическую синхронизацию между несколькими хранилищами, включая удалённые[26]. API позволяет интегрировать данные с обычными файловыми системами, работающими в WinFS режиме.

Службы синхронизации реализованы по одноранговому принципу; поддерживается автоматическая и ручная сверка, разрешение конфликтов и обновление схем.

Программная поддержка

Подключение к оболочке (Shell namespace)

WinFS Beta 1 содержит расширение для оболочки Windows Shell, позволяющее видеть хранилища WinFS как объекты верхнего уровня и копировать файлы обычными средствами. При импорте используются плагины-анализаторы (Importer), которые создают схемы для новых типов[26].

Microsoft Rave

Программное обеспечение Microsoft Rave, входившее в состав WinFS Beta 1, обеспечивало синхронизацию между несколькими WinFS-хранилищами, разрешение конфликтов и поддержку топологии «полная сетка» и «центральный узел». Для передачи данных использовались одноранговые протоколы.

StoreSpy

undefined

В состав WinFS Beta 1 входила программа StoreSpy[27], показывавшая иерархию объектов WinFS (Items, Relationships, MultiSet, Nested Elements, Extensions и др.) с возможностью поиска и визуализации правил связей.

Браузер типов (Type Browser)

WinFS Type Browser[28] позволял визуализировать типы данных, их свойства, методы и схему наследования.

OPather

В состав пакета входил инструмент OPather[29] — графический редактор для создания запросов OPath с интерактивной подсказкой и возможностью визуализации результатов.

Project «Orange»

Существовал и проект визуализации данных — Project Orange на основе Windows Presentation Foundation, который оставался концептом.

Примечания

Литература