Это хорошая статья. Для получения дополнительной информации нажмите здесь.
Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

WinFS была объявлена ​​одним из столпов волны технологий Longhorn и будет поставляться в составе следующей версии Windows. Впоследствии было решено, что WinFS будет поставляться после выпуска Windows Vista , но эти планы были отложены в июне 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. Данные структурированы с помощью свойств. Например, экземпляр типа резюме будет отображать данные, предоставляя такие свойства, как имя , квалификация образования , опыт . Каждое свойство может быть простого типа ( строки, целые числа , даты ) или сложные типы ( контакты ). [8] [10] Разные типы данных предоставляют разные свойства. Кроме того, WinFS также позволяет связывать разные экземпляры данных; например, документ и контакт могут быть связаны отношением Автор . [7] [10] Отношения также отображаются как свойства; например, если документ связан с контактом отношениями « Создано» , тогда документ будет иметь свойство « Кем создано» . Когда к нему обращаются, связь просматривается и возвращаются связанные данные. [10]Следуя отношениям, можно получить доступ ко всем связанным данным. [7] WinFS способствует совместному использованию данных между приложениями, делая типы данных вместе с их схемами доступными для всех приложений. [8] Когда приложение хочет использовать тип WinFS, оно может использовать схему для поиска структуры данных и может использовать информацию. Таким образом, приложение имеет доступ ко всем данным в системе, даже если разработчику не нужно было писать парсеры для распознавания различных форматов данных. Он также может использовать отношения и связанные данные для создания динамических фильтров для представления информации, с которой работает приложение. WinFS API дополнительно абстрагирует задачу доступа к данным. Все типы WinFS представлены как объекты .NET. со свойствами объекта, напрямую сопоставляемыми со свойствами типа данных. [6] Кроме того, позволяя различным приложениям, имеющим дело с одними и теми же данными, совместно использовать один и тот же экземпляр данных WinFS, а не хранить одни и те же данные в разных файлах, проблемы синхронизации разных хранилищ при изменении данных устраняются. [11] Таким образом, WinFS может уменьшить избыточность. [6] [9]

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

В дополнение к полностью схематизированным данным (таким как XML и реляционные данные) WinFS поддерживает частично структурированные данные (например, изображения, которые имеют неструктурированный поток битов плюс структурированные метаданные), а также неструктурированные данные (например, файлы). Он хранит неструктурированные компоненты в виде файлов, а структурированные метаданные - в структурированном хранилище. [10] Внутри WinFS использует реляционную базу данных для управления данными. Это не ограничивает данные принадлежностью к какой-либо конкретной модели данных. Среда выполнения WinFS сопоставляет схему с реляционной модальностью [6] , определяя таблицы, в которых будут храниться типы, а также первичные и внешние ключи.это потребовалось бы для представления отношений. WinFS по умолчанию включает сопоставления для объектных и XML-схем. Должны быть указаны сопоставления для других схем. Схемы объектов указаны в XML; WinFS генерирует код для отображения схем как классов .NET . 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 -
OFS в Каире [12]
Storage +, используя SQL 7.0 [12]
RFS , используя SQL 2000 [12]
Интернет-магазин Exchange [13]
Outlook LIS [13]
WinFS [12]
Семантический движок Microsoft
Отменено
Отменено
Отменено
Особенности вырезать
Особенности вырезать
Отменено
Нет известной информации
Хронология различных проектов структурированных хранилищ Microsoft . Ни один из них еще не привел к созданию полнофункциональной среды выполнения и API вокруг нее. Годы указаны приблизительно.

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

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

29 августа 2005 г. [12] Microsoft незаметно предоставила подписчикам MSDN бета-версию 1 WinFS. Он работал в Windows XP и требовал для работы .NET Framework . WinFS API был включен в пространство имен System.Storage . [15] Бета-версия была обновлена ​​1 декабря 2005 г. для обеспечения совместимости с версией 2.0 .NET Framework. [16] WinFS Beta 2 была запланирована на некоторое время позже, в 2006 году, [17] и должна была включать интеграцию с Windows Desktop Search , чтобы результаты поиска включали результаты как из обычных файлов, так и из хранилищ 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 , затем кодовое название Katmai , а также интеграция с Win32 API и Windows Shell и поддержка обхода иерархий путем обхода связь с более поздними версиями 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) , который взаимодействует с базовой файловой системой.

Он обеспечивает программный доступ к своим функциям через набор API .NET Framework . Они позволяют приложениям определять индивидуальные типы данных, определять отношения между данными, хранить и извлекать информацию и разрешать расширенный поиск. [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] Схема XML , определяющая структуру элементов данных, которые будут храниться в WinFS, должна быть заранее предоставлена ​​среде выполнения WinFS. [6] В бета-версии 1 WinFS сборку схемы нужно было добавить в GAC, прежде чем ее можно было использовать.

Модель данных [ править ]

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

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

Система типов [ править ]

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

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

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

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

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

