分享
 
 
 

抢先体验微软最新的文件系统WINFS

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

久闻WinFS,好不容易才将内存升级到512M,在VM中安装了Longhorn后,发现WinFS还处于很基本的测试阶段,很多功能都有限制,只有一个Defaultsore目录提供了支持,而且暂时还无法去更改其设置,凡是放到里面的文件的特点都会被侦测到并加以归类。凡是从FAT32或NTFS迁移过去的文件,假如有Meta Data,比如MP3文件的ID3这类信息会被保存下来,假如无Meta Data的文件,也可以创建属于其的Meta Data。

从我的硬盘上COPY了几个MP3、WMA文件到虚拟机的硬盘上。

1.打开Computer,进入Defaultstore。

2.本想建个Music的目录,但是却出现错误,后来才发现是因为WinFS正处于测试中,无法命名其中的项。

3.将音乐文件拷到Defaultstore的根目录下。

4.在Start Menu中打开Music目录,点击左侧的Recently Added,出现刚才我新加进的几个音乐文件。

5.点击鼠标右键,选择View?Detail,然后点击上方的Genre?Stack by Genre,发现音乐文件以其音乐的类型(比如Pop)分成几个Item,点击Item进去,可以浏览该类型的文件。

6.在左侧的Filter by输入框中输入pop(注意,非音乐文件文件的名字),凡是pop类型的音乐文件都显示出来,而非该类型的音乐文件都被隐藏。

7.将一些图片放入Defaultstore中,在Start Menu中打开Photos and Videos目录,在Filter by处输入1024*768,发现大小是1024*768的图片都被显示出来。

用到这里,感觉WinFS好象没什么,只是作为一个文件的Meta Data的搜索器而已。但估计问题绝对不会象我所想的那么简单,所以便继续查找资料,追寻下去,发现了许多有趣的东西。

WinFS的数据模型:

WinFS是传统的文件系统以及关系数据库的延伸,它不仅存储以往的文件类型数据,也可以存储非文件类型的数据,比如一些个人信息、日程表、邮件等等。因此,在WinFS中存储的单位不应该用文件来描述,准确说来应该是Item。

首先要弄清楚几个概念:Types/Subtypes、Properties/Fields、Constraints、Relationships。

一.Types/Subtypes

Type和Subtype与面向对象的类及子类的概念相象,WinFS中存储的数据都是某种TYPE的实例(Instance),比如我们可以创建一个TYPE为Person的实例,这个实例拥有自己的属性,姓、名、年龄、性别等等。每种TYPE都会有自己的属性,即Properties/Fields。每种TYPE都会有自己的超类型(super type)和子类型(Subtype),与JAVA等语言类似,一个TYPE只能继承自一个超类型,但可以有多个子类型。比如Contact和Document的超类型都是Item,而Contact的子类型有Person、Group和Organization等等,Document的子类型有Image和Media等等,Image的子类型有Photo等等。WinFS中预定义了几种“Windows Type“,比如Person、Message、Document和Folder等等。Type可以被扩展,即允许用户定义自己的Type,但是现在在这个版本的WinFS中还不提供这种自定义功能。

二.Properties/Fields

Properties/Fields与类的属性的概念相似,每一个属性可以是一个标量,也可以是一个与C/C++的structure相似的结构。对于一个类型来说,可以拥有多个相同的属性,比如一个Person可以拥有多个Address属性。

三.Constraints

对于每个Propertie/Field,都可以有约束(Constraints),比如年龄必须是在什么范围内,姓名不允许为空等。但是当前发布的WinFS版本还不提供对约束的支持。

四.Relationships

在WinFS中,TYPE之间可以有关联(Relationship),Relationship创建在源类型的实例及目的类型的实例之间(源实例与目的实例可否是同一类型?)。源类型的实例是不可缺少的,一旦发现源类型的实例不存在,Relationship会立即被删除。但是目的类型的实例却可以缺少,这种缺少目的类型的实例的Relationship被称为“Dangling Relationship“。

对于一个Relationship来说,它也可以与Type那样拥有自己的Properties/Fields。举个例子,比如一个Contact与一个Message之间存在一个Participant的关系,而这个关系可以有一个nickname的属性。

在WinFS中,有两种Relationship,一种叫Holding Relationship,一种叫Reference Relationship。

