安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當前位置:首頁 > 網站舊欄目 > 學習園地 > 程序開發教程 > 解析SQL Server的數據類型 BLOB

解析SQL Server的數據類型 BLOB
2010-01-17 10:50:16  作者:  來源:
本文解釋了SQL Server用于訪問和存儲數據的BLOB數據類型,解析了SQL Server BLOB數據存儲,訪問的方法以及如果降低你的SQL Server BLOB存儲的每個字節的總成本。

  BLOB數據是一個每條記錄都擁有大量數據的字段。這個數據可以是文本格式的或二進制格式的。當在SQL Server中使用BLOB數據時,每條記錄的數據量一般都遠遠超過了一個單獨記錄的8K的限制。

  有多種數據類型用于存儲BLOB數據,并且它們隨著時間已有所改變。可用于BLOB存儲的數據類型很多年都沒有變,但是在SQL Server 2005中,微軟推出了許多新的數據類型。在SQL Server 2008中,微軟甚至計劃推出更多的數據類型,不過到目前為止,他們還沒有在CTP版本中推出這些數據類型。

  在SQL Server 2000和更早的版本中,我們被限制于TEXT、NTEXT和IMAGE數據類型。TEXT數據類型是用于存儲非Unicode的BLOB數據,而NTEXT數據類型是用于存儲Unicode 的BLOB數據。IMAGE數據類型是用于存儲二進制BLOB數據的。你可以使用IMAGE數據類型來存儲任何二進制數據,例如圖片、office文檔、壓縮數據等等。因為數據是二進制格式的,所以它可以是Unicode的也可以是非Unicode的。

  SQL Server 2005數據類型是基于VARCHAR、NVARCHAR、VARBINARY和XML的。在使用這些數據類型時,一般你會指定要存儲的數據的最大規模。為了在這些字段里存儲BLOB數據,你要指定字段的最大規模。這些數據類型允許你在每條記錄里最大存儲2GB的數據(對于字符和二進制數據是2^31位,對于Unicode數據是2^30)。微軟計劃在未來的微軟SQL Server版本中刪除TEXT、NTEXT和IMAGE數據類型,它們的使用將會被轉換到新的VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML數據類型上。


  CREATE TABLE BlobData 
  (ID int PRIMARY KEY, 
  FirstName nvarchar(30), 
  LastName nvarchar(30), 
  EmailAddress varchar(255), 
  [Resume] nvarchar(MAX)) 


  在SQL Server 2008中,傳說我們會得到一個叫做FILESTREAM的新的數據類型,它可以將二進制數據例如office文檔存儲到和普通的數據庫文件不同的地方。通過將這個數據存儲到和普通的MDF和NDF數據文件不同的地方,我們可以將它存儲到單獨的硬盤上來將訪問BLOB數據對數據庫中其余內容造成的性能影響降到最低。

  SQL Server BLOB數據怎么存儲和訪問?

  在使用TEXT、NTEXT和IMAGE數據類型時,數據是不和普通數據存儲在一起的。一個被稱作指針的很小的二進制值,和普通數據存儲在一起。這個二進制值指向數據文件里的數據實際存儲的位置。

  當存儲VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML數據類型的數據時,如果數據小于一行數據8K的最大限制,那么這個數據被存儲到這個頁面內。但是如果這個數據比一行數據8K的最大限制大的話,它會以和存儲遺留數據類型一樣的存儲方式來存儲,并且它會通過一個二進制指針的值被訪問。

  注意:這個二進制值和位置都是在后臺處理的,對于用戶是不可見的。

  為了以TEXT、NTEXT和IMAGE數據類型讀取數據,需要使用READTEXT命令。這個命令接受一個列名還有一個16位的二進制指針,要讀取的第一個字符和要讀取的字符數目。它使用TEXTPTR函數來獲得正確的二進制指針,這個二進制指針是用于定位物理文件中的數據的:


  DECLARE @ptr varbinary(16); 
  SELECT @ptr = TEXTPTR(LongText) 
  FROM TextDataExample 
  where TextID = 1 
  READTEXT TextDataExample.LongText @ptr 1 50; 


  與READTEXT命令類似的,還有一個WRITETEXT命令用于將數據插入到記錄中去。和READTEXT命令一樣,WRITETEXT命令使用TEXTPTR函數來定位物理文件中的數據:


  DECLARE @ptr varbinary(16); 
  SELECT @ptr = TEXTPTR(LongText) 
  FROM TextDataExample 
  where TextID = 1 
  READTEXT TextDataExample.LongText @ptr 'Sample data'; 


  這些新的數據類型,不像他們之前的那些數據類型,它們可以不使用READTEXT 和WRITETEXT命令就可以很容易的被訪問到。這些新的數據類型能夠這么快就這么流行的一部分原因是因為要使用他們不需要額外的命令。你可以用我們平常操縱數據所使用的普通的SELECT、INSERT和UPDATE DML來使用這些數據類型。不幸的是,因為這個FILESTREAM數據類型還沒有發布,沒有關于怎樣使用它的示例代碼可以公布。

  隨著分層存儲而出現的成本效率

  使用一個叫做分層存儲的存儲設計是一個降低你的SQL Server BLOB存儲的每個字節的總成本的簡單方法。有了分層存儲技術,高訪問的數據被放置在更快,更貴的存儲器里。不是經常訪問的數據放在慢一些、較便宜的存儲器上。通常情況下,BLOB數據被頻繁的訪問,而由于存儲在BLOB數據列中的信息數量,使用分層存儲通常是成本最有效的存儲方法。當創建一個較便宜的存儲層時,更大的、較慢的硬盤被用來創建第二個RAID數組,而這個RAID數組是用來存放第二個文件組的,該文件組存儲BLOB數據。

  分層存儲是通過告訴SQL Server在一個獨立于行數據的文件組里存儲BLOB數據來使用的。這個指派發生在CREATE TABLE命令使用TEXTIMAGE_ON參數創建了這個表的時候。一個SQL Server表里的所有BLOB數據存儲在一個單獨的文件組里。如果你想在兩個文件間分離BLOB數據,你必須同時將你的表分割為兩個表,并通過TEXTIMAGE_ON參數為每一個表指定一個不同的組:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1), 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 

  不幸的是,一旦表被創建了就沒有簡單的方法來改變包含BLOB數據的文件組。移動BLOB數據到另一個文件組的唯一方法是創建一個新的表,將數據復制到新的表里,刪除舊的表,然后將新的表重命名為正確的名稱。

  假設你有一個用這個定義創建的表:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] 


  并且你想轉移數據到用這個定義創建的表上:


  CREATE TABLE TextDataExample 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 


  那你要用一個與這個類似的腳本:


  CREATE TABLE TextDataExample_Temp 
  (TextID int IDENTITY(1,1) PRIMARY KEY, 
  TextDescription varchar(25), 
  LongText TEXT) 
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup] 
  SET IDENTITY_INSERT TextDataExample_Temp ON 
  INSERT INTO TextDataExample_Temp 
  (TextID, TextDescription, LongText) 
  SELECT TextID, TextDescription, LongText 
  FROM TextDataExample WITH (TABLOCK) 
  SET IDENTITY_INSERT TextDataExample_Temp OFF 
  DROP TABLE TextDataExample 
  exec sp_rename 'TextDataExample_Temp', 
  'TextDataExample', 'object' 


  在這個過程中要確保在刪除舊表以后在新的表上重新創建所有需要的索引。這些索引應該在舊表被刪除之后創建,以便萬一任何腳本或存儲過程要求唯一的索引名稱才是有效的,那這樣相同的索引名稱就可以使用了。

  既然SQL Server支持BLOB數據,你在存儲BLOB數據到SQL Server中時,一定要謹慎。存儲大量BLOB數據到你的數據庫中會影響你的數據庫性能。雖然有一些方法可以在性能方面給你些幫助,但是它通常最終導致將BLOB數據移出SQL Server數據庫存入文件系統。雖然這時把BLOB數據存放在數據庫里看起來是一個簡單的解決方案,但它會導致后來隨著系統發展而來的性能問題。這個文件系統對于BLOB數據來說通常是最好的存放地址,但是如果你選擇存放到數據庫中,一定要確保小心使用。

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 内蒙古国际门窗幕墙展览会| 天津佳创博为科技有限公司|AGV控制器|无人搬运车|磁导航传感器|AGV专业零配件 | 苏州注册公司-代理工商注册-苏州及财企业服务有限公司 | 校园文化设计|文化墙建设|校园景观雕塑|校史馆设计-深圳市天合文化 | 液压万能试验机价格_电子万能试验机|摩擦磨损试验机厂家-济南辰达试验机制造有限公司 | 外圆/圆管抛光机_方管抛光机/除锈机_活塞杆抛光机-不锈钢管抛光机-邢台欧邦机械 | 耐磨螺旋叶片_耐磨螺旋绞龙_KNM螺旋耐磨材料-北京耐默 | 江苏减速机_常州减速机_摆线减速机_摆线针轮减速机 | 耐磨焊条_高硬度堆焊焊条_碳化钨合金耐磨焊丝_北京耐默 | 上海新航道学校官网_20年专注雅思_托福_SAT_ACT等出国语言培训机构. | 览众房车,房车, 房车厂家, 房车价格, 房车图片,, 四驱房车, 皮卡房车, 越野房车, 依维柯房车, 国产房车, 自动挡房车, | 乌兰察布市集宁牧田饲料科技有限公司-乌兰察布奶牛饲料|饲料原料加工|精品羊料 | 制砂机_鹅卵石制砂机_河卵石制砂机_制砂机价格-上海山卓重工机械有限公司 | 石家庄大正机电设备有限公司_| 全自动红外测油仪|全自动COD分析仪|BOD5分析仪|昂林官网 | 山西华盛筑景装饰,山西专业公装公司,太原公装装修公司,包括:办公室,酒店宾馆,商铺店铺,学校幼儿园,会所会馆饭店餐馆等装修设计 | 水热反应釜厂家_水热反应釜价格_水热合成反应釜批发-仪贝尔仪器 - 水热釜,水热反应釜,水热反应釜厂家,水热反应釜价格,水热反应釜型号,水热反应釜内衬,水热反应釜25ml,水热反应釜50ml,水热反应釜100ml,水热合成反应釜 | 日本进口东丽碳纤维材料-上海久扶新材料科技有限公司 | 今日标准_走心机_数控走心机_车铣复合_厂家_深圳今日标准官方网站 | 金属网帘|金属帘|装饰网帘|金属环网|金属幕墙网|金属垂帘|金属扣帘-安平县名图金属丝网制品有限公司 | 河北博隆环保科技有限公司-甲醛检测_甲醛治理_光触媒 | 重庆成考网_重庆成人高考网| 中科联航(江苏)-信息化监理|信息化咨询|信息系统项目管理|信息系统工程监理公司 | 围墙护栏,护栏网,围栏,锌钢栅栏,护栏网厂家--安平县沃达金属丝网制造有限公司 | 阻垢剂|缓蚀剂|杀菌剂|分散剂|水处理剂|印染助剂|水处理药剂|造纸助剂|膜阻垢剂|缓蚀剂|HEDP|ATMP|螯合剂-山东凯瑞化学有限公司 水处理药剂生产厂家 | 深圳潜水培训-潜水考证-公共安全潜水-救援潜水【深圳超潜潜水】 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 芜湖液压配件-液压过滤器滤芯-水过滤器-芜湖新俊液压设备有限公司 | 全自动视觉点胶机|在线式点胶机|精密点胶阀设备厂家-杭州迈伺特科技有限公司 | 鹰潭代理记账公司_鹰潭代理记账_鹰潭注册公司-鹰潭市新知会计服务有限公司 | 深圳展厅设计_产业园区展馆设计_展馆设计公司_健康产业展馆设计_展厅设计哪家好_华竣国际 | 河北伟业波纹管-百顺牌波纹补偿器(波纹管,膨胀节,伸缩节)、非金属补偿器 | 清洁公司| 保洁公司| 东莞清洁| 东莞保洁|壹壹清洁 | 洒水车|冷藏车|LED广告车|油罐车|道路救援车|垃圾车|程力专用汽车股份有限公司销售九分公司 | 自动门、旋转门、速通门维修保养升级服务平台_门道佰分佰【官网】 | 离岸快车 - 专业的海外离岸公司香港公司离岸账户问答平台 | 铝型材定制_东莞铝型材_散热器铝型材_工业铝合金型材挤压加工生产厂家价格-中亚铝业 | 粮食加工设备_玉米_大米_面粉_燕麦_豆类杂粮加工设备-华豫万通 | 可燃气体报警器-有毒有害气体检测仪-气体检测分析系统-宁波市高品科技有限公司 | 景德镇晶达新材料有限公司 | 消防排烟风机|3C排烟风机|正压送风机|高温排烟风机|柜式排烟风机-山东锦松环境设备有限公司 | 聚达|聚达物联|聚达物联科技|杭州聚达物联科技有限公司|www.judawulian.com|智慧社区|数字驾驶舱|智慧清运|智慧工地|邻家小达 |