WinFS - WinFS

WinFS (Короче для Windows Future Storage)[1] был кодовое название за отмененный[2] хранение данных и управление системный проект на основе реляционные базы данных, разработан Microsoft и впервые продемонстрирована в 2003 году как усовершенствованная подсистема хранения для Майкрософт Виндоус Операционная система, предназначен для упорство и управление структурированный, полуструктурированный и неструктурированные данные.

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

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

Хотя WinFS и ее схема общих типов позволяют приложению распознавать различные типы данных, приложение все же необходимо закодировать для отображения различных типов данных. Следовательно, это не позволит разработать одно приложение, которое может просматривать или редактировать все типы данных; скорее, WinFS позволяет приложениям понимать структуру всех данных и извлекать информацию, которую они могут использовать в дальнейшем. Когда WinFS была представлена ​​на конференции 2003 г. Конференция профессиональных разработчиков, Microsoft также выпустила видеопрезентацию под названием IWish,[3] показаны макеты интерфейсов, показывающие, как приложения будут предоставлять интерфейсы, использующие преимущества унифицированной системы типов. Концепции, показанные в видео, варьировались от приложений, использующих отношения элементов для динамического предложения параметров фильтрации, до приложений, группирующих несколько связанных типов данных и отображающих их в единой презентации.

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

Мотивация

Много файловые системы найдено на общих операционные системы, в том числе NTFS файловая система, которая используется в современных версиях Microsoft Windows, хранит файлы и другие объекты только как поток байтов, и у вас мало или совсем нет информации о данных, хранящихся в файлах. Такие файловые системы также предоставляют только один способ организации файлов, а именно через каталоги и имена файлов.[6][7]

Поскольку файловая система ничего не знает о хранимых данных,[6] приложения, как правило, используют свои собственные, часто проприетарный, форматы файлов. Это затрудняет обмен данными между несколькими приложениями. Становится трудным создать приложение, которое обрабатывает информацию из файлов разных типов, потому что программисты должны понимать структура и семантика всех файлов.[8] Использование распространенных форматов файлов - обходной путь к этой проблеме, но не универсальное решение; нет гарантии, что все приложения будут использовать этот формат. Данные со стандартизованной схемой, например XML документы и реляционные данные лучше, поскольку они имеют стандартизированную структуру и требования к времени выполнения.[9]

Кроме того, традиционная файловая система может извлекать и искать данные только по имени файла, поскольку единственное, что она знает о данных, - это имена файлов, в которых хранятся данные.[8] Лучшее решение - пометить файлы атрибутами, которые их описывают. Атрибуты метаданные о файлах, таких как тип файла (например, документ, картина, Музыка, создатель, так далее.).[6] Это позволяет искать файлы по их атрибутам способами, невозможными при использовании иерархии папок, например, поиск "картинки, на которых изображен человек X". Атрибуты могут быть распознаваемы либо файловой системой изначально, либо через какое-либо расширение.[6] Поиск на рабочем столе приложения развивают эту концепцию еще дальше. Они извлекают данные, включая атрибуты, из файлов и индексируют их. Чтобы извлечь данные, они используют фильтр для каждого формата файла. Это позволяет выполнять поиск как по атрибутам файла, так и по данным в нем.[6]

Однако это по-прежнему не помогает в управлении связанными данными, поскольку для разнородных элементов не определены отношения. Например, невозможно найти «номера телефонов всех людей, которые живут в Акапулько, и каждый из них более 100 раз появлялся в моей коллекции фотографий и с которыми я переписывался по электронной почте в течение последнего месяца». Такой поиск не может быть выполнен, если он не основан на модели данных, которая имеет как семантика а также определенные отношения данных.[6][7] WinFS стремится предоставить такую ​​модель данных и инфраструктуру времени выполнения, которые могут использоваться для хранения данных, а также взаимосвязи между элементами данных в соответствии с моделью данных, делая это с удовлетворительным уровнем производительности.

Обзор

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

Доступ ко всем данным в системе позволяет выполнять сложный поиск данных по всем элементам данных, которыми управляет WinFS. В приведенном выше примере («номера телефонов всех людей, которые живут в Акапулько, и каждый из них более 100 раз появлялся в моей коллекции фотографий и с которыми я переписывался по электронной почте в течение последнего месяца»), WinFS может проходить через предмет взаимосвязь всех фотографий, чтобы найти контакт Предметы. Точно так же он может фильтровать все электронные письма за последний месяц и получать доступ к общался с отношение для достижения контактов. Общие контакты затем могут быть определены из двух наборов результатов и их телефонных номеров, полученных путем доступа к подходящему свойству элементов контактов.

Помимо полностью схематизированных данных (например, XML и реляционный data), WinFS поддерживает частично структурированные данные (например, изображения, которые имеют неструктурированный поток битов плюс структурированные метаданные), а также неструктурированные данные (например, файлы). Он хранит неструктурированные компоненты в виде файлов, а структурированные метаданные - в структурированном хранилище.[10] Внутри WinFS использует реляционная база данных для управления данными. Это не ограничивает данные принадлежностью к какой-либо конкретной модели данных. Среда выполнения WinFS карты схема к реляционной модальности,[6] определяя таблицы, он будет хранить типы и первичные ключи и внешние ключи это потребовалось бы для представления отношений. WinFS по умолчанию включает сопоставления для объектных и XML-схем. Должны быть указаны сопоставления для других схем. Схемы объектов указаны в XML; WinFS генерирует код для отображения схем как .СЕТЬ классы. ADO.NET может использоваться для непосредственного указания реляционной схемы, хотя должно быть предоставлено отображение схемы объекта, чтобы отображать ее как классы.[10] Обход отношений выполняется как присоединяется на этих столах. WinFS также автоматически создает индексы на этих таблицах, чтобы обеспечить быстрый доступ к информации.[10] Индексирование значительно ускоряет соединения, а просмотр отношений для извлечения связанных данных выполняется очень быстро. Индексы также используются при поиске информации; поиск и запрос использовать индексы для быстрого завершения операций, как и поиск на рабочем столе системы.

