编辑“︁
WinFS
”︁(章节)
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 資料存放區 == === 架構 === [[File:WinFSArch.svg|thumb|225px|Architecture of the WinFS Stack]] WinFS不是實體檔案系統;相反,它在NTFS檔案系統之上提供系統化的資料模型建構能力。它仍使用NTFS在實體檔案中儲存其資料<ref Name="PaulT"/>。WinFS使用從SQL Server 2005<ref>{{cite web | url = http://www.betanews.com/article/MS_Explains_WinFS_Releases_Beta_1/1125353356 | title = MS Explains WinFS, Releases Beta 1 | publisher = BetaNews | author = Nate Mook | accessdate = 2007-07-02 | archive-date = 2008-07-06 | archive-url = https://web.archive.org/web/20080706193157/http://www.betanews.com/article/MS_Explains_WinFS_Releases_Beta_1/1125353356 }}</ref>衍生的關聯式引擎來提供資料關係機制。WinFS存放區僅是已設定FILESTREAM屬性的SQL Server資料庫(.MDF)檔案<ref name="PDC">{{cite web |url=http://microsoft.sitestream.com/PDC05/DAT/DAT209_files/intro.htm |title="WinFS" Future Directions: An Overview |date=September 2005 |accessdate=2006-05-22 |author=Shishir Mehrotra |work=[[Professional Developers Conference]] 2005 presentations |publisher=Microsoft |deadurl=yes |archiveurl=https://web.archive.org/web/20060106033122/http://microsoft.sitestream.com/PDC05/DAT/DAT209_files/intro.htm |archivedate=2006-01-06 }}(Currently offline, [http://www.ntfs.com/downloads/WinFS.ppt mirror] {{Wayback|url=http://www.ntfs.com/downloads/WinFS.ppt |date=20070724121147 }}).</ref>。這些檔案是儲存在磁碟區根目錄下名為“System Volume Information”的資料夾(此資料夾具有限制的存取權)下的"WinFS"子資料夾中,其名稱為這些存放區的[[全局唯一标识符|GUID]]。<ref name="PDC"/> WinFS [[解决方案堆栈|堆疊]]的底層是'''WinFS Core''',它會與[[檔案系統]]互動並提供檔案存取與定址能力<ref name="WinFSFiles"/>。關聯式引擎使用WinFS核心服務來提供結構化的存放區與其他服務(例如:[[锁_(计算机科学)|鎖定]]將使用哪個WinFS執行階段來實作該功能。WinFS執行階段會公開服務(例如:同步處理與規則),其可用於同步處理WinFS存放區或在發生特定事件時執行特定動作<ref name="WinFSFiles"/>。 WinFS是以[[Windows Service|服務]]的方式執行,此服務會執行三個[[进程|處理程序]]<ref>{{cite web | url = http://bloggingabout.net/blogs/erwyn/archive/2005/08/30/9156.aspx | title = First Look on WinFS Beta 1 | author = Erwyn van der Meer | accessdate = 2007-07-03 | deadurl = yes | archiveurl = https://web.archive.org/web/20070609022722/http://bloggingabout.net/blogs/erwyn/archive/2005/08/30/9156.aspx | archivedate = 2007-06-09 }}</ref> - 裝載關聯式資料存放區的'''WinFS.exe'''、裝載索引編製與查詢引擎的'''WinFSSearch.exe'''以及與底層檔案系統互動的'''WinFPM.exe (WinFS File Promotion Manager)'''。您可以利用一組[[.NET Framework]] [[API]]來撰寫程式以存取其功能,這些.NET Framework API可讓應用程式定義自訂資料型別、定義資料之間的關係、儲存與擷取資訊,以及實作進階搜尋<ref name="Dev1"/><ref name="WinFSFiles"/>。接著應用程式可以彙整資料,並將資料呈現給使用者。 ==== 資料存放區 ==== WinFS將資料儲存在關聯式存放區中,這些存放區會公開為虛擬位置,稱為“存放區”<ref Name="PaulT"/>。WinFS存放區是通用存放庫,任何應用程式都可以在其中儲存資料,以及中繼資料、資料關係與結構描述。WinFS執行階段本身可以套用特定的資料關係;例如,若圖片的“subject”屬性與連絡人的“name”屬性相同,則WinFS可以在該連絡人與該圖片之間建立關聯<ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2005/09/13/465269.aspx | title = WinFS Mailbox | publisher = WinFS Team Blog | author = Vijay Bangaru | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070522092310/http://blogs.msdn.com/winfs/archive/2005/09/13/465269.aspx | archive-date = 2007-05-22 | dead-url = yes }}</ref>。資料之間的關係也可以由其他應用程式或使用者指定<ref name="MSDNMag">{{cite web | url = http://msdn.microsoft.com/msdnmag/issues/04/01/WinFS/ | title = Revolutionary File Storage System Lets Users Search and Manage Files Based on Content | publisher = MSDN Magazine | author = Richard Grimes | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070627075520/http://msdn.microsoft.com/msdnmag/issues/04/01/WinFS/ | archive-date = 2007-06-27 | dead-url = yes }}</ref> 。 WinFS提供一致性的存放區,但無法定義將儲存於存放區之資料的格式。但是,它支援以應用程式支援的特定格式寫入資料。前提是應用程式必須提供{{tsl|en|logical schema|結構描述}},以定義解譯檔案格式的方式<ref name="Dev1"/>。例如,您可以新增結構描述以讓WinFS知道如何讀取(甚至是進一步搜尋或分析)特定檔案格式,例如[[PDF]]檔案。透過使用結構描述,任何應用程式都可以讀取由其他應用程式所建立的資料,而且不同的應用程式也可以透過共用結構描述以其他應用程式支援的格式來寫入資料<ref name="MSDNMag"/>。 您可以在一部電腦上建立多個WinFS存放區<ref name="MSDNMag"/>。這樣可以獨立儲存不同類別的資料,例如,您可以將公司文件與私人文件儲存在不同的存放區中。根據預設,WinFS只提供一個存放區,其名稱為“DefaultStore”<ref Name="PaulT"/>。WinFS存放區是公開為殼層(shell)物件(類似[[虛擬資料夾]]),此物件會動態產生存放區中的項目清單,並以資料夾檢視方式呈現這些項目。利用殼層物件也可以搜尋資料存放區中的資訊<ref Name="PaulT"/>。 資料單位是以WinFS項目的方式儲存在WinFS存放區中<ref name="Dev1"/><ref name="MSDNMag"/>。WinFS項目與核心資料項目亦包含資料項目與其他資料之關聯的資訊。此“關聯”是以邏輯連結的方式儲存。連結指的是目前的項目與哪些資料項目關聯。換句話說,連結是用以指定資料與其他資料項目的關係。連結實體上是以連結識別碼來儲存,此識別碼指定資料關聯的名稱與用途,例如,“所屬型別”或“組成要素”<ref name="Dev1"/>。連結識別碼是儲存為資料項目的屬性(attribute)。具有相同連結識別碼的所有物件將被視為相關物件<ref name="Dev1"/>。您必須事先將XML結構描述(定義將儲存在WinFS中之資料項目的結構)提供給WinFS執行階段<ref name="Dev1"/>。在WinFS的Beta 1版本中,您必須先將結構描述組件新增到GAC,才能開始使用結構描述。 === 資料模型 === WinFS模型資料會使用資料項目、其[[RDBMS|關聯]]、延伸(extension)與規則來規範其使用方式<ref name="WinFSFiles"/>。WinFS必須知道資料項目的類型與結構,才能將資料項目中儲存的資訊提供給要求該資訊的應用程式。這是透過使用結構描述來完成。對於即將儲存在WinFS中的每種資料項目類型,您必須提供對應的結構描述,以定義資料的類型、結構與關聯。這些結構描述是使用[[XML]]來定義<ref name="Dev1"/>。 預先定義的WinFS結構描述不僅包含文件、電子郵件、約會、工作、媒體、音訊、視訊等的結構描述;也包含系統結構描述,其中包括組態、程式與其他系統相關資料<ref name="WinFSFiles"/>。如果要讓應用程式在WinFS中儲存資料,但不想與其他應用程式共用該資料的結構,或這些資料可跨系統提供,則可以針對個別應用程式定義自訂結構描述<ref name="WinFSFiles"/>。 ==== 型別系統 ==== [[File:WinFS1.svg|225px|thumb|WinFS Type Hierarchy]] 檔案系統與WinFS之間最大的差異在於WinFS知道其所儲存之每個資料項目的型別。型別會指定資料項目的屬性(property)。WinFS型別系統與.NET Framework的[[面向对象程序设计|類別與繼承]]概念緊密關聯。透過[[面向对象程序设计|延伸]]與巢狀化任何預先定義的型別,即可建立新型別<ref name="Dev1"/>。 WinFS提供四種預先定義的基礎型別– ''Items''、''Relationships''、''ScalarTypes''與''NestedTypes''<ref name="Dev1"/>。Item是可儲存的基礎資料物件,而Relationship則是兩個資料項目之間的關係或連結。因為所有WinFS項目都必須具有型別,儲存之項目的型別會定義其屬性(property)。Item的屬性可以是ScalarType(定義屬性可包含之資訊的最小單位)或NestedType(多個ScalarTypes和/或NestedTypes的集合)。所有WinFS型別都以.NET CLR [[类_(计算机科学)|類別]]的方式提供<ref name="MSDNMag"/>。 任何以資料單位(例如:連絡人、影像、視訊或文件等)所代表的物件都可以儲存在WinFS存放區中做為Item型別的特殊項<ref name="MSDNMag"/>。根據預設,WinFS為檔案、連絡人、文件、圖片、音訊、視訊、連絡人與郵件提供Item型別。檔案Item可以儲存任何一般資料,這在檔案系統中是儲存為檔案。但除非為檔案提供進階結構描述(透過將它定義為特殊化的Item),WinFS將無法存取其資料。此類檔案Item僅能支援與其他Item相關聯<ref name="Dev1"/>。 [[File:WinFS2.svg|225px|thumb|Defining a new Type]] 開發人員可以擴充這些型別或基礎型別Item,以為其自訂資料提供型別。Item中包含的資料是以屬性或實際儲存資料的欄位來定義。例如,''連絡人''Item可能包含型別為ScalarType的''Name''欄位,以及型別為NestedType(進一步由兩個ScalarType組成)的''Address''欄位。為定義此型別,會擴充基礎類別Item,而且會新增必要欄位至該類別<ref name="Dev1"/>。NestedType欄位可定義為包含兩個ScalarType欄位的另一個類別。一旦定義型別,就必須定義結構描述以表示每個欄位的原始型別,例如Name欄位的型別是String、Address欄位是自訂的Address類別,每個欄位的型別都是String。WinFS支援的其他原始型別包括[[整数 (计算机科学)|Integer]]、[[字节|Byte]]、[[十进制#Decimal fractions|Decimal]]、[[IEEE 754|Float]]、[[双精度浮点数|Double]]、[[真值|Boolean]]與DateTime等<ref name="Dev1"/>。結構描述也會定義哪些欄位為必要欄位,哪些欄位為選用欄位<ref name="Dev2">{{cite web | url = http://msdn2.microsoft.com/en-us/library/ms996631.aspx | title = A Developer's Perspective on WinFS: Part 2 | date = July 2004 | accessdate = 2007-06-30 | author = Shawn Wildermuth | work = MSDN | publisher = Microsoft | archive-date = 2008-04-04 | archive-url = https://web.archive.org/web/20080404203455/http://msdn2.microsoft.com/en-us/library/ms996631.aspx }}</ref>。系統會使用以此方式定義的連絡人Item來儲存有關連絡人的資訊,方式是填入屬性欄位並予以儲存。首次儲存時只需要填入標示為必要的欄位。<ref name="MSDNMag"/>其他欄位可在稍後由使用者填入,或完全不填入。若需要新增多個欄位(例如:“上次交談日期”),只要視需要簡單地擴充此型別即可。您可以使用相同的方式定義其他資料的Item型別。 [[File:WinFS3.svg|225px|thumb|Relationships]] WinFS會為所有已定義的Item建立[[RDBMS|資料表]]<ref name="Dev2"/>。為Item定義的所有欄位會構成資料表的資料欄,而每個對應Item的Item實體則會儲存為資料表的資料列。當資料表中的某些欄位參照某些其他資料表中的資料時,即表示這些資料表之間有特定的關係存在。關係的結構描述會指定相關的資料表有哪些,以及關係的種類與名稱。WinFS執行階段負責管理關係結構描述<ref name="MSDNMag"/>。所有Item都會公開為.NET CLR [[面向对象程序设计|物件]],此物件具有統一的介面,可讓應用程式輕鬆存取欄位中儲存的資料。因此,任何應用程式都可以擷取具有任何Item型別的物件,而且可以使用該物件中的資料,而不需要瞭解欄位中儲存之資料的實際結構<ref name="Dev1"/>。 WinFS型別是公開為.NET類別,它可以具現化為.NET物件。透過設定屬性即可在這些型別中儲存資料。完成之後,它們變會永久儲存至WinFS存放區。使用''ItemContext''類別即可存取WinFS存放區。ItemContext允許以交易式方式存取WinFS存放區,例如,從將ItemContext物件繫結到存放區到因為全部成功而關閉或所有變更都已復原。當資料發生變更時,它們不會寫入到磁碟;而是會寫入到記憶體內的記錄。只有當連線關閉時,變更才會以批次方式寫入磁碟。這樣可協助最佳化磁碟I/O<ref name="DotNetShow"/>。下列程式碼片段會建立連絡人並儲存在WinFS存放區中。 <syntaxhighlight lang="csharp"> //Connect to the default WinFS store using(ItemContext ic = ItemContext.Open()) { //Create the contact and set the data in appropriate properties ContactEAddress contact = new ContactEAddress(); //Name is a ComplexType contact.Name = new PersonName(); contact.Name.Displayname = "Doe, John"; contact.Name.FirstName = "John"; contact.Name.LastName = "Doe"; //Telephone number is a ComplexType contact.TelephoneNumber = new TelephoneNumber(); //ComplexType contact.TelephoneNumber.Country = CountryCode.Antarctica; contact.TelephoneNumber.Areacode = 4567; contact.TelephoneNumber.Number = 9876543210; //Age is a SimpleType contact.Age = 111; //Add the object to the user's personal folder. //This relates the item with the Folder pseudo-type, for backward //compatibility, as this lets the item to be accessed in a folder //hierarchy for apps which are not WinFS native. Folder containingFolder = UserDataFolder.FindMyPersonalFolder(); containingFolder.OutFolderMemberRelationship.AddItem(ic, contact); //Find a document and relate with the document. Searching begins by creating an //ItemSearcher object. Each WinFS type object contains a GetSearcher() method //that generates an ItemSearcher object which searches documents of that type. using(ItemSearcher searcher = Document.GetSearcher(ic)) { Document d = searcher.Find(@"Title = 'Some Particular Document'"); d.OutAuthoringRelationship.AddItem(ic, contact); } //Since only one document is to be found, the ItemContext.FindOne() method //could be used as well. //Find a picture and relate with it using(ItemSearcher searcher = Picture.GetSearcher(ic)) { Picture p = searcher.Find(@"Occasion = 'Graduation' and Sequence = '3'"); p.OutSubjectRelationship.AddItem(ic, contact); } //Persist to the store and close the reference to the store ic.Update(); ic.Close(); } </syntaxhighlight>
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息