Разработчик может расширить любой из этих типов или базовый тип Item, чтобы предоставить тип для своих пользовательских данных. Данные, содержащиеся в элементе, определяются в терминах свойств или полей, которые содержат фактические данные. Например, контакт элемента может иметь имя поля, которое является ScalarType, и одно поле Address , NestedType, которое дополнительно состоит из двух ScalarType. Для определения этого типа базовый класс Item расширяется, и в класс добавляются необходимые поля. [6]Поле NestedType можно определить как другой класс, содержащий два поля ScalarType. После определения типа должна быть определена схема, которая обозначает примитивный тип каждого поля, например, поле Name - это строка, поле Address - это настраиваемый класс Address, оба поля которого являются строками. Среди других примитивных типов, поддерживаемых WinFS, - Integer , Byte , Decimal , Float , Double , Boolean и 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 . Open ())  {  // Создаем контакт и устанавливаем данные в соответствующих свойствах  ContactEAddress  contact  =  new  ContactEAddress ()  {  Name  =  new  PersonName ()  {  // Имя представляет собой  ComplexType Displayname  =  "Doe, John" ,  FirstName  =  "John" ,  LastName  =  "Doe"  },  TelephoneNumber  =  new TelephoneNumber ()  {  // Номер телефона - сложный тип  Country  =  CountryCode . Антарктида ,  Areacode  =  4567 ,  Number  =  9876543210  },  Age  =  111  // Age is a SimpleType  }; // Добавляем объект в личную папку пользователя.  // Это связывает элемент с псевдотипом Folder для обратной  // совместимости, поскольку это позволяет получить доступ к элементу в  иерархии //  папок для приложений, которые не являются родными для WinFS. Папка,  содержащаяFolder  =  UserDataFolder . FindMyPersonalFolder ();  containsFolder . OutFolderMemberRelationship . AddItem ( ic ,  контакт ); // Находим документ и связываемся с ним. Поиск начинается с создания  объекта // ItemSearcher. Каждый объект типа WinFS содержит метод GetSearcher ()  //, который генерирует объект ItemSearcher, который ищет документы этого типа.  используя  ( ItemSearcher  поисковое  =  Документ . GetSearcher ( Ic ))  {  Документ  d  =  искателю . Найти ( @ "Title = 'Определенный документ'" );  d . OutAuthoringRelationship . AddItem ( ic ,  контакт );  } // Поскольку должен быть найден только один документ, также  можно использовать метод ItemContext.FindOne () //. // Найти картинку и связаны с ним ,  используя  ( ItemSearcher  поисковое  =  Picture . GetSearcher ( Ic ))  {  Picture  р  =  искателю . Найти ( @ "Occasion = 'Graduation' and Sequence = '3'" );  стр . OutSubjectRelationship . AddItem ( ic ,  контакт );  } // Сохраняемся в магазине и закрываем ссылку на магазин  ic . Обновить ();  }

Отношения [ править ]

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

Отношения WinFS

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

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

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

Правила [ править ]

WinFS включает в себя правила , [22] , которые выполняются , когда определенное условие. Правила WinFS работают с данными и отношениями данных. Например, можно создать правило, которое гласит, что всякий раз, когда создается статья, содержащая поле «Имя», и если значением этого поля является какое-то конкретное имя, должна быть создана связь, связывающая элемент с каким-либо другим элементом. Правила WinFS также могут обращаться к любому внешнему приложению. Например, можно создать правило, которое запускает приложение Notify всякий раз, когда приходит письмо от определенного контакта. [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 . Возвращенные данные становятся доступными в виде экземпляров схем типов, соответствующих объектной модели .NET . [31] К данным в них можно получить доступ, открыв свойства отдельных объектов. [30]

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

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

Поиск [ править ]

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

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

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

Строка запроса OPath позволяет выражать параметры, которые будут запрашиваться для указания, с использованием свойств элемента , встроенных элементов, а также отношений . [ необходима цитата ] Он может указывать одно условие поиска, например «title = Something» , или составное условие, например «title = 'Title 1' || title = 'Title 2' && author = 'Someone'» . Эти логические и реляционные операции можно указать с помощью C #, например && , || , = , != операторы, а также их английские эквиваленты, такие как EQUAL ,НЕ РАВНО . SQL- подобные операторы, такие как LIKE , GROUP BY и ORDER BY , также поддерживаются, как и условия с подстановочными знаками. [ необходима цитата ] Итак, «title LIKE 'any *'» - допустимая строка запроса. Эти операторы можно использовать для выполнения сложных поисков, таких как

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

Приведенный выше фрагмент кода создает объект ItemSearcher, который выполняет поиск в экземпляре OutContactRelationship, который связывает изображения и контакты, фактически ища все изображения, связанные с контактом. Затем он запускает запрос Name LIKE 'A *' " для всех контактов, доступных через OutContactRelationship , возвращая список " контактов, имена которых начинаются с A и чьи изображения у меня есть " . Точно так же можно принять во внимание больше связей для дальнейшего сужения результаты. [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 использует плагины Importer для анализа файлов по мере их импорта в хранилище и создания правильных схем и объектов 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 позволяет просматривать элементы , отношения , мультинабор , вложенные элементы , расширения [35]и другие типы в магазине вместе с его полными метаданными. Он также представил интерфейс поиска для выполнения поиска вручную и сохранения их в виде виртуальных папок. Приложение также имеет графическое представление правил WinFS. Однако он не позволял редактировать элементы или их свойства, хотя его планировалось включить в будущий выпуск. [36] Но проект WinFS был сокращен до того, как он смог материализоваться.

Браузер типов [ править ]

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

OPather [ править ]

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

Проект "Апельсин" [ править ]

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

См. Также [ править ]

  • Настольный органайзер
  • GNOME Storage - система управления хранилищем для рабочего стола GNOME
  • НЕПОМУК-КДЕ
  • ReFS
  • Система управления реляционными базами данных (СУБД)

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Блог WinFS
  • WinFS в сети разработчиков Microsoft ( кеш Интернет-архива )
  • Видео канала 9
  • Группа новостей WinFS
  • Предварительная версия WinFS Beta 1
  • Область WinFS на NetFXGuide.com ( кеш Интернет-архива )