Развитие

График структурированного хранения
1990 —
1991 —
1992 —
1993 —
1994 —
1995 —
1996 —
1997 —
1998 —
1999 —
2000 —
2001 —
2002 —
2003 —
2004 —
2005 —
2006 —
2007 —
2008 —
2009 —
2010 —
2011 —
2012 —
2013 —
2014 —
2015 —
2016 —
2017 —
2018 —
2019 —
Storage +, используя SQL 7.0[12]
RFS, с помощью SQL 2000[12]
WinFS[12]
Семантический движок Microsoft
Отменено
Отменено
Отменено
Особенности вырезать
Особенности вырезать
Отменено
Нет известной информации
График различных проектов структурированного хранения Microsoft. Ни один из них еще не привел к созданию полнофункциональной среды выполнения и API вокруг нее. Годы указаны приблизительно.

Разработка WinFS - это расширение функции, которая изначально планировалась в начале 1990-х годов. Дублированный Объектная файловая система, его предполагалось включить в Каир. OFS должно было иметь мощные функции агрегирования данных,[12] но проект в Каире был отложен, а вместе с ним и OFS. Однако позже, во время разработки COM была запланирована система хранения под названием Storage +, основанная на готовящемся к выпуску SQL Server 8.0, которая должна была предлагать аналогичные функции агрегирования.[12] Это тоже никогда не было реализовано, и аналогичная технология, Реляционная файловая система (RFS), была задумана для запуска с SQL Server 2000.[12] Однако SQL Server 2000 оказался незначительным обновлением до SQL Server 7.0, а RFS не был реализован.

Но концепция не отказалась.[12] Он просто превратился в WinFS. Первоначально планировалось включить WinFS в Виндоус виста,[14] и сборка 4051 Windows Vista, получившая затем кодовое имя Longhorn, данное разработчикам в Microsoft Конференция профессиональных разработчиков в 2003 году включала WinFS, но страдала от серьезных проблем с производительностью.[мертвая ссылка ][12] В августе 2004 года Microsoft объявила, что WinFS не будет поставляться с Windows Vista; вместо этого он будет доступен в виде загружаемого обновления после выпуска Vista.[12]

29 августа 2005 г.[12] Microsoft незаметно сделала бета-версию 1 WinFS доступной для подписчиков MSDN. Это сработало на Windows XP, и требовал .NET Framework бежать. API WinFS был включен в System.Storage пространство имен.[15] Бета-версия была обновлена ​​1 декабря 2005 г. для обеспечения совместимости с .NET Framework версии 2.0.[16] WinFS Beta 2 планировалась на некоторое время позже, в 2006 году,[17] и должен был включать интеграцию с Поиск на рабочем столе Windows, чтобы результаты поиска включали результаты как из обычных файлов, так и из хранилищ WinFS, а также разрешали доступ к данным WinFS с помощью ADO.NET.[18]

23 июня 2006 г. команда WinFS в Microsoft объявила, что WinFS больше не будет поставляться как отдельный продукт.[4][19] а некоторые компоненты будут взяты под прикрытие других технологий. Многие из основных функций, которые Microsoft намеревалась предоставить с WinFS, включали панель для редактирования свойств метаданных, панировочные сухари - навигация по свойствам, фильтрация или наложение элементов поверх свойств, инкрементный поиск, и сохраненные поиски;[20] эти функции были включены в Windows Vista.[21] Состав запроса, функция WinFS, которая позволяла пользователям выполнять дополнительный поиск, повторно используя результаты предыдущего запроса,[22] позже был включен в Windows Vista.[23]

Примеры использования технологии: объектно-реляционное отображение компоненты в ADO.NET Entity Framework; поддержка неструктурированных данных, режим работы без администратора, поддержка файловая система объекты через FILESTREAM тип данных и иерархические данные в SQL Server 2008, затем под кодовым названием Катмай, а также интеграция с Win32 API и Оболочка Windows и поддержка обхода иерархий путем перехода отношений в более поздние версии Microsoft SQL Server;[5] и компоненты синхронизации в Microsoft Sync Framework.[5]

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

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

Архитектура

Архитектура стека WinFS

WinFS использует реляционный механизм, который происходит от SQL Server 2005,[25] обеспечить механизм отношений данных. Хранилища WinFS - это просто файлы базы данных SQL Server (.MDF) с установленным атрибутом FILESTREAM.[26] Эти файлы хранятся в папке с ограниченным доступом под названием «Информация о системном томе» (находится в корне тома), в папках в папке «WinFS» с именами GUID этих магазинов.[26]

Внизу стека WinFS лежит Ядро WinFS, который взаимодействует с файловая система и предоставляет возможности доступа к файлам и адресации.[8] Реляционный механизм использует основные службы WinFS для представления структурированного хранилища и других служб, таких как запирание, который среда выполнения WinFS использует для реализации функциональности. Среда выполнения WinFS предоставляет Сервисы такие как Синхронизация и Правила которые можно использовать для синхронизации хранилищ WinFS или выполнения определенных действий при возникновении определенных событий.[8]

