stringtranslate.com

WinFS

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

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

Разработка

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

Эта концепция не была отменена и послужила основой для WinFS. [12] Изначально планировалось, что 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 . API WinFS был включен в пространство имен 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] Эти файлы хранятся в папке с ограниченным доступом под названием «Информация о системном томе» (размещенной в корне тома), [27] в папках в папке «WinFS» с именами GUID этих хранилищ. [26]

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

WinFS работает как служба , запускающая три процесса : [28]

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

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

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

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

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

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

Единица данных, которая должна храниться в хранилище WinFS, называется элементом WinFS . [6] [30] Элемент 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 Framework . Новый тип можно создать путем расширения и вложения любых предопределенных типов. [6]

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

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

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

Разработчик может расширить любой из этих типов или базовый тип Item, чтобы предоставить тип для своих пользовательских данных. Данные, содержащиеся в элементе, определяются с точки зрения свойств или полей, которые содержат фактические данные. Например, контакт элемента может иметь поле Name , которое является ScalarType, и одно поле Address , NestedType, которое дополнительно состоит из двух ScalarTypes. Для определения этого типа базовый класс Item расширяется и в класс добавляются необходимые поля. [6] Поле NestedType можно определить как другой класс, содержащий два поля ScalarType. После определения типа необходимо определить схему, которая обозначает примитивный тип каждого поля, например, поле «Имя» представляет собой строку, поле «Адрес» представляет собой определяемый пользователем класс адреса, оба поля которого являются строками. Другими примитивными типами, которые поддерживает WinFS, являются Integer , Byte , Decimal , Float , Double , Boolean и DateTime и другие. [6] Схема также определяет, какие поля являются обязательными, а какие необязательными. [31] Определенный таким образом элемент контакта будет использоваться для хранения информации о контакте путем заполнения поля свойств и его сохранения. При первоначальном сохранении необходимо заполнить только те поля, которые отмечены как обязательные. [30] Другие поля могут быть заполнены пользователем позже или не заполнены вообще. Если необходимо добавить дополнительные поля свойств, такие как дата последнего разговора , этот тип можно расширить, чтобы вместить их. Типы элементов для других данных могут быть определены аналогичным образом.

Отношения

