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-схем[10][6]
История
Разработка 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 и отметил, что идея опередила время и рано или поздно получит развитие.
Технические особенности
Архитектура
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». Доступ к данным ведётся через виртуальные объекты ОС, аналогично виртуальным папкам.
Модель данных и типизация
WinFS реализует собственную иерархию объектов: Item, Relationship, ScalarType и NestedType[6]. Каждый объект несёт схему, определяющую его структуру (на основе XML)[6].
Можно определять пользовательские типы путём наследования и композиции — схема определяет обязательные и дополнительные поля[23]. Объекты и их связи хранятся в таблицах SQL Server; отношения реализуются через внешние ключи и специальные типы ссылок. Для доступа к данным и отношениям в API используются свойства IncomingRelationships и OutgoingRelationships.
Связи (Relationships)
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».
Извлечение и поиск данных
Основной способ извлечения данных — выполнение запросов через 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
В состав 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, который оставался концептом.
Примечания
- ↑ Leaked Windows hints at changes to come. ZDNet. CBS Interactive (30 сентября 2007). Дата обращения: 23 июня 2024. Архивировано 30 сентября 2007 года.
- ↑ Schofield, Jack. Why WinFS had to vanish (англ.), The Guardian, Guardian News and Media (29 июня 2006). Дата обращения: 23 июня 2024.
- ↑ IWish Concept Video. Microsoft. Дата обращения: 23 июня 2024. Архивировано 2 июня 2006 года.
- ↑ 1 2 Quentin Clark. WinFS Update. What's in Store. MSDN Blogs (23 июня 2006). Дата обращения: 23 июня 2024.
- ↑ 1 2 Quentin Clark. Where is WinFS now? Дата обращения: 23 июня 2024. Архивировано 17 мая 2008 года.
- ↑ 1 2 3 4 5 6 7 8 9 10 11 Shawn Wildermuth. A Developer's Perspective on WinFS: Part 1. MSDN (30 июня 2006). Дата обращения: 23 июня 2024.
- ↑ 1 2 3 Vijay Bangaru. Unify, Organize, Explore, and Innovate. Oh my! (Part 2). WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 9 июня 2007 года.
- ↑ 1 2 3 4 5 6 7 Sean Grimaldi. The WinFS Files: Divide et Impera. MSDN (13 сентября 2006). Дата обращения: 23 июня 2024.
- ↑ Thomas Rizzo. WinFS 101: Introducing the New Windows File System. MSDN (13 сентября 2006). Дата обращения: 23 июня 2024.
- ↑ 1 2 3 4 WinFS on The .NET Show. Microsoft. Дата обращения: 23 июня 2024. Архивировано 5 января 2009 года.
- ↑ Vijay Bangaru. Unify, Organize, Explore, and Innovate. Oh my! (Part 1). WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 8 июля 2007 года.
- ↑ 1 2 3 4 5 Paul Thurrott. Windows Storage Foundation (WinFS) Preview. Дата обращения: 23 июня 2024. Архивировано 2 июля 2007 года.
- ↑ Cath Everett. Will Longhorn be worth the pain? ZDNet. Дата обращения: 23 июня 2024. Архивировано 12 марта 2010 года.
- ↑ WinFS for Developers. NTFS.com. Дата обращения: 23 июня 2024.
- ↑ Quentin Clark. Update to the Update. WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 3 июля 2007 года.
- ↑ WinFS: The Windows File System (Microsoft Access 2002 Technical Articles). MSDN. Microsoft (октябрь 2003). Дата обращения: 23 июня 2024. Архивировано 21 декабря 2003 года.
- ↑ Windows Vista Product Guide (DOCX) 44–51. Microsoft (2006). Дата обращения: 23 июня 2024. Архивировано 1 июля 2011 года.
- ↑ Nate Mook. MS Explains WinFS, Releases Beta 1 (англ.). BetaNews (29 августа 2005). Дата обращения: 23 июня 2024.
- ↑ Chaloupov, Alexei. WinFS Architecture // WinFS. — 14 марта 2006. — P. 4.
- ↑ Erwyn van der Meer. First Look on WinFS Beta 1. Дата обращения: 23 июня 2024. Архивировано 9 июня 2007 года.
- ↑ Vijay Bangaru. WinFS Mailbox. WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 22 мая 2007 года.
- ↑ Richard Grimes. Revolutionary File Storage System Lets Users Search and Manage Files Based on Content. MSDN Magazine. Дата обращения: 23 июня 2024. Архивировано 27 июня 2007 года.
- ↑ 1 2 Shawn Wildermuth. A Developer's Perspective on WinFS: Part 2. MSDN. Microsoft (июль 2004). Дата обращения: 23 июня 2024.
- ↑ Kati Dimitrova. About WinFS Rules. MSDN. Microsoft. Дата обращения: 23 июня 2024. Архивировано 26 декабря 2008 года.
- ↑ Thomas Rizzo, Sean Grimaldi. An Introduction to "WinFS" OPath. MSDN. Microsoft (18 октября 2004). Дата обращения: 23 июня 2024.
- ↑ 1 2 Neil Padgett. Getting Data Into WinFS with WinFS Synchronization. WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 17 февраля 2007 года.
- ↑ Wei-Meng Lee. WinFS -StoreSpy (7 сентября 2005). Дата обращения: 23 июня 2024.
- ↑ Sanjay Nagamangalam. Visualizing WinFS Types. WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 16 августа 2007 года.
- ↑ Luiz Miranda. Using OPather To Help Write Queries. WinFS Team Blog. Дата обращения: 23 июня 2024. Архивировано 19 ноября 2007 года.
Литература
- WinFS Blog. Дата обращения: 23 июня 2024. Архивировано 24 января 2010 года.
- WinFS at the Microsoft Developer Network. Дата обращения: 23 июня 2024. Архивировано 2 июня 2006 года.
- Channel 9 Videos. Дата обращения: 23 июня 2024.
- WinFS Newsgroup. Дата обращения: 23 июня 2024. Архивировано 14 апреля 2005 года.
- WinFS Beta 1 Preview. Дата обращения: 23 июня 2024.
- WinFS area on NetFXGuide.com. Дата обращения: 23 июня 2024. Архивировано 26 ноября 2006 года.