WinFS работает как оказание услуг это работает три процессы:[27]

  1. WinFS.exe, на котором размещено реляционное хранилище данных
  2. WinFSSearch.exe, на котором размещается механизм индексирования и запросов
  3. WinFPM.exe (менеджер продвижения файлов WinFS), который взаимодействует с базовой файловой системой

Он обеспечивает программный доступ к своим функциям через набор .NET Framework API. Они позволяют приложениям определять индивидуальные типы данных, определять отношения между данными, хранить и извлекать информацию и разрешать расширенный поиск.[6][8] Затем приложения могут агрегировать данные и представлять агрегированные данные пользователю.

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

WinFS хранит данные в реляционных хранилищах, которые представлены в виде виртуальных хранилищ, называемых магазины.[12] Хранилище WinFS - это общий репозиторий, в котором любое приложение может хранить данные вместе со своими метаданными, связями и схемой. Среда выполнения WinFS может сама применять определенные отношения; например, если значения предмет свойство изображения и имя свойства контакта такие же, то WinFS может связать контакт с изображением.[28] Отношения также могут быть указаны другими приложениями или пользователем.[29]

WinFS обеспечивает унифицированное хранилище, но не определяет формат, который должен храниться в хранилищах данных. Вместо этого он поддерживает запись данных в форматах для конкретных приложений. Но приложения должны предоставлять схема который определяет, как следует интерпретировать формат файла.[6] Например, можно добавить схему, позволяющую WinFS понимать, как читать, и, таким образом, иметь возможность искать и анализировать (скажем) PDF файл. Используя схему, любое приложение может считывать данные из любого другого приложения, и это также позволяет различным приложениям писать в формате друг друга, разделяя схему.[29]

На одном компьютере можно создать несколько хранилищ WinFS.[29] Это позволяет хранить отдельные классы данных; например, официальные документы и личные документы можно хранить в разных магазинах. WinFS по умолчанию предоставляет только одно хранилище с именем «DefaultStore».[12] Хранилища WinFS представлены как объекты оболочки, похожие на Виртуальные папки, которые динамически создают список всех элементов, присутствующих в магазине, и представляют их в виде папки. Объект оболочки также позволяет искать информацию в хранилище данных.[12]

Блок данных, который должен храниться в хранилище WinFS, называется WinFS. Предмет.[6][29] Элемент WinFS, наряду с основным элементом данных, также содержит информацию о том, как элемент данных связан с другими данными. Эта Отношения хранится в виде логических ссылок. Ссылки указывают, с какими другими элементами данных связан текущий элемент. Другими словами, ссылки определяют отношения данных с другими элементами данных. Ссылки физически хранятся с использованием идентификатора ссылки, который указывает имя и цель отношения, например тип или состоит из.[6] Идентификатор ссылки сохраняется как атрибут элемента данных. Все объекты с одинаковым идентификатором ссылки считаются связанными.[6] An Схема XML, определяющий структуру элементов данных, которые будут храниться в WinFS, должны быть заранее предоставлены среде выполнения WinFS.[6] В бета-версии 1 WinFS сборку схемы необходимо было добавить в GAC, прежде чем ее можно было использовать.

Модель данных

WinFS моделирует данные, используя элементы данных вместе с их отношения, расширения и правила, регулирующие его использование.[8] WinFS необходимо понимать тип и структуру элементов данных, чтобы информация, хранящаяся в элементе данных, могла быть доступна любому приложению, которое ее запрашивает. Это делается с помощью схем. Для каждого типа элемента данных, который должен храниться в WinFS, должна быть предоставлена ​​соответствующая схема для определения типа, структуры и ассоциаций данных. Эти схемы определены с использованием XML.[6]

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

Система типов

Иерархия типов WinFS

Наиболее важное различие между файловой системой и WinFS заключается в том, что WinFS знает тип каждого элемента данных, который она хранит. Тип определяет свойства элемента данных. Система типов WinFS тесно связана с концепцией .NET framework: классы и наследование. Новый тип может быть создан расширение и вложение любых предопределенных типов.[6]

WinFS предоставляет четыре предопределенных базовых типа: Предметы, Отношения, ScalarTypes и NestedTypes.[6] Элемент - это фундаментальный объект данных, который может быть сохранен, а Отношение - это отношение или связь между двумя элементами данных. Поскольку все элементы WinFS должны иметь тип, тип сохраняемого элемента определяет его свойства. Свойства элемента могут быть ScalarType, который определяет наименьшую единицу информации, которую может иметь свойство, или NestedType, который представляет собой набор из более чем одного ScalarTypes и / или NestedTypes. Все типы WinFS доступны как .NET CLR классы.[29]

Любой объект, представленный в виде единицы данных, такой как контакт, изображение, видео, документ и т. Д., Может быть сохранен в хранилище WinFS как специализация типа Item.[29] По умолчанию WinFS предоставляет типы элементов для файлов, контактов, документов, изображений, аудио, видео, календаря и сообщений. Элемент File может хранить любые общие данные, которые хранятся в файловых системах в виде файлов. Но если для файла не предоставлена ​​расширенная схема, определяя его как специализированный элемент, WinFS не сможет получить доступ к его данным. Такой файловый элемент может поддерживать только связь с другими элементами.[6]

Определение нового типа

