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

  久闻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、Constras、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中还不提供这种自定义功能

   2.Properties/Fields

  Properties/Fields和类属性概念相似个属性可以是个标量也可以是个和C/Cstructure相似结构对于个类型来说可以拥有多个相同属性比如个Person可以拥有多个Address属性

   3.Constras

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

   4.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中(对于个WinFSItem来说它完整UNC名空间形式是"\\machine\store\share\folder1\folder2\...\folderN\item");

  (3)源例子和目例子必须同时存在不能允许Dangling Relationship存在

  (4)例子间关系不能形成回路构成个有向非循环图(Directed acyclic graphDAG)

  (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>

  编程时候只要将.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 = SmtpEmailAddress("[email protected]");
   CategoryRef primaryEmailCategory = CategoryRef(GeneralCategories.Primary);
   email.Categories.Add(primaryEmailCategory);
   person.PersonalEmailAddresses.Add(email);

   TelephoneNumber phone = TelephoneNumber;
   phone.AreaCode="425";
   phone.Number="555-1234";
   person.PersonalTelephoneNumbers.Add(phone);

   //This actually updates "WinFS" with the data.
   context.Update;


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

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




  • 篇文章: 浅谈国内抗DDOS防火墙----打击冰盾防火墙专用工具介绍

  • 篇文章: “病毒”文件另类妙用
  • Tags:  linux文件系统 分布式文件系统 文件系统 winfs文件系统

    延伸阅读

    最新评论

    发表评论