WinFS создает таблицы для всех определенных элементов. [31] Все поля, определенные для объекта, образуют столбцы таблицы, и все экземпляры объекта сохраняются в виде строк в таблице для соответствующих объектов. Всякий раз, когда какое-либо поле в таблице ссылается на данные в другой таблице, это считается связью. Схема связи определяет, какие таблицы задействованы, а также тип и имя связи. Среда выполнения WinFS управляет схемами отношений. [30] Все элементы представлены как объекты .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 () { // Имя is Displayname = "Doe, John" , FirstName = "John" , LastName = "Doe" }, TelephoneNumber = new TelephoneNumber () { // Номер телефона — это ComplexType Country = CountryCode . Антарктида , Код региона = 4567 , Номер = 9876543210 }, Возраст = 111 // Возраст — это SimpleType };                                                  //Добавляем объект в личную папку пользователя. //Это связывает элемент с псевдотипом Папка для обратной //совместимости, поскольку это позволяет получить доступ к элементу в иерархии папок //для приложений, которые не являются родными для WinFS. Папка , содержащаяFolder = UserDataFolder . НайтиМоюПерсональнуюПапку (); содержащий папку . OutFolderMemberRelationship . AddItem ( ic , контакт );          //Находим документ и связываемся с ним. Поиск начинается с создания объекта //ItemSearcher. Каждый объект типа WinFS содержит метод GetSearcher() , //который генерирует объект ItemSearcher, который ищет документы этого типа. используя ( ItemSearcher искатель = Document . GetSearcher ( ic )) { Документ d = searcher . Найти ( @"Title = 'Некоторый конкретный документ'" ); д . OutAuthoringRelationship . AddItem ( ic , контакт ); } //Поскольку нужно найти только один документ, //можно также использовать метод ItemContext.FindOne().                  //Находим изображение и связываемся с ним, используя ( ItemSearcher searcher = Picture . GetSearcher ( ic )) { Picture p = searcher . Найти ( @"Случай = 'Выпускной' и Последовательность = '3'" ); п . OutSubjectRelationship . AddItem ( ic , контакт ); }              //Сохраняемся в хранилище и закрываем ссылку на хранилище ic . Обновлять (); }  

Отношения

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

Отношения WinFS

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

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

Правила

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

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

РАВ

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

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

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

Получение данных

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

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

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

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

Поиски

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

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

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

Строка запроса OPath позволяет выразить параметры, которые будут запрошены для указания, с использованием свойств элемента , встроенных элементов , а также отношений . [ необходима цитация ] Он может указывать одно условие поиска, например "title = Something'" или составное условие, например "title = 'Title 1' || title = 'Title 2' &&author = 'Someone'" . Эти логические и реляционные операции можно указать с помощью C#, например && , || , = , != операторы, а также их английские эквиваленты, такие как EQUAL , NOT 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] [31] Кроме того , процессор запросов на естественном языке, который анализирует запрос на естественном языке и создает правильно сформированную строку запроса OPath для поиска через правильные отношения, может позволить пользователям выполнять поиск, например «найти имя». вина, которое я выпил с человеком X в прошлом месяце» , при условии, что приложения финансового управления используют WinFS для хранения счетов.

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

Уведомления

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

Информационный агент

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

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

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

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

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

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

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

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

Майкрософт Рейв

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

МагазинШпион

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

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

Тип Браузер

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

OPather

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

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

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

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

Рекомендации

  1. ^ «Утечка Windows намекает на грядущие изменения» . ЗДНет . CBS Интерактив . 30 сентября 2007 г. Архивировано из оригинала 30 сентября 2007 г.
  2. Шофилд, Джек (29 июня 2006 г.). «Почему WinFS должна была исчезнуть». Хранитель . Новости Guardian и СМИ . Проверено 9 декабря 2010 г.
  3. ^ "Концептуальное видео IWish" . Майкрософт. Архивировано из оригинала 2 июня 2006 г. Проверено 14 июля 2008 г.
  4. ^ аб Квентин Кларк (23 июня 2006 г.). «Обновление WinFS». Что в магазине . Блоги MSDN . Проверено 23 июня 2006 г.
  5. ^ abc Квентин Кларк. «Где сейчас WinFS?». Архивировано из оригинала 17 мая 2008 г. Проверено 17 мая 2008 г.
  6. ^ abcdefghijklmnopqrstu vwx Шон Уилдермут (30 июня 2006 г.). «Взгляд разработчика на WinFS: Часть 1». MSDN . Проверено 30 июня 2007 г.
  7. ^ abcd Виджай Бангару. «Объединяйте, организуйте, исследуйте и внедряйте инновации. О боже! (Часть 2)». Блог команды WinFS. Архивировано из оригинала 9 июня 2007 г. Проверено 30 июня 2007 г.
  8. ^ abcdefghijk Шон Гримальди (13 сентября 2006 г.). «Файлы WinFS: разделяй и властвуй». MSDN . Проверено 30 июня 2007 г.
  9. ^ аб Томас Риццо (13 сентября 2006 г.). «WinFS 101: Знакомство с новой файловой системой Windows». MSDN . Проверено 30 июня 2007 г.
  10. ^ abcdefghijk «WinFS на выставке .NET». Майкрософт . Архивировано из оригинала 5 января 2009 г. Проверено 4 июля 2007 г.[ постоянная мертвая ссылка ]
  11. ^ Виджай Бангару. «Объединяйте, организуйте, исследуйте и внедряйте инновации. О боже! (Часть 1)». Блог команды WinFS. Архивировано из оригинала 8 июля 2007 г. Проверено 30 июня 2007 г.
  12. ^ abcdefghijklmnopq Пол Терротт. «Предварительная версия Windows Storage Foundation (WinFS)». Архивировано из оригинала 2 июля 2007 г. Проверено 30 июня 2007 г.
  13. ^ ab «Мое свидание с Destiny, эээ… Интегрированное хранилище». Архивировано из оригинала 31 октября 2007 г. Проверено 30 июня 2007 г.
  14. ^ Кэт Эверетт. «Стоит ли Лонгхорн затраченных усилий?». ЗДНет. Архивировано из оригинала 12 марта 2010 г. Проверено 30 июня 2007 г.
  15. ^ ab «WinFS для разработчиков». NTFS.com . Проверено 4 июля 2007 г.
  16. ^ Виджай Бангару. «Доступно обновление WinFS Beta 1» . Блог команды WinFS. Архивировано из оригинала 20 мая 2007 г. Проверено 30 июня 2007 г.
  17. ^ Шан Синха. «Представляем следующий выпуск WinFS на Tech Ed 2006 в Бостоне! Присоединяйтесь к нам!». Блог команды WinFS. Архивировано из оригинала 8 марта 2007 г. Проверено 30 июня 2007 г.
  18. ^ Санджай Ананд. «Мое свидание с Destiny, эээ… Интегрированное хранилище». Блог команды WinFS. Архивировано из оригинала 31 октября 2007 г. Проверено 30 июня 2007 г.
  19. ^ Квентин Кларк. «Обновление к Обновлению». Блог команды WinFS. Архивировано из оригинала 3 июля 2007 г. Проверено 30 июня 2007 г.
  20. ^ «WinFS: Файловая система Windows (технические статьи Microsoft Access 2002)» . MSDN . Майкрософт . Октябрь 2003 г. Архивировано из оригинала 21 декабря 2003 г. Проверено 1 февраля 2018 г.
  21. ^ «Руководство по Windows Vista» . Майкрософт . 2006. стр. 44–51. Архивировано из оригинала (DOCX) 1 июля 2011 года . Проверено 1 марта 2018 г.
  22. ^ abcde Кати Димитрова. «О правилах WinFS». MSDN . Майкрософт . Архивировано из оригинала 26 декабря 2008 г. Проверено 2 марта 2018 г.
  23. Бенц, Бен (31 октября 2006 г.). «Состав запроса: построение поиска на основе другого поиска». Shell: раскрытый блог . Майкрософт . Архивировано из оригинала 15 декабря 2006 года . Проверено 2 марта 2018 г.
  24. ^ «Барон-миллиардер Билл Гейтс все еще оплакивает мертворожденную WinFS Vista».
  25. Нейт Мук (29 августа 2005 г.). «MS объясняет WinFS, выпускает бета-версию 1» . БетаНьюс . Проверено 2 июля 2007 г.
  26. ^ аб Шишир Мехротра (сентябрь 2005 г.). Будущие направления WinFS: обзор. Конференция профессиональных разработчиков 2005. Microsoft. Архивировано из оригинала (PPT) 12 декабря 2005 года . Проверено 22 мая 2023 г. - через MicrosoftPDC Commnet. {{cite conference}}: Внешняя ссылка |via=( помощь ) .
  27. Чалупов, Алексей (14 марта 2006 г.). «Архитектура WinFS». У Ольги, Дамбит (ред.). WinFS (PPT) (презентация). п. 4. Архивировано (PPT) из оригинала 9 декабря 2021 г. Проверено 22 мая 2023 г.
  28. ^ Эрвин ван дер Меер. «Первый взгляд на WinFS Beta 1». Архивировано из оригинала 9 июня 2007 г. Проверено 3 июля 2007 г.
  29. ^ Виджай Бангару. «Почтовый ящик WinFS». Блог команды WinFS. Архивировано из оригинала 22 мая 2007 г. Проверено 30 июня 2007 г.
  30. ^ abcdefghijkl Ричард Граймс. «Революционная система хранения файлов позволяет пользователям искать файлы и управлять ими на основе их содержимого». Журнал MSDN. Архивировано из оригинала 27 июня 2007 г. Проверено 30 июня 2007 г.
  31. ^ abcdefghij Шон Уилдермут (июль 2004 г.). «Взгляд разработчика на WinFS: Часть 2». MSDN . Майкрософт . Проверено 30 июня 2007 г.
  32. ^ Виджай Бангару. «Объединяйте, организуйте, исследуйте и внедряйте инновации. О боже! (Часть 4)». Блог команды WinFS. Архивировано из оригинала 18 июня 2007 г. Проверено 30 июня 2007 г.
  33. Томас Риццо, Шон Гримальди (18 октября 2004 г.). «Введение в OPath WinFS». MSDN . Майкрософт . Проверено 30 июня 2007 г.
  34. ^ abcdef Нил Пэджетт. «Получение данных в WinFS с помощью синхронизации WinFS». Блог команды WinFS. Архивировано из оригинала 17 февраля 2007 г. Проверено 30 июня 2007 г.
  35. ^ Вэй-Мэн Ли (7 сентября 2005 г.). «WinFS-StoreSpy» . Проверено 30 июня 2007 г.
  36. ^ «Веб-блог Стефано Демилиани: WinFS StoreSpy v0.8 для сборки WinHEC 2004 Longhorn» . Проверено 12 марта 2007 г.
  37. ^ «StoreSpy должен стать StoreEditor» . Архивировано из оригинала 29 сентября 2007 г. Проверено 30 июня 2007 г.
  38. ^ аб Санджай Нагамангалам. «Визуализация типов WinFS». Блог команды WinFS. Архивировано из оригинала 16 августа 2007 г. Проверено 3 июля 2007 г.
  39. ^ Луис Миранда. «Использование OPather для написания запросов». Блог команды WinFS. Архивировано из оригинала 19 ноября 2007 г. Проверено 30 июня 2007 г.
  40. ^ Шишир Мехротра. «Убойное приложение для организации пользователей». Блог команды WinFS. Архивировано из оригинала 9 марта 2007 г. Проверено 30 июня 2007 г.

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