Разработчик может расширить любой из этих типов или базовый тип Item, чтобы предоставить тип для своих пользовательских данных. Данные, содержащиеся в элементе, определяются в терминах свойств или полей, которые содержат фактические данные. Например, предмет Связаться с нами может иметь поле имя это ScalarType, и одно поле Адрес, NestedType, который также состоит из двух ScalarType. Для определения этого типа базовый класс Item расширяется, и в класс добавляются необходимые поля.[6] Поле NestedType можно определить как другой класс, содержащий два поля ScalarType. После определения типа должна быть определена схема, которая обозначает примитивный тип каждого поля, например, поле Name - это строка, поле Address - это настраиваемый класс Address, оба поля которого являются строками. Другие примитивные типы, поддерживаемые WinFS: Целое число, Байт, Десятичная дробь, Плавать, Двойной, Булево и DateTime, среди прочего.[6] Схема также определит, какие поля являются обязательными, а какие - необязательными.[30] Элемент контакта, определенный таким образом, будет использоваться для хранения информации о контакте путем заполнения поля свойств и его сохранения. При первоначальном сохранении необходимо заполнить только поля, отмеченные как обязательные.[29] Другие поля могут быть заполнены пользователем позже или вообще не заполнены. Если больше полей свойств, таких как дата последней беседы, необходимо добавить, этот тип может быть расширен для их размещения. Аналогично можно определить типы элементов для других данных.

Отношения

WinFS создает столы для всех определенных пунктов.[30] Все поля, определенные для элемента, образуют столбцы таблицы, а все экземпляры элемента хранятся в виде строк в таблице для соответствующих элементов. Всякий раз, когда какое-либо поле в таблице ссылается на данные в какой-либо другой таблице, это считается отношением. Схема отношения определяет, какие таблицы задействованы, а также каков тип и имя отношения. Среда выполнения WinFS управляет схемами отношений.[29] Все элементы представлены как .NET CLR объекты, с единым интерфейсом, обеспечивающим доступ к данным, хранящимся в полях. Таким образом, любое приложение может получать объект любого типа Item и использовать данные в объекте, не зная о физической структуре, в которой были сохранены данные.[6]

Типы WinFS представлены как классы .NET, которые могут быть созданы как объекты .NET. Данные хранятся в экземплярах этих типов путем установки их свойств. После этого они сохраняются в хранилище WinFS. Доступ к хранилищу WinFS осуществляется с помощью ItemContext класс (см. Поиск данных раздел для деталей). ItemContext разрешает транзакционный доступ к хранилищу WinFS; то есть все операции с момента привязки объекта ItemContext к хранилищу до его закрытия либо все выполняются успешно, либо все откатываются. При внесении изменений в данные они не записываются на диск; скорее они записываются в журнал в памяти. Только при закрытии соединения изменения записываются на диск в пакетном режиме. Это помогает оптимизировать дисковый ввод-вывод.[10] Следующий фрагмент кода, написанный на C #, создает контакт и сохраняет его в хранилище WinFS.

 // Подключение к хранилищу WinFS по умолчанию с помощью(ItemContext IC = ItemContext.Открыто()) {     // Создаем контакт и устанавливаем данные в соответствующих свойствах     Контакты контакт = новый Контакты() {         имя = новый PersonName() {                      // Имя - это ComplexType             Отображаемое имя = "Доу, Джон",             Имя = "Джон",             Фамилия = "Лань"         },         Номер телефона = новый Номер телефона() {     // Номер телефона - это ComplexType             Страна = Код страны.Антарктида,             Ареакод = 4567,             Число = 9876543210         },         Возраст = 111                                     // Возраст - это простой тип    };    // Добавляем объект в личную папку пользователя.    // Это связывает элемент с псевдотипом Folder для обратного    // совместимость, так как это позволяет получить доступ к элементу в папке     // иерархия для приложений, которые не являются родными для WinFS.    Папка containsFolder = UserDataFolder.FindMyPersonalFolder();    containsFolder.OutFolderMemberRelationship.Добавьте предмет(IC, контакт);    // Находим документ и связываемся с ним. Поиск начинается с создания    // Объект ItemSearcher. Каждый объект типа WinFS содержит метод GetSearcher ()    // который генерирует объект ItemSearcher, который ищет документы этого типа.    с помощью (ItemSearcher искатель = Документ.GetSearcher(IC))    {         Документ d = искатель.найти(@ "Title = 'Определенный документ'");         d.OutAuthoringRelationship.Добавьте предмет(IC, контакт);    }    // Поскольку нужно найти только один документ, метод ItemContext.FindOne ()    // тоже можно использовать.    // Находим картинку и соотносим с ней    с помощью (ItemSearcher искатель = Картина.GetSearcher(IC))    {         Картина п = искатель.найти(@ "Случай = 'Выпускной' и Последовательность = '3'");         п.OutSubjectRelationship.Добавьте предмет(IC, контакт);    }    // Сохраняемся в магазине и закрываем ссылку на магазин    IC.Обновить(); }

Отношения

Данные могут быть Связанный к еще одному элементу, что приводит к взаимно-однозначному отношению, или к нескольким элементам, что приводит к отношению «один-ко-многим».[6] Связанные элементы, в свою очередь, могут быть связаны с другими элементами данных, что приводит к сети отношений, которая называется отношениями «многие ко многим». Создание связи между двумя элементами создает другое поле в данных соответствующих элементов, которое ссылается на строку в таблице другого элемента, где хранится связанный объект.[29]

Отношения WinFS