1.Holding Relationship

在这种关系中,几个源实例可以拥有同一个目的实例,只要还有源实例存在,关系就存在。其还具有以下几个特点:

(1)每一个实例都必须要有一个以上的Holding Relationship指向它;

(2)具有Holding Relationship的实例间必须是处于同一个store中。(对于一个WinFS的Item来说,它完整的UNC名空间的形式是"\\machine\store\share\folder1\folder2\...\folderN\item");

(3)源实例和目的实例必须同时存在,不能允许Dangling Relationship的存在。

(4)实例间的关系不能形成回路,构成一个有向非循环图(Directed acyclic graph,DAG)。

(5)Holding Relationship采用层次式的命名空间(如上所示),每一个这样的Relationship都会指明目标实例的名称,而每一个拥有这种Relationship的源实例的名字则必须唯一。

2.Reference Relationship

在这种关系中,可以允许存在Dangling Relationship,可以允许实例分布在同一个store或者不同的store中,实例间的关系可以形成回路。比如一个Document类型的实例用一个author的关系指向一个contact类型的实例,而这个contact类型的实例也可以用一个reviewer的关系指向Document类型的实例。

以上说的都是一些很理论性的东西,这时会想,以上说的内容是通过怎样的形式表现出来呢?在操作上,在编程上。

在defaultstore目录下有一个Schemas的目录,发现里面是一些Item,比如Audio、Contact、Mail等等,与上面所说的Type的名称相对应。再翻阅资料,发现WinFS有专门的基于XML语法的Schemas Definition Language。比如Contact类型有Contact.xml作为其类型定义。而Person的定义为

<Type Name="Person" MajorVersion="1" MinorVersion="0"

ExtendsType="Core.Contact" ExtendsVersion="1"

<Field Name="BirthDate" Type="WinFSTypes.datetime"

Nullable="true" TypeMajorVersion="1"</Field

<Field Name="PersonalNames" Type="Contact.FullName"

Nullable="true" MultiValued="true"

TypeMajorVersion="1"</Field

<Field Name="PersonalAddresses" Type="Core.Address"

Nullable="true" MultiValued="true"

TypeMajorVersion="1"</Field

<Field Name="PersonalPicture" Type="Base.Link" Nullable="true"

TypeMajorVersion="1"</Field

...

</Type

编程的时候,只要将System.Storage加载进来,便可进行对WinFS的编程。比如Contact.ListContacts()方法是将storage中所有的Contact都列出来,创建一个contact的代码如下:

//This actually create the person object.

Person person = Person.CreatePersonalContact(context);

person.DisplayName = name;

//This populates the person object with some valuable data

//such as an e-mail address and a phone number

SmtpEmailAddress email = new SmtpEmailAddress("shanede@microsoft.com");

CategoryRef primaryEmailCategory = new CategoryRef(GeneralCategories.Primary);

email.Categories.Add(primaryEmailCategory);

person.PersonalEmailAddresses.Add(email);

TelephoneNumber phone = new TelephoneNumber();

phone.AreaCode="425";

phone.Number="555-1234";

person.PersonalTelephoneNumbers.Add(phone);

//This actually updates "WinFS" with the new data.

context.Update();

可惜,在这个目录下的Item都是0字节的无扩展名的,不知道到底是什么的东西,不象Schema文件。用搜索查找contact.xml文件也查找不到。找了一些与WinFS相关的程序,有纯C#的,也有使用了Avalon的,然后用MSBuilding编译。程序编译成功,但是运行出错。即使是创建新Item、更改Item属性这类简单的程序也不能运行成功。看来这个版本的Longhorn中的WinFS还有许多的限制。

玩了两天的WinFS,本来是计划再琢磨多一些关于Longhorg的东西,比如Indigo,Avalon编程和语音识别等等。即使是WinFS,也有一大堆的内容可以深究,比如它的Storage Engine、Security、Synchronization等等。但是发现现在发布的这个版本的Longhorn实在太多限制,所发布的资料中的许多特点尚不支持,而且未来肯定会有很多的变数,便决定暂且把这新奇的玩意放到一边,静观其变。其实,Longhorn离我们还挺遥远,现在的硬件水平暂时也很难满足其需求。所以,对于我们这些普通人来说,了解其概貌及发展趋势便可,深究实是大可不必。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有