使用SQL Server 2008管理非結(jié)構(gòu)化數(shù)據(jù)
microsoft SQL Server 2008提供了一個靈活的解決方案,使得可以存儲非結(jié)構(gòu)化數(shù)據(jù),并將它與關(guān)系數(shù)據(jù)合并起來建立使用整個公司范圍內(nèi)的數(shù)據(jù)的綜合的解決方案。
導(dǎo)言
在最近幾年,個人和公司創(chuàng)建和存儲的數(shù)字數(shù)據(jù)的數(shù)量急劇膨脹。過去,企業(yè)使用計算機系統(tǒng)和數(shù)據(jù)庫以結(jié)構(gòu)化格式例如關(guān)系表或固定的格式文檔來存儲它們的大部分商業(yè)數(shù)據(jù),軟件應(yīng)用程序使用這些結(jié)構(gòu)化數(shù)據(jù)存儲來執(zhí)行商業(yè)操作。然而在現(xiàn)今,公司的很大一部分數(shù)據(jù)是存儲在使用功能強大的工具例如Microsoft Office Excel和Microsoft Office Word所創(chuàng)建的文檔中的,而數(shù)字攝影、文檔掃描、視頻產(chǎn)品和音頻格式進一步的擴大了用于商業(yè)數(shù)據(jù)的非結(jié)構(gòu)化數(shù)據(jù)格式的范圍。此外,在存儲硬件和內(nèi)存上的成本的顯著降低極大的影響了存儲在計算機中的數(shù)據(jù)的數(shù)量和類型,并導(dǎo)致產(chǎn)生了新一代的商業(yè)應(yīng)用,這些商業(yè)應(yīng)用合并了傳統(tǒng)的關(guān)系數(shù)據(jù)結(jié)構(gòu)和非結(jié)構(gòu)化數(shù)字內(nèi)容。數(shù)字內(nèi)容的豐富意味著公司現(xiàn)在正在試圖能夠在企業(yè)范圍內(nèi)管理關(guān)系數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),并需要一個能夠全面滿足關(guān)系數(shù)據(jù)存儲和非關(guān)系數(shù)據(jù)存儲,同時降低管理和建立使用這些數(shù)據(jù)的應(yīng)用程序的成本的解決方案。
例如,考慮一個保險索賠應(yīng)用程序在過去的15年里是怎樣改變的。15年前,這個應(yīng)用程序一般維護一列以簡單的行和列來存儲的保險索賠記錄。而今天,一個保險索賠應(yīng)用程序更趨向于管理一組包括圖片、照片和文檔的索賠記錄。它還可能需要以基于XML的格式來顯示索賠數(shù)據(jù),以此來與其它的系統(tǒng)集成,并且它還可能包括更高級別的功能像空間可視化、報表和分析。
SQL Server 2008提供了一些超出傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)、向能夠存儲、管理和查詢所有類型的數(shù)據(jù)的數(shù)據(jù)平臺發(fā)展的功能;包括非結(jié)構(gòu)化二進制數(shù)據(jù)、XML和空間數(shù)據(jù)。這篇白皮書集中講述了非結(jié)構(gòu)化數(shù)據(jù),并描述了使用SQL Server 2008的存儲、管理和使用非結(jié)構(gòu)化數(shù)據(jù)的選項。
商業(yè)推動非結(jié)構(gòu)化數(shù)據(jù)
大多數(shù)公司依賴于存儲在數(shù)據(jù)庫中的關(guān)鍵業(yè)務(wù)數(shù)據(jù),并在存儲和操縱這些數(shù)據(jù)的數(shù)據(jù)管理系統(tǒng)和應(yīng)用上投入很大。然而,日漸增長的業(yè)務(wù)產(chǎn)生了大量的數(shù)字圖片、文檔視頻和其它多媒體格式的非關(guān)系和非結(jié)構(gòu)化數(shù)據(jù)——這些新的數(shù)據(jù)格式迅速成為正式的和非正式的商業(yè)處理的一個關(guān)鍵組成部分,它們與現(xiàn)有的商業(yè)應(yīng)用程序集成在一起,遵守調(diào)整要求,或者簡單的提供了一個更加豐富的用戶體驗。
例如,在下面這些商業(yè)情景中:
◆ 一個保險公司需要存儲政策文檔和按照要求處理來提取這些文檔。
◆ 一個在線的零售商需要存儲用于在一個電子商城中顯示它的產(chǎn)品的視頻膠片。
◆ 一個電話系統(tǒng)需要保存語音信息的音頻流以便他們可以遠程傳送。
◆ 一個廣播臺需要制作一個在它的網(wǎng)站上用于下載的并可以搜索的廣播庫。
◆ 一個操作需要存儲文檔的圖片形式的電子拷貝,并能很容易的獲取與一個單獨的客戶端或例子相關(guān)的文檔。
◆ 一個建筑合伙企業(yè)需要存儲和提取數(shù)字計劃和其相關(guān)聯(lián)的客戶端數(shù)據(jù)。
◆ 一個需要轉(zhuǎn)換和保存大量的現(xiàn)有的文件和分類內(nèi)容的庫,用于在一個數(shù)字搜索工具中進行檢索和使用。
這些是全球商業(yè)中使用的非機構(gòu)化數(shù)字數(shù)據(jù)的一些新的例子;并且隨著創(chuàng)建數(shù)字內(nèi)容變得越來越容易,公司也在尋找新的創(chuàng)新方式來使用這個數(shù)字內(nèi)容來改進或擴展它們的商業(yè)能力。
對于非結(jié)構(gòu)化數(shù)據(jù)的挑戰(zhàn)
當新的非結(jié)構(gòu)化數(shù)據(jù)的類型在不斷增加的同時,數(shù)字內(nèi)容帶來了很多好處和商業(yè)機遇,但是它同時還帶來了一些針對需要合并這些非結(jié)構(gòu)化數(shù)據(jù)源到計算機應(yīng)用程序和服務(wù)中去的系統(tǒng)架構(gòu)師、管理員和應(yīng)用程序開發(fā)人員的挑戰(zhàn)。
存儲非結(jié)構(gòu)化數(shù)據(jù)的挑戰(zhàn)
要考慮的***個挑戰(zhàn),同時也可能是最明顯的挑戰(zhàn),就是非結(jié)構(gòu)化數(shù)據(jù)的大量存儲。你值得擁有一個使你可以靈活地滿足存儲非關(guān)系數(shù)據(jù)、同時將成本和管理費用降低到最小的特定需求的系統(tǒng)。當你計劃存儲非結(jié)構(gòu)化數(shù)據(jù)時你要考慮的主要問題包括:
◆ 存儲你的非結(jié)構(gòu)化數(shù)據(jù)的成本,不只是包括硬件成本,還包括管理成本。
◆ 非結(jié)構(gòu)化數(shù)據(jù)的物理存儲位置,例如文件服務(wù)器和網(wǎng)絡(luò)附加存儲(NAS)設(shè)備。
◆ 管理持久力和存檔政策。
◆ 將非結(jié)構(gòu)化數(shù)據(jù)文件和相關(guān)聯(lián)的關(guān)系數(shù)據(jù)集成起來,并維護結(jié)構(gòu)化數(shù)據(jù)源和非結(jié)構(gòu)化數(shù)據(jù)源間的事務(wù)一致性。
◆ 將與維護關(guān)系數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)相關(guān)的管理費用降低到最小。
◆ 性能和可擴展性。.
◆ 保護非結(jié)構(gòu)化數(shù)據(jù),并確保相關(guān)的關(guān)系數(shù)據(jù)的一致性。
◆ 非結(jié)構(gòu)化數(shù)據(jù)的可用性和可恢復(fù)性。
#p#
使用非結(jié)構(gòu)化數(shù)據(jù)的挑戰(zhàn)
還有關(guān)于存儲非結(jié)構(gòu)化數(shù)據(jù)的相關(guān)問題,你必須考慮數(shù)據(jù)將怎樣被你公司的應(yīng)用程序使用。一些具有代表性的要考慮的事項包括:
◆ 在建立使用結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的應(yīng)用程序時遇到的開發(fā)挑戰(zhàn)包括編寫代碼來創(chuàng)建、提取、更新和刪除非結(jié)構(gòu)化數(shù)據(jù),并維護相關(guān)聯(lián)的關(guān)系數(shù)據(jù)源和非結(jié)構(gòu)化數(shù)據(jù)源間的事務(wù)一致性。
◆ 索引和搜索非結(jié)構(gòu)化數(shù)據(jù)。
◆ 顯式提取可用的元數(shù)據(jù)(例如從表格區(qū)域或文件屬性),并將它顯示給用戶。
◆ 將文檔內(nèi)容轉(zhuǎn)換為可以搜索和查詢的格式(例如,轉(zhuǎn)換音頻文件到文本形式,從而可以被數(shù)據(jù)庫查詢或純文本引擎檢索到。)
在SQL Server 2008中的非結(jié)構(gòu)化數(shù)據(jù)的目標
非結(jié)構(gòu)化數(shù)據(jù)面臨的相關(guān)挑戰(zhàn)反應(yīng)了那些開始為數(shù)字內(nèi)容建立解決方案的公司所關(guān)注的一些常見情況:
◆ 管理多個不同的平臺來處理關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù),從而導(dǎo)致不必要的復(fù)雜性。
◆ 這些分散的數(shù)據(jù)存儲使得對于開發(fā)人員來說增加了復(fù)雜度,并提高了經(jīng)理的部署難度。
◆ 開發(fā)人員和數(shù)據(jù)庫管理員缺乏在這些不同的數(shù)據(jù)類型中可以使用的服務(wù)。
SQL Server 2008旨在解決這些問題,通過:
◆ 降低管理這些不同的數(shù)據(jù)類型的成本。
◆ 簡化使用關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù)的應(yīng)用程序的開發(fā)工作。
◆ 將現(xiàn)在只用于關(guān)系數(shù)據(jù)的功能擴展到非關(guān)系數(shù)據(jù)。
在SQL Server 2008中存儲非結(jié)構(gòu)化數(shù)據(jù)
依賴于關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù)的應(yīng)用程序通常使用下面的三個架構(gòu)中的一個:
◆ 數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)以及文件系統(tǒng)和文件服務(wù)器上的非關(guān)系型二進制大對象(BLOB)。
◆ 數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)和只用于BLOB的存儲中的非關(guān)系數(shù)據(jù)。
◆ 數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù)。
每一個方法都有其優(yōu)劣之處。例如,在文件服務(wù)器或只用于BLOB的存儲中存儲非結(jié)構(gòu)化數(shù)據(jù)會降低每GB所花費的費用,但是通常會增加管理和建立應(yīng)用程序的復(fù)雜性,因為應(yīng)用程序不得不維護包含BLOB數(shù)據(jù)的數(shù)據(jù)庫和單獨的系統(tǒng)中的記錄以及這些記錄所關(guān)聯(lián)的對象間的完整性。另一方面,在數(shù)據(jù)庫中存儲BLOB數(shù)據(jù)方便地集中了數(shù)據(jù)存儲,但是通常帶來了更高的成本并會導(dǎo)致性能下降。
SQL Server 2008推出了兩個用于存儲BLOB數(shù)據(jù)的新功能:
◆ FILESTREAM:是一個你可以在varbinary字段上設(shè)置的屬性,以便數(shù)據(jù)存儲在文件系統(tǒng)中(因此受益于它的快速流式功能和存儲能力)但是直接在數(shù)據(jù)庫的上下文中管理和訪問。:
◆ 遠程BLOB存儲:一個客戶端應(yīng)用程序編程接口(API),它降低了建立依賴于一個用于BLOB的外部存儲和一個用于關(guān)系數(shù)據(jù)的數(shù)據(jù)庫的應(yīng)用程序的復(fù)雜性。
此外,SQL Server 2008繼續(xù)通過varbinary 數(shù)據(jù)庫類型支持標準的BLOB字段。
SQL Server BLOB
SQL Server 2005推出了varbinary(max)數(shù)據(jù)類型,它使得你可以在一個SQL Server字段或變量中存儲***為2,147,483,647字節(jié)的大型二進制數(shù)據(jù)值。當使用修訂過的max時,你可以通過設(shè)置large value types out of row表選項來控制數(shù)據(jù)怎樣存儲在物理的表的數(shù)據(jù)頁面中。當這個選項設(shè)置為ON時,所有的值存儲在單獨的鏈接頁面上,而在這個記錄的數(shù)據(jù)頁面上會保存一個指向這些頁面的16位的根指針。當這個選項設(shè)置為OFF時,***為8000字節(jié)的值存儲在這行的數(shù)據(jù)頁面上,而更大的值存儲在單獨的鏈接頁面上。
盡管新的FILESTREAM 和遠程BLOB能力是設(shè)計用來提供比標準的varbinaryBLOB字段更好的性能和可管理性,但有一些場景是使用varbinary 字段更適合的(具有代表性的是當BLOB平均規(guī)模小于250 KB的時候。)
FILESTREAM 屬性
在SQL Server 2008中,你可以將FILESTREAM 屬性應(yīng)用到一個varbinary 字段,然后SQL Server 為這個字段在本地NTFS文件系統(tǒng)上存儲數(shù)據(jù)。在文件系統(tǒng)上存儲數(shù)據(jù)帶來兩個重大的優(yōu)勢:
◆ 性能可匹配文件系統(tǒng)的流性能。
◆ BLOB 規(guī)模只受文件系統(tǒng)的空間規(guī)模限制。
然而,字段可以像SQL Server中的其它任何BLOB字段一樣來管理,所以管理員可以使用SQL Server的可管理性和安全功能來集成BLOB數(shù)據(jù)管理和關(guān)系數(shù)據(jù)庫中的其它數(shù)據(jù)——而不需要單獨管理文件系統(tǒng)數(shù)據(jù)。在SQL Server中將數(shù)據(jù)定義為一個FILESTREAM字段還確保了在數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)和存儲在文件系統(tǒng)中的非結(jié)構(gòu)化數(shù)據(jù)在數(shù)據(jù)級的一致性。FILESTREAM字段的使用和BLOB字段一樣,這意味著維護操作的完全集成(例如備份和恢復(fù))、和SQL Server安全模型的完全集成、以及純事務(wù)的支持。
應(yīng)用程序開發(fā)人員可以通過兩個編程模型中的一個來使用FILESTREAM數(shù)據(jù);他們可以使用Transact-SQL就像對待標準的BLOB字段一樣的來訪問和操縱數(shù)據(jù),或者他們可以使用Win32流式API和Transact-SQL事務(wù)型語義來確保一致性,這意味著他們可以對FILESTREAM BLOB使用標準的Win32讀/寫調(diào)用,這和他們與文件系統(tǒng)上的文件交互時所做的一樣。
在SQL Server 2008中,F(xiàn)ILESTREAM 字段只可以將數(shù)據(jù)存儲在本地磁盤空間,并且FILESTREAM 字段不支持像簡單加密和以表為值的參數(shù)等功能。此外,你不能在數(shù)據(jù)庫快照或數(shù)據(jù)庫鏡像會話中使用包含了FILESTREAM字段的表,不過支持日志傳送功能。
#p#
遠程BLOB存儲API
盡管FILESTREAM 屬性將文件系統(tǒng)的性能和可擴展性與在數(shù)據(jù)庫中存儲BLOB的可管理性和數(shù)據(jù)一致性結(jié)合起來,但是通常會出現(xiàn)在像EMC Centera、Fujitsu Nearline、Microsoft windows®這樣的文件服務(wù)器或其它任何只用于BLOB的存儲的系統(tǒng)中存儲BLOB更有效或成本利用率更高的場景。在SQL Server 2008中的遠程BLOB存儲API通過提供一個基于提供商的架構(gòu)使得可以更容易的將只用于遠程BLOB存儲解決方案和你的數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)集成起來,這個架構(gòu)使得你的應(yīng)用程序可以使用任何BLOB存儲而不需要特定的BLOB存儲功能或代碼。
在架構(gòu)方面有兩個關(guān)鍵部分:
◆ 客戶端庫:它是一個能夠使得任何提供商和你的BLOB以及關(guān)系數(shù)據(jù)一起使用的組件。客戶端應(yīng)用程序使用客戶端庫和任何適用的提供商庫來插入、更新和查詢存儲在BLOB中的數(shù)據(jù)和數(shù)據(jù)庫中存儲的數(shù)據(jù)?! ?/P>
◆ 供應(yīng)商庫:它是一個由BLOB存儲供應(yīng)商提供的具有代表性的組件(盡管它可以定制開發(fā))。供應(yīng)商庫實現(xiàn)了一個常規(guī)接口,提供了一組標準的服務(wù),這些服務(wù)抽象了對這個特定的存儲執(zhí)行Create、Fetch、Enumerate、Delete和Garbage Collect操作的細節(jié)。
當你的數(shù)據(jù)庫BLOB需要存儲在與數(shù)據(jù)庫不同的服務(wù)器上并需要和其它系統(tǒng)協(xié)作時,遠程BLOB存儲API(Remote BLOB Store API)是一個理想的選擇。它對BLOB存儲沒有任何限制。任何提供遠程BLOB存儲提供商的系統(tǒng)或任何可以建立于遠程BLOB存儲提供商的系統(tǒng)都支持它。因為與BLOB存儲的交互細節(jié)被提供商庫抽象出來了,所以你可以改變存儲而不必改動應(yīng)用程序,這帶來了很大的好處并且降低了開發(fā)人員和管理員的復(fù)雜度。Microsoft與業(yè)內(nèi)的所有存儲供應(yīng)商合作,以確保提供一個適當?shù)墓?yīng)商庫用于遠程BLOB存儲API?!∈褂眠h程BLOB存儲API使你能夠靈活地使用不同的系統(tǒng)來管理關(guān)系數(shù)據(jù)和非關(guān)系數(shù)據(jù)。遠程BLOB存儲API通過鏈接級別的一致性維護了數(shù)據(jù)庫中的記錄與在外部存儲的BLOB之間的一致性。例如,如果你通過一個刪除語句從數(shù)據(jù)庫中刪除BLOB參照,系統(tǒng)將從存儲中刪除BLOB。然而,使用遠程BLOB存儲API不能提供隨著BLOB直接存儲到數(shù)據(jù)庫中而來的數(shù)據(jù)級別的一致性,要做到這一點你需要使用FILESTREAM或者varbinary。
比較BLOB的存儲選擇
下表比較了SQL Server 2008中的BLOB數(shù)據(jù)的存儲選擇。
|
只使用文件服務(wù)器或者BLOB存儲 |
SQL Server BLOB |
遠程BLOB存儲API |
FILESTREAM 字段 |
快速流式性能 |
取決于文件存儲 |
否 |
取決于BLOB存儲 |
Yes |
鏈接級一致性 |
是 |
是 |
是 |
是 |
數(shù)據(jù)級一致性 |
否 |
是 |
否 |
是 |
綜合管理 |
否 |
是 |
否 |
是 |
使用遠程Windows文件服務(wù)器 |
n/a |
否 |
是 |
這個版本中沒有 |
與外部的BLOB存儲協(xié)同工作 |
n/a |
否 |
是 |
否 |
這些選項意味著SQL Server 2008為存儲非結(jié)構(gòu)化數(shù)據(jù)提供了一個最適合你的業(yè)務(wù)需求的靈活的解決方案?! ?/P>
在SQL Server 2008中搜索非結(jié)構(gòu)化數(shù)據(jù)
使用非關(guān)系數(shù)據(jù)的應(yīng)用程序的一個最常見的要求是使得可以在數(shù)據(jù)上作純文本搜索?! ?/P>
綜合的純文本搜索
SQL Server 在之前的版本中支持純文本搜索。然而,它一直依賴于一個外部的服務(wù)——Windows Search Service ——作為它的純文本搜索引擎。使用外部服務(wù)產(chǎn)生了下面兩個挑戰(zhàn):
◆ 對外部服務(wù)的依賴使得部署更加復(fù)雜,也更難進行支持?! ?/P>
◆ 結(jié)合了純文本搜索謂詞和標準的SQL謂詞的查詢性能受到影響,因為從搜索的純文本部分得來的整個結(jié)果集不得不在標準的謂詞應(yīng)用之前放置在這個引擎上。查詢優(yōu)化器不能創(chuàng)建與純文本搜索謂詞協(xié)作的計劃?! ?/P>
在SQL Server 2008,純文本搜索是完全集成在數(shù)據(jù)庫引擎中的。通過將純文本引擎直接集成到SQL核心中,SQL Server 2008解決了之前版本中所面臨的挑戰(zhàn),降低了管理和部署SQL Server的成本,同時提高了搜索非結(jié)構(gòu)化數(shù)據(jù)的性能?! ?/P>
【編輯推薦】