В WinFS «Отношение» является экземпляром «Отношения» базового типа, который расширен для обозначения специализации отношения. Отношения - это сопоставление двух элементов, источника и цели. У источника есть исходящие отношения, а у цели - входящие.[30] WinFS предоставляет три типа примитивных отношений: Поддерживающие отношения, Ссылочные отношения и Встраивание отношений.[6] Любые настраиваемые отношения между двумя типами данных являются экземплярами этих типов отношений.

  • Поддерживающие отношения определяет владение и время жизни (которое определяет, как долго действует связь) Целевого элемента. Например, отношения между папкой и файлом, а также между сотрудником и его записью о зарплате - это холдинговые отношения - последнее должно быть удалено при удалении первого. Целевой элемент может быть частью более чем одного удерживающего отношения. В таком случае он должен быть удален, когда будут удалены все исходные элементы.
  • Ссылочные отношения обеспечивают связь между двумя Предметами, но не имеют связанного срока службы, т.е. каждый Предмет будет продолжать храниться даже без другого.
  • Встраивание отношений отдать порядок двум элементам, которые связаны отношениями, например отношениями между родительским элементом и дочерним элементом.

Отношения между двумя элементами могут быть установлены программно с помощью приложения, создающего данные, или пользователь может использовать браузер элементов WinFS, чтобы вручную связать элементы.[30] Браузер элементов WinFS также может графически отображать элементы и их взаимосвязь, чтобы пользователь мог узнать, как организованы их данные.[29]

Правила

WinFS включает Правила,[22] которые выполняются при выполнении определенного условия. Правила WinFS работают с данными и отношениями данных. Например, можно создать правило, которое гласит, что всякий раз, когда создается элемент, содержащий поле "Имя" и если значением этого поля является какое-то конкретное имя, должна быть создана связь, которая связывает статью с какой-либо другой статьей. Правила WinFS также могут обращаться к любому внешнему приложению. Например, можно построить правило, запускающее Уведомлять приложение всякий раз, когда приходит письмо от определенного контакта.[22] Правила WinFS также можно использовать для добавления новых полей свойств к существующим элементам данных.[22]

Правила WinFS также представлены как объекты .NET CLR. Таким образом, любое правило можно использовать для любых целей. Правило можно даже расширить, унаследовав от него, чтобы сформировать новое правило, состоящее из условия и действия родительского правила, а также чего-то еще.[22]

РАВ

WinFS поддерживает создание Богатые представления приложений (RAV) путем агрегирования различных данных в формате виртуальной таблицы. в отличие просмотр базы данных, где каждый отдельный элемент может быть только скалярным значением, RAV могут иметь сложные элементы или даже коллекции элементов. Фактические данные могут относиться к нескольким типам или экземплярам данных и даже могут быть получены путем обхода отношений.[10] RAV внутренне разбиты на страницы (разделяя весь набор данных на более мелкие страницы содержащие отключенные подмножества данных) средой выполнения WinFS. Размер страницы определяется во время создания представления, и WinFS API предоставляет методы для итерации по страницам. RAV также поддерживает изменение вида в соответствии с различными параметрами группировки. Просмотры также могут быть опрошены.

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

Несмотря на то, что все данные являются общими, не все равно доступно. WinFS использует Система аутентификации Windows для обеспечения двух механизмов защиты данных.[29] Во-первых, это безопасность на уровне общего ресурса, которая контролирует доступ к вашему общему ресурсу WinFS. Во-вторых, существует безопасность на уровне элементов, поддерживающая дескрипторы безопасности, совместимые с NT. Процесс, обращающийся к элементу, должен иметь достаточно прав для доступа к нему. Также в Vista есть концепция «уровень целостности» для приложения. Данные с более высокой степенью целостности недоступны для процесса с более низкой целостностью.

Поиск данных

Блок-схема для создания, поиска и обновления экземпляров данных WinFS

Основным способом получения данных из хранилища WinFS является запрос хранилища WinFS в соответствии с некоторыми критериями,[8] который возвращает перечислимый набор элементов, соответствующих критериям. Критерии запроса указываются с помощью OPath язык запросов. Возвращенные данные становятся доступными как экземпляры схем типов в соответствии с .СЕТЬ объектная модель.[31] Доступ к данным в них можно получить, открыв свойства отдельных объектов.[30]

Отношения также отображаются как свойства. Каждый элемент WinFS имеет два свойства с именами Входящие и ИсходящиеОтношения, которые обеспечивают доступ к набору экземпляров отношений, в которых участвует элемент. Другой элемент, который участвует в одном экземпляре отношения, может быть достигнут через соответствующий экземпляр отношения.[10][30]

Тот факт, что к данным можно получить доступ, используя их описание, а не местоположение, можно использовать для обеспечения организационных возможностей конечного пользователя без ограничения иерархической организации, используемой в файловых системах. В файловой системе каждый файл или папка содержится только в одной папке. Но элементы WinFS могут участвовать в любом количестве отношений удержания, в том числе и с любыми другими элементами. Таким образом, конечные пользователи не ограничиваются только организацией файлов / папок. Скорее, контакт может стать контейнером для документов; картинка контейнер для контактов и так далее. Для совместимости с прежними версиями WinFS включает псевдотип, называемый Папка, который присутствует только для участия в установлении отношений и имитации организации файлов / папок. Поскольку любой элемент WinFS может быть связан с более чем одним элементом папки, с точки зрения конечного пользователя, элемент может находиться в нескольких папках без дублирования фактических данных.[10] Приложения также могут анализировать отношения графики представить различные фильтры. Например, приложение электронной почты может анализировать связанные контакты и отношения контактов со счетами в ресторане и динамически создавать фильтры, например «Письма, отправленные людям, с которыми я обедал».

