编辑“︁
WinFS
”︁
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA |G1 = IT |G2 = Windows |1 = zh-cn:实例; zh-tw:實體; }} {{distinguish|WinFX}} '''WinFS'''(全名為'''Windows Future Storage''')<ref>{{cite web | url = http://news.zdnet.co.uk/software/0,1000000121,2131385,00.htm | title = Leaked Windows hints at changes to come | accessdate = 2007-05-04 | archive-date = 2007-09-30 | archive-url = https://web.archive.org/web/20070930210357/http://news.zdnet.co.uk/software/0%2C1000000121%2C2131385%2C00.htm | dead-url = yes }}</ref>是以[[關聯式資料庫]]為基礎之資料儲存與[[data management|管理]]系統的[[Microsoft codenames|代號名稱]],它由[[微软]]開發,在2003年首次用於[[Windows]]中的進階儲存子系統,它針對[[結構化資料|結構化]]、{{tsl|en|Semi-structured model|半結構化}}與{{le|未結構化資料|Unstructured_data}}的[[持久化|保存]]與管理用途而設計。WinFS包含可用於儲存資訊的[[關聯式資料庫]],而且可儲存任何類型的資料,前提是資料類型已有完整定義的[[結構描述]]。接著,便可透過關係來建立個別資料項目之間的關聯,這樣系統便可根據特定屬性作參照,使用者也可明確地描述屬性作參照。此外,因資料具完整定義的結構描述,任何應用程式均可重複使用資料;而且透過使用關係,可有效率地組織與擷取相關資料。因系統知道資訊的結構與用途,故可作複雜的查詢,以達成資料的進階搜尋,並透過探索資料項目之間的關係來彙整各種不同的資料項目。 WinFS與其共用類型結構描述可讓應用程式識別不同的資料類型,但仍需撰寫應用程式以轉譯不同的資料類型。因此,WinFS並不適合用來開發可檢視或編輯所有資料類型的單一應用程式;其目的是讓應用程式能瞭解所有資料的結構並擷取資訊以作進一步處理。在2003專業開發人員大會,微软首度介紹WinFS,並發佈了視訊簡報,名為IWish<ref name="IWish">{{cite web | url = http://download.microsoft.com/download/c/e/2/ce28874c-4f44-4dbd-babb-727685e2be96/WinFS_IWish_720x486_2mbs.wmv | title = IWish Concept Video | publisher = Microsoft | accessdate = 2007-07-03 | deadurl = yes | archiveurl = https://web.archive.org/web/20060602015536/http://download.microsoft.com/download/c/e/2/ce28874c-4f44-4dbd-babb-727685e2be96/WinFS_IWish_720x486_2mbs.wmv | archivedate = 2006-06-02 }}</ref>,此視訊簡報提供的原型介面顯示應用程式如何公開介面以得益於統一類型系統。視訊中展示的概念包含應用程式如何使用資料項目之間的關係來動態篩選選項,及應用程式如何將多個相關資料組成群組並以統一方式呈現資料。 WinFS是眾多[[Windows Vista开发历史|“Longhorn”]]技術的基礎,而且將包含在下一版本的Windows中。原本WinFS應在[[Windows Vista]]發行後提供,但相關計畫在2006年6月擱置,然而其某些元件技術已整合到即將發行的[[ADO.NET]]與[[Microsoft SQL Server]]<ref name="canned">{{cite web | url = http://blogs.msdn.com/winfs/archive/2006/06/23/644706.aspx | title = WinFS Update | author = Quentin Clark | date = June 23, 2006 | accessdate = 2006-06-23 | work = What's in Store | publisher = MSDN Blogs | archive-date = 2010-03-05 | archive-url = https://web.archive.org/web/20100305174102/http://blogs.msdn.com/winfs/archive/2006/06/23/644706.aspx | dead-url = no }}</ref>。某些评论家指WinFS專案已完成,但[[史蒂夫·鲍尔默]]在2006年11月曾公開称WinFS仍在開發,至於此技術將以何種方式提供仍未知<ref name="WinFS Alive">{{cite web |url=http://www.crn.com/sections/breakingnews/dailyarchives.jhtml?articleId=196600671 |title=WinFS Still In The Works Despite Missing Vista |accessdate=2007-06-30 |deadurl=yes |archiveurl=https://web.archive.org/web/20121110025137/http://www.crn.com/sections/breakingnews/dailyarchives.jhtml?articleId=196600671 |archivedate=2012-11-10 }}</ref>。 == 動機 == 許多常見[[作業系統]]中的[[檔案系統]](包括近年眾多Windows 版本中使用的[[NTFS]])都將檔案與其他物件儲存為[[位元流]],且這些檔案系統對檔案中所存資料內容通常並不知道。此類檔案系統也只有一種組織檔案的方式(具體而言是透過目錄與檔案名稱)<ref name="Dev1">{{cite web | url = http://msdn2.microsoft.com/en-us/library/ms996622.aspx | title = A Developer's Perspective on WinFS: Part 1 | publisher = MSDN | author = Shawn Wildermuth | accessdate = 2007-06-30 | archive-date = 2008-04-20 | archive-url = https://web.archive.org/web/20080420111233/http://msdn2.microsoft.com/en-us/library/ms996622.aspx }}</ref><ref name="Organize">{{cite web | url = http://blogs.msdn.com/winfs/archive/2005/11/01/487894.aspx | title = Unify, Organize, Explore, and Innovate. Oh my!(Part 2) | publisher = WinFS Team Blog | author = Vijay Bangaru | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070609030458/http://blogs.msdn.com/winfs/archive/2005/11/01/487894.aspx | archive-date = 2007-06-09 | dead-url = yes }}</ref>。 因檔案系統完全不知其所存資料<ref name="Dev1"/>,應用程式常使用本身的[[檔案格式]](通常為專屬格式)。這阻礙在多個應用程式之間共用的資料。建立可處理來自多種檔案類型之資訊的應用程式變得很困難,因程式設計師須瞭解所有檔案的[[檔案格式|結構]]與{{tsl|en|Semantics#Computer science||語意}}<ref name="WinFSFiles">{{cite web | url = http://msdn2.microsoft.com/en-us/library/aa480690.aspx | title = The WinFS Files: Divide et Impera | publisher = MSDN | author = Sean Grimaldi | accessdate = 2007-06-30 | archive-date = 2007-09-13 | archive-url = https://web.archive.org/web/20070913222040/http://msdn2.microsoft.com/en-us/library/aa480690.aspx }}</ref>。使用常見檔案格式是解決此問題的暫時方案,但非治本;因無法確保所有應用程式都會使用預期的格式。具有標準化結構描述的資料(例如,[[XML]]文件與[[关系数据库|關聯式資料]])無此問題,因為它們具有標準化的結構與執行階段需求<ref name="WinFS101">{{cite web | url = http://msdn2.microsoft.com/en-US/library/aa480687.aspx | title = WinFS 101: Introducing the New Windows File System | publisher = MSDN | author = Thomas Rizzo | accessdate = 2007-06-30 | archive-date = 2007-09-16 | archive-url = https://web.archive.org/web/20070916030837/http://msdn2.microsoft.com/en-us/library/aa480687.aspx }}</ref>。 此外,傳統檔案系統只能根據檔案名稱來擷取與搜尋資料,因為它對資料所知的範圍僅限於用儲存資料之檔案名稱<ref name="WinFSFiles"/>。較好的解決方案是使用屬性為檔案加上標記(tag),此處所謂的屬性可描述檔案內容。屬性是有關檔案的[[中繼資料]],如檔案類型(例如:''文件、圖片、音樂、建立者''等)<ref name="Dev1"/>。這樣可讓系統依屬性(而非使用資料夾階層)來搜尋檔案(例如:尋找“''包含人員X的圖片''”)。檔案系統本身即可識別屬性,或透過某些延伸模組來識別屬性<ref name="Dev1"/>。桌面搜尋應用程式進一步採用此概念。它們會從檔案擷取資料(包含屬性)並為檔案編製索引。為了擷取資料,它們為每種檔案格式使用一個篩選器。這樣就可依檔案屬性與檔案中所包含的資料來搜尋檔案<ref name="Dev1"/>。 但是,這仍不足以協助管理相關資料,因為不同的項目之間並未定義任何關係(例如:無法搜尋“''住在墨西哥阿卡波可市、在我的相片集中出現超過一百次、且我最近一個月曾經與其有過電子郵件往來的所有人員的電話號碼''”)。若要完成這種搜尋,必須要一種同時定義[[語意]]與資料關係的資料模型<ref name="Dev1"/><ref name="Organize"/>。WinFS的目的是提供這樣的資料模型與執行階段基礎結構,以便儲存資料與資料項目之間的關係(根據資料模型),同時以儘量不影響效能的方式完成此動作。 == 概觀 == WinFS可識別各種類型的資料,例如:''圖片''、''電子郵件''、''文件''、''音訊''、''視訊''、''行事曆''、''連絡人''等;不像檔案系統只能識別位元流。由系統儲存與管理的資料是WinFS執行階段所識別之資料類型的執行個體。資料結構的基礎是屬性。例如,''履歷''類型的執行個體將透過公開特定屬性(例如''姓名''、''教育程度''、''工作經驗''等)來描述資料。屬性的類型可能是''字串''、''整數''或''日期''等簡單類型,或''連絡人''之類的複雜類型<ref name="WinFSFiles"/><ref name="DotNetShow">{{cite web | url = http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=e049f148-460c-47af-93a0-dfd0f4edf598&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f6%2fb%2f6%2f6b659b87-eafa-4c15-8783-1476e59bba13%2fdotnetshow41_300k.EXE | title = WinFS on The .NET Show | accessdate = 2007-07-04 }}{{Dead link|date=2018年8月 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>。不同的資料類型會公開不同的屬性。此外,WinFS也允許不同的資料執行個體與彼此關聯,例如您可以利用''作者''關係來建立文件與連絡人之間的關聯<ref name="Organize"/><ref name="DotNetShow"/>。關係也會公開為屬性,例如若文件是透過''建立者''關係與連絡人關聯,則文件將具有''建立者''屬性。當文件被存取時,系統會偵測到該關係並傳回相關資料<ref name="DotNetShow"/>。藉由依循該關係即可擷取所有相關資料<ref name="Organize"/>。 WinFS透過讓所有應用程式存取資料類型與其結構描述的方式來達成應用程式之間的資料共用<ref name="WinFSFiles"/>。因此當任何應用程式想要使用WinFS類型時,可以使用結構描述來瞭解資料的結構,並有效利用資訊。因此,即使開發人員並未撰寫[[剖析器]]來識別不同的資料格式,應用程式也可以存取系統上的所有資料。它也可以使用關係與相關資料來建立動態篩選器,以不同的方式呈現應用程式所處理的資訊。WinFS API進一步將資料的存取工作抽象化。所有WinFS類型都公開為[[.NET Framework|.NET]] [[面向对象程序设计|物件]],而物件的屬性則直接對應到資料類型的屬性<ref name="Dev1"/>。此外,透過讓處理相同資料的不同應用程式共用相同的WinFS資料執行個體,而非將相同的資料儲存為不同的檔案格式,系統管理員便不需要在資料發生變更時同步不同的存放區<ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2005/10/24/484380.aspx | title = Unify, Organize, Explore, and Innovate. Oh my!(Part 1) | publisher = WinFS Team Blog | author = Vijay Bangaru | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070708065606/http://blogs.msdn.com/winfs/archive/2005/10/24/484380.aspx | archive-date = 2007-07-08 | dead-url = yes }}</ref>。因此WinFS可協助避免資料重複儲存的情形<ref name="Dev1"/><ref name="WinFS101"/>。 透過存取系統中所有資料的能力,您可以建立複雜的搜尋來尋找由WinFS所管理之所有資料項目中的資料。在上述範例(''“住在墨西哥阿卡波可市、在我的相片集中出現超過一百次、且我最近一個月曾經與其有過電子郵件往來的所有人員的電話號碼”'')中,WinFS可以周遊所有相片的''主體''關係以尋找''連絡人''項目。同樣地,它也可以篩選最近一個月的電子郵件並存取''通訊對象''關係以與連絡人聯繫。接著,系統便可以從上述兩個搜尋結果中找出適當的連絡人,並透過存取連絡人項目的適當屬性來擷取其電話號碼。 除了完全語意化的資料(如同[[XML]]與[[关系数据库|關聯式]]資料)之外,WinFS也支援半結構化資料(例如影像,影像具有未結構化的位元資料流與結構化的中繼資料)以及未結構化資料(例如檔案)。它可將未結構化的元件直接儲存為檔案,同時將結構化的中繼資料儲存在結構化的存放區中<ref name="DotNetShow"/>。WinFS在內部使用[[關聯式資料庫]]來管理資料。但是,它不會將資料限制為屬於任何特定資料模型,例如[[关系模型|關聯式]]或[[层次模型|階層式]],而且它可以是任何已完整定義的結構描述。WinFS執行階段會將結構描述[[对象关系映射|對應]]到關聯式特徵(modality)<ref name="Dev1"/>,方式是定義將儲存類型的資料表,以及重新呈現關係時所需的[[主索引鍵]]與[[外部索引鍵]]。WinFS預設包含物件與XML結構描述的對應;至於其他結構描述的對應,則必須另行指定。物件結構描述是使用XML來指定;WinFS會產生指令碼以將結構描述公開為[[.NET Framework|.NET]] [[类_(计算机科学)|類別]]。您可以使用[[ADO.NET]]直接指定關聯式結構描述,雖然您必須提供物件結構描述的對應以將它以類別方式公開<ref name="DotNetShow"/>。所有關係周遊動作都是在這些資料表上以[[关系代数_(数据库)|Joins]]方式執行。WinFS也會自動在這些資料表上建立[[数据库索引|索引]],以便應用程式可以更快速地存取資訊<ref name="DotNetShow"/>。索引可大幅加快Joins的速度,因此周遊關係以擷取相關資料的動作非常快。搜尋資訊時也會使用索引;搜尋與[[查詢語言|查詢]]會使用索引,因此操作可以快速完成,這跟桌面搜尋软件很类似。 == 發展 == {{更新|time=2020-09-23T16:42:17+00:00}} {{Graphical timeline | help=off | from=1990 | to=2007.99 | scale-increment=1 | title=結構化存放區時間表 | align=right | width=15 | height=275 | height-unit=px | title-colour=#dcdcdc | plot-colour=#d3d3d3 | bar1-from=1990 | bar1-to=1994 | bar1-text=[[Cairo (operating system)|Cairo]]中的<span title="物件檔案系統">OFS</span><ref name="PaulT"/> | bar1-colour=#b0c4de | note1 = 已取消 | note1-at = 1992 | bar2-from=1995 | bar2-to=1996.5 | bar2-text=Storage+,使用[[Microsoft SQL Server|SQL 7.0]]<ref name="PaulT"/> | bar2-colour=#d8bfd8 | note2 = 已取消 | note2-at = 1996 | bar3-from=1996.5 | bar3-to=1998 | bar3-text=<span title="關聯式檔案系統">RFS</span>,使用[[Microsoft SQL Server|SQL 2000]]<ref name="PaulT"/> | bar3-colour=#9acd32 | note3 = 已取消 | note3-at = 1997.5 | bar4-from=1998 | bar4-to=2000 | bar4-text= [[Microsoft Exchange Server|Exchange Webstore]]<ref name="Destiny">{{Cite web |url=http://blogs.msdn.com/winfs/archive/2006/02/24/538925.aspx |title=My tryst with Destiny, err…Integrated Storage |access-date=2008-01-25 |archive-url=https://web.archive.org/web/20071031054259/http://blogs.msdn.com/winfs/archive/2006/02/24/538925.aspx |archive-date=2007-10-31 |dead-url=yes }}</ref> | bar4-colour=#f4a460 | note4 = 功能縮減 | note4-at = 1999 | bar5-from=2000.5 | bar5-to=2002 | bar5-text=[[Microsoft Outlook|Outlook]] <span title="本機資訊存放區">LIS</span><ref name="Destiny"/> | bar5-colour=#ffb6c1 | note5 = 功能縮減 | note5-at = 2001.5 | bar6-from=2003 | bar6-to=2006 | bar6-text=<span title="Windows Future Storage">WinFS</span><ref name="PaulT"/> | note6 = 已取消 | note6-at = 2005 | bar7-from=2006 | bar7-to=2008 | bar7-text=開發中<ref name="WinFS Alive"/> | bar7-colour=#ffd700 | note7 = 沒有已知資訊 | note7-at = 2007.5 | caption = 各種結構化儲存專案的時間表<br/>,由[[Microsoft]]提供。上述技術並沒有任何一項已發展為全功能<br/>執行階段並提供相關API。此外,年度僅為預估。 }} WinFS的開發是1990年代早期計畫之功能的延續,此功能稱為'''物件檔案系統(Object File System,簡稱OFS)''',它原本應該包含在[[Cairo (operating system)|Cairo]]專案中。OFS被認為應該具有強大的資料彙整功能<ref Name="PaulT">{{cite web | url = http://www.winsupersite.com/showcase/winfs_preview.asp | title = Windows Storage Foundation (WinFS) Preview | author = Paul Thurrott | accessdate = 2007-06-30 | deadurl = yes | archiveurl = https://web.archive.org/web/20070702131752/http://www.winsupersite.com/showcase/winfs_preview.asp | archivedate = 2007-07-02 }}</ref>。但Cairo專案當時遭擱置,因此OFS也被延宕。但是,稍後在開發[[Component Object Model|COM]]時,規劃了一個稱為'''Storage+'''(以後來發行的SQL Server 8.0為基礎)的儲存系統,Storage+預期應提供類似的彙整功能<ref Name="PaulT"/>。但是,這項計畫也沒有實現,而類似的技術'''關聯式檔案系統(Relational File System,RFS)'''據信將在SQL Server 2000中提供<ref Name="PaulT"/>。但是,SQL Server 2000最後只是對於SQL Server 7.0進行些許更新,但並未實作RFS。 但此概念從未被忘卻<ref Name="PaulT"/>。因此才有WinFS的出現。WinFS原本預計包含在[[Windows Vista]]中<ref>{{cite web | url = http://news.zdnet.co.uk/software/0,1000000121,39191853,00.htm | title = Will Longhorn be worth the pain? | publisher = ZDNet | author = Cath Everett | accessdate = 2007-06-30 | archive-date = 2010-03-12 | archive-url = https://web.archive.org/web/20100312103502/http://news.zdnet.co.uk/software/0,1000000121,39191853,00.htm }}</ref>,以及後來代號名稱為“Longhorn”的Windows Vista 組建4051(此版本在2003年的微软[[专业开发者大会]]公开发布),但當時WinFS有嚴重的效能問題<ref Name="PaulT"/>。在2004年8月,微软宣布WinFS將不會內建於Windows Vista;而是會在Vista正式發行後以可下載的更新方式提供<ref Name="PaulT"/>。 在2005年8月29日,微软悄悄地將WinFS Beta 1提供給MSDN訂戶。該版本可以在[[Windows XP]]运行,而且需要[[.NET Framework]]才能執行。WinFS API包含在“System.Storage”命名空間中<ref Name="PaulT"/><ref Name="ForDev">{{cite web | url = http://www.ntfs.com/winfs_developers.htm | title = WinFS for Developers | publisher = NTFS.com | accessdate = 2007-07-04 | archive-date = 2007-07-03 | archive-url = https://web.archive.org/web/20070703225942/http://www.ntfs.com/winfs_developers.htm | dead-url = no }}</ref>。該Beta版本在2005年12月1日更新,以與.NET Framework 2.0相容<ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2005/12/01/499042.aspx | title = WinFS Beta 1 Refresh now available | author = Vijay Bangaru | publisher = WinFS Team Blog | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070520220552/http://blogs.msdn.com/winfs/archive/2005/12/01/499042.aspx | archive-date = 2007-05-20 | dead-url = yes }}</ref>。WinFS Beta 2預計在2006年末推出<ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2006/05/22/604075.aspx | title = Showing off the next release of WinFS at Tech Ed 2006, in Boston! Join us! | author = Shan Sinha | publisher = WinFS Team Blog | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070308041330/http://blogs.msdn.com/winfs/archive/2006/05/22/604075.aspx | archive-date = 2007-03-08 | dead-url = yes }}</ref>,而且預期會與[[Windows桌面搜尋]]整合,因此搜尋結果會包含來自一般檔案與WinFS存放區的結果;此外,您可以使用[[ADO.NET]]來存取WinFS資料<ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2006/02/24/538925.aspx | title = My tryst with Destiny, err…Integrated Storage | publisher = WinFS Team Blog | author = Sanjay Anand | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070709153653/http://blogs.msdn.com/winfs/archive/2006/02/24/538925.aspx | archive-date = 2007-07-09 | dead-url = yes }}</ref> 。 但是,在2006年6月23日,微软的WinFS團隊宣布將不再以獨立產品方式提供WinFS<ref name="canned" />,而且某些元件將以其他技術提供 - 例如[[对象关系映射]]元件至[[ADO.NET Entity Framework]];支援未結構化資料、操作的無管理模式、透過<code>FILESTREAM</code>資料類型支援[[檔案系統]]物件,以及[[Microsoft SQL Server#SQL Server 2008|SQL Server 2008]](代号名稱為“Katmai”)中的階層式資料<ref name="where">{{cite web | url = http://perspectives.on10.net/blogs/jonudell/Where-is-WinFS-now/ | author = Quentin Clark | title = Where is WinFS now? | accessdate = 2008-05-17 | archive-url = https://web.archive.org/web/20080517092633/http://perspectives.on10.net/blogs/jonudell/Where-is-WinFS-now/ | archive-date = 2008-05-17 | dead-url = yes }}</ref><ref>{{cite web | url = http://blogs.msdn.com/winfs/archive/2006/06/26/648075.aspx | title = Update to the Update | author = Quentin Clark | publisher = WinFS Team Blog | accessdate = 2007-06-30 | archive-url = https://web.archive.org/web/20070703214245/http://blogs.msdn.com/winfs/archive/2006/06/26/648075.aspx | archive-date = 2007-07-03 | dead-url = yes }}</ref>,以及與[[Win32]]API及[[Windows Shell]]整合,以及在未來的[[Microsoft SQL Server]]版本中透過周遊關係以支援階層的周遊<ref name="where"/>;以及將元件同步到{{tsl|en|Microsoft Sync Framework|Microsoft Sync Framework}}<ref name="where"/>。但是尚未排除在[[Windows]]的未来版本中内置WinFS的情况<ref name="where"/>。 微软宣布此消息之後,大部分评论分析家均認為WinFS專案已遭放棄。但在2006年11月,[[鲍尔默]]在一場会议中說明WinFS仍在開發中,但要等到技術成熟時才會整合到Windows程式碼基础。2006年12月,[[比爾蓋茲]]的会议證實此消息,而且微软計畫移植[[Windows Media Player]]、[[Windows Photo Gallery]]、[[Microsoft Outlook]]等應用程式以使用WinFS做為資料儲存後端<ref name=msdn267149>{{cite web|author=Daniel Kornev|url=http://channel9.msdn.com/ShowPost.aspx?PostID=267149|title=A few words about WinFS: The project is back on track|publisher=Channel 9|date=2006-12-19}}</ref>。 2013年,比爾蓋茲称WinFS项目的擱置是他对微软最大的失望,并且认为WinFS已经超越了时代<ref>{{Cite web|title=Billionaire baron Bill Gates still mourns Vista's stillborn WinFS|url=https://www.theregister.com/2013/02/12/bill_gates_reddit_ama/|date=2013-02-12|accessdate=2020-09-23|work=www.theregister.com|language=en|archive-date=2021-12-09|archive-url=https://web.archive.org/web/20211209060928/https://www.theregister.com/2013/02/12/bill_gates_reddit_ama/}}</ref>。 == 資料存放區 == === 架構 === [[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> == 參考文獻 == {{reflist|2}} == 參見 == *[[:Category:微软磁盘文件系统|分类:微软磁盘文件系统]] **[[FAT]] **[[NTFS]] **[[ReFS]] * [[RDBMS|關聯式資料庫管理系統]] * {{tsl|en|GNOME Storage|GNOME Storage}},[[GNOME]]桌面的儲存管理系統 * [[NEPOMUK]] == 外部連結 == * [https://web.archive.org/web/20100124145541/http://blogs.msdn.com/winfs/ WinFS Blog] * [https://web.archive.org/web/20060602151743/http://msdn.microsoft.com/data/ref/winfs/ WinFS at the Microsoft Developer Network] * [https://web.archive.org/web/20080118162558/http://channel9.msdn.com/Showforum.aspx?forumid=14&tagid=4 Channel 9 Videos] * [https://web.archive.org/web/20070314165346/http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.windows.developer.winfx.winfs WinFS Newsgroup] * [https://web.archive.org/web/20070702131752/http://www.winsupersite.com/showcase/winfs_preview.asp WinFS Beta 1 Review] * [https://web.archive.org/web/20071225122555/http://www.netfxguide.com/guide/winfs.aspx WinFS area on NetFXGuide.com] {{Filesystem}} {{Microsoft Windows components}} [[Category:微軟API]] [[Category:Windows管理]] [[Category:微软磁盘文件系统]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息