Поиски

WinFS API предоставляет класс, называемый ItemContext класс, который привязан к хранилищу WinFS. В ItemContext объект может использоваться для охвата поиска всего магазина или его части. Он также предоставляет транзакционный доступ в магазин.[15] Затем объект этого класса может порождать ItemSearcher объект, который затем принимает тип (объект, представляющий тип) элемента, который нужно получить, или связь и OPath запрос строка, представляющая критерии поиска.[30][32] Возвращается набор всех совпадений, которые затем можно привязать к виджету пользовательского интерфейса для отображения в массовом порядке или перечисление индивидуально.[29] Элементы свойств также можно изменить, а затем сохранить обратно в хранилище данных для обновления данных. Объект ItemContext - это закрыто (который отмечает конец ассоциации объекта с хранилищем), когда выполняются запросы или изменения, объединенные в хранилище.

Доступ к связанным элементам также можно получить через элементы. В Входящие и ИсходящиеОтношения properties предоставляют доступ ко всему набору экземпляров отношений, набранных по имени отношения. Эти объекты отношений предоставляют другой элемент через свойство. Так, например, если изображение связано с изображением, к нему можно получить доступ через прохождение отношения как:

 Контакты контакты = картина.ИсходящиеОтношения.В ролях(тип(Связаться с нами)).Ценность; // Это извлекает коллекцию всех исходящих отношений из объекта изображения // и отфильтровывает доступные от них контакты и получает его значение. // Или связь может быть статически указана как Контакты контакты = картина.ИсходящиеОтношения.OutContactRelationship.Связаться с нами;

Строка запроса OPath позволяет выразить параметры, которые будут запрашиваться для указания, используя Предмет свойства, встроенные Предметы а также Отношения.[нужна цитата ] Он может указывать одно условие поиска, например "title = Что-то", или сложное состояние, такое как "title = 'Заголовок 1' || title = 'Заголовок 2' && author = 'Кто-то'". Эти логические и реляционные операции можно указать с помощью C # любить &&, ||, =, != операторы, а также их англоязычные эквиваленты, например РАВНО, НЕ РАВНЫЙ. SQL как операторы, такие как ЛЮБИТЬ, ГРУППА ПО и СОРТИРОВАТЬ ПО также поддерживаются, как и условия с подстановочными знаками.[нужна цитата ] Так, "название LIKE 'any *'" - допустимая строка запроса. Эти операторы можно использовать для выполнения сложных поисков, таких как

 с помощью (ItemContext IC = ItemContext.Открыто() ) {     // Поиск начинается с создания объекта ItemSearcher. Поисковик создается из     // экземпляр отношения, потому что ищущие контакты связаны. В     // первый параметр определяет объем поиска. ItemContext как область означает     // обыскать весь магазин. Объем может быть ограничен набором предметов, которые могут     // поддерживать отношения с контактами. В этом случае набор передается как     // объем поиска.     ItemSearcher искатель = OutContactRelationship.GetTargetSearcher(IC, тип(Связаться с нами));     КонтактыCollection контакты = искатель.Найти все("OutContactRelationship.Contact.Name КАК 'A *'"); }

Приведенный выше фрагмент кода создает объект ItemSearcher, который выполняет поиск по OutContactRelationship Экземпляр, который связывает изображения и контакты, по сути, ищет все изображения, связанные с контактом. Затем он выполняет запрос Имя LIKE 'A *' " на всех контактах, доступных через OutContactRelationship, возвращая список "контакты, имена которых начинаются с буквы А и чьи фотографии у меня есть". Точно так же можно принять во внимание больше взаимосвязей, чтобы еще больше сузить результаты.[10][30] Кроме того, обработчик запросов на естественном языке, который анализирует запрос на естественном языке и создает правильно сформированную строку запроса OPath для поиска через правильные отношения, может позволить пользователям выполнять такие поисковые запросы, как "найди название вина, которое я пил с человеком X в прошлом месяце", при условии, что приложения финансового управления используют WinFS для хранения счетов.

Различные отношения определяют разный набор данных. Поэтому, когда выполняется поиск, охватывающий несколько отношений, разные наборы данных извлекаются индивидуально, и союз различных наборов. Результирующий набор содержит только те элементы данных, которые соответствуют всем отношениям.[30]

Уведомления

WinFS также включает лучшую поддержку для обработки часто изменяющихся данных. Использование WinFS Уведомления, приложения выбирают получение уведомлений об изменениях выбранных данных Предметы. WinFS поднимет ItemChangedEvent, используя модель событий .NET, когда элемент, на который подписан, изменяется, и событие будет опубликовано в приложениях.[30]

Обмен данными

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

WinFS API также предоставляет некоторую поддержку для совместного использования с приложениями, отличными от WinFS. WinFS предоставляет объект оболочки для доступа к хранилищам WinFS. Этот объект отображает элементы WinFS в иерархию виртуальных папок и может быть доступен из любого приложения.[12] Данные WinFS также можно передать вручную с помощью сетевые ресурсы, поделившись устаревшим объектом оболочки.[33] Файловые форматы, отличные от WinFS, могут храниться в хранилищах WinFS с помощью элемента файла, предоставляемого WinFS. Можно написать средства импорта для преобразования определенных форматов файлов в типы элементов WinFS.[33]

Кроме того, WinFS предоставляет службы для автоматической синхронизации элементов в двух или более хранилищах WinFS при соблюдении некоторых предопределенных условий, например "делиться только фотографиями" или "делиться фотографиями, с которыми связан контакт X".[33] Магазины могут находиться на разных компьютерах. Синхронизация выполняется в пиринговый мода; нет центральной власти. Синхронизация может быть ручной, автоматической или запланированной. Во время синхронизации WinFS находит новые и измененные элементы и соответственно обновляет их. Если два или более изменений конфликтуют, WinFS может либо прибегнуть к автоматическому разрешению на основе предопределенных правил, либо отложить синхронизацию для разрешения вручную. При необходимости WinFS также обновляет схемы.[33]

Поддержка приложения

Пространство имен оболочки

WinFS Beta 1 включает оболочка расширение пространства имен, которое отображает хранилища WinFS как объекты верхнего уровня в Мой компьютер Посмотреть.[12] Файлы можно копировать в магазины и из них, а также можно напрямую использовать приложения для их сохранения. Даже такие папки, как Мои документы можно перенаправить в магазины.[12] WinFS использует Импортер плагины для анализа файлов при их импорте в хранилище и создания правильных схем и объектов WinFS, а при извлечении объектов повторно упаковывают их в файлы.[33] Если импортеры для определенных файлов не установлены, они сохраняются как общие. файл типы.

Microsoft Rave

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

StoreSpy

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

В WinFS Beta 1 Microsoft включила неподдерживаемое приложение под названием StoreSpy,[34] что позволило просматривать хранилища WinFS, представляя иерархическое представление элементов WinFS. Он автоматически сгенерировал виртуальные папки на основе разрешений доступа, даты и других метаданных и представленных в виде иерархического дерева, сродни тому, в котором представлены традиционные папки. Приложение генерирует вкладки для различных типов элементов. StoreSpy разрешил просмотр Предметы, Отношения, MultiSet, Вложенные элементы, Расширения[35] и другие типы в магазине вместе с его полными метаданными. Он также представил интерфейс поиска для выполнения поиска вручную и сохранения их в виде виртуальных папок. Приложение также имеет графическое представление правил WinFS. Однако он не позволял редактировать элементы или их свойства, хотя его планировалось включить в будущий выпуск.[36] Но проект WinFS был сокращен, прежде чем он смог материализоваться.

Браузер типов

WinFS также включает другое приложение с именем Браузер типов WinFS, который можно использовать для просмотра типов WinFS, а также для визуализации иерархических отношений между типами WinFS.[37] Тип WinFS, как встроенные, так и настраиваемые схемы, можно визуализировать вместе со всеми свойствами и методами, которые он поддерживает. Он также показывает типы, от которых он является производным, а также другие типы, расширяющие схему типов. Однако, хотя он был включен в WinFS, он был выпущен как неподдерживаемый инструмент.[37]

OPather

WinFS Beta 1 также включает неподдерживаемое приложение с именем OPather.[38] Он представляет собой графический интерфейс для записи Опат запросы. Его можно использовать, выбрав тип целевого объекта и указав параметры запроса. Он также включает Intellisense -подобная функция завершения параметров. Затем его можно использовать для выполнения задач визуализации, таких как привязка результатов запроса к DataGrid управления, создавать представления данных в самой WinFS или просто извлекать строку запроса.

Проект "Апельсин"

Microsoft запустила проект по созданию приложения визуализации данных для WinFS. Это было кодовое название «Проект Апельсин» и предположительно был построен с использованием Windows Presentation Foundation.[39] Предполагалось обеспечить разведку Предметы хранятся в хранилищах WinFS, и отношения между данными должны были быть важной частью модели навигации. Предполагалось, что люди позволят организовать хранилища WinFS также графически, реализовав многие концепции, показанные в WMV-файл видео IWish Concept. Однако, поскольку проект WinFS отключился, статус этого проекта неизвестен.

Смотрите также

использованная литература

  1. ^ «Утечка Windows намекает на грядущие изменения». ZDNet. CBS Interactive. 30 сентября 2007 г. Архивировано с оригинал 30 сентября 2007 г.
  2. ^ Скофилд, Джек (29 июня 2006 г.). "Почему WinFS должна была исчезнуть". Хранитель. Новости и СМИ Guardian. Получено 9 декабря, 2010.
  3. ^ «Концептуальное видео IWish». Microsoft. Архивировано из оригинал на 2006-06-02. Получено 2008-07-14.
  4. ^ а б Квентин Кларк (23 июня 2006 г.). «Обновление WinFS». Что в магазине. Блоги MSDN. Получено 2006-06-23.
  5. ^ а б c Квентин Кларк. "Где сейчас WinFS?". Архивировано из оригинал на 2008-05-17. Получено 2008-05-17.
  6. ^ а б c d е ж г час я j k л м п о п q р s т ты v ш Икс Шон Вильдермут. «Взгляд разработчика на WinFS: Часть 1». MSDN. Получено 2007-06-30.
  7. ^ а б c d Виджай Бангару. «Объединяйте, организуйте, исследуйте и вводите новшества. О боже! (Часть 2)». Блог команды WinFS. Архивировано из оригинал на 2007-06-09. Получено 2007-06-30.
  8. ^ а б c d е ж г час я j k Шон Гримальди. "Файлы WinFS: Divide et Impera". MSDN. Получено 2007-06-30.
  9. ^ а б Томас Риццо. «WinFS 101: знакомство с новой файловой системой Windows». MSDN. Получено 2007-06-30.
  10. ^ а б c d е ж г час я j k "WinFS на выставке .NET". Получено 2007-07-04.[постоянная мертвая ссылка ]
  11. ^ Виджай Бангару. «Объединяйте, организуйте, исследуйте и вводите новшества. О боже! (Часть 1)». Блог команды WinFS. Архивировано из оригинал на 2007-07-08. Получено 2007-06-30.
  12. ^ а б c d е ж г час я j k л м п о п q Пол Турротт. «Предварительная версия Windows Storage Foundation (WinFS)». Архивировано из оригинал на 2007-07-02. Получено 2007-06-30.
  13. ^ а б «Мое свидание с Destiny, эээ… интегрированное хранилище». Архивировано из оригинал на 2007-10-31. Получено 2007-06-30.
  14. ^ Кэт Эверетт. "Будет ли Longhorn стоить этой боли?". ZDNet. Получено 2007-06-30.
  15. ^ а б «WinFS для разработчиков». NTFS.com. Получено 2007-07-04.
  16. ^ Виджай Бангару. «Доступно обновление бета-версии 1 для WinFS». Блог команды WinFS. Архивировано из оригинал на 2007-05-20. Получено 2007-06-30.
  17. ^ Шан Синха. «Демонстрация следующего выпуска WinFS на Tech Ed 2006 в Бостоне! Присоединяйтесь к нам!». Блог команды WinFS. Архивировано из оригинал на 2007-03-08. Получено 2007-06-30.
  18. ^ Санджай Ананд. «Мое свидание с Destiny, эээ… интегрированное хранилище». Блог команды WinFS. Архивировано из оригинал на 2007-10-31. Получено 2007-06-30.
  19. ^ Квентин Кларк. "Обновление до обновления". Блог команды WinFS. Архивировано из оригинал на 2007-07-03. Получено 2007-06-30.
  20. ^ «WinFS: Файловая система Windows (Технические статьи Microsoft Access 2002)». MSDN. Microsoft. Октябрь 2003 г. Архивировано с оригинал на 2003-12-21. Получено 1 февраля, 2018.
  21. ^ «Руководство по продукту Windows Vista». Microsoft. 2006. С. 44–51. Архивировано из оригинал (DOCX) 1 июля 2011 г.. Получено 1 марта, 2018.
  22. ^ а б c d е Кати Димитрова. «О правилах WinFS». MSDN. Microsoft. Архивировано из оригинал на 2008-12-26. Получено 2 марта, 2018.
  23. ^ Бенц, Бен (31 октября 2006 г.). «Состав запроса: построение поиска на основе другого поиска». Оболочка: раскрытый блог. Microsoft. Архивировано из оригинал 15 декабря 2006 г.. Получено 2 марта, 2018.
  24. ^ «Барон-миллиардер Билл Гейтс все еще оплакивает мертворожденную WinFS Vista».
  25. ^ Нейт Мук. «MS объясняет WinFS, выпускает бета-версию 1». BetaNews. Получено 2007-07-02.
  26. ^ а б Шишир Мехротра (сентябрь 2005 г.). ""WinFS «Перспективы будущего: обзор». Конференция профессиональных разработчиков Презентации 2005 г.. Microsoft. Архивировано из оригинал 6 января 2006 г.. Получено 2006-05-22.(В настоящее время не в сети, зеркало ).
  27. ^ Эрвин ван дер Меер. «Первый взгляд на WinFS Beta 1». Архивировано из оригинал на 2007-06-09. Получено 2007-07-03.
  28. ^ Виджай Бангару. "Почтовый ящик WinFS". Блог команды WinFS. Архивировано из оригинал на 2007-05-22. Получено 2007-06-30.
  29. ^ а б c d е ж г час я j k л Ричард Граймс. «Революционная система хранения файлов позволяет пользователям искать файлы и управлять ими на основе содержимого». Журнал MSDN. Архивировано из оригинал на 2007-06-27. Получено 2007-06-30.
  30. ^ а б c d е ж г час я j Шон Вильдермут (июль 2004 г.). «Взгляд разработчика на WinFS: Часть 2». MSDN. Microsoft. Получено 2007-06-30.
  31. ^ Виджай Бангару. «Объединяйте, организуйте, исследуйте и внедряйте инновации. О боже! (Часть 4)». Блог команды WinFS. Архивировано из оригинал на 2007-06-18. Получено 2007-06-30.
  32. ^ Томас Риццо, Шон Гримальди (18 октября 2004 г.). "Введение в" WinFS "OPath". MSDN. Microsoft. Получено 2007-06-30.
  33. ^ а б c d е ж Нил Пэджетт. «Получение данных в WinFS с помощью синхронизации WinFS». Блог команды WinFS. Архивировано из оригинал на 2007-02-17. Получено 2007-06-30.
  34. ^ Вэй-Мэн Ли (07.09.2005). "WinFS-StoreSpy". Получено 2007-06-30.
  35. ^ "Стефано Демилиани WeBlog: WinFS StoreSpy v0.8 для сборки WinHEC 2004 Longhorn". Получено 2007-03-12.
  36. ^ "StoreSpy должен стать StoreEditor". Архивировано из оригинал на 2007-09-29. Получено 2007-06-30.
  37. ^ а б Санджай Нагамангалам. «Визуализация типов WinFS». Блог команды WinFS. Архивировано из оригинал на 2007-08-16. Получено 2007-07-03.
  38. ^ Луис Миранда. «Использование OPather для написания запросов». Блог команды WinFS. Архивировано из оригинал на 2007-11-19. Получено 2007-06-30.
  39. ^ Шишир Мехротра. "Убийственное приложение для организации пользователей". Блог команды WinFS. Архивировано из оригинал на 2007-03-09. Получено 2007-06-30.

внешние ссылки