程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server存儲圖像數據的策略與方法

SQL Server存儲圖像數據的策略與方法

編輯:關於SqlServer

目前對於圖像數據的管理大都采用表+實體的方法,即圖像數據以文件形式存放於指定的計算機目錄下,在數據庫表中只反映圖像數據文件的存儲路徑。這種管理模式,給數據的維護增加了難度,同時,也給數據的安全帶來一定的隱患。因此,要真正做到各類數據在數據庫中安全管理,研究和探索直接將圖像數據存儲在數據庫關系表中的方法是非常必要的。

  筆者在Visual Basic 6.0開發環境中,采用客戶機/服務器的工作方式,針對SQL Server數據庫關系表中存儲圖像數據的問題進行了初步探討,提出了一套基本解決方案,供讀者參考。

  一、 存儲圖像數據的策略

  圖像數據庫技術一直致力於解決海量數字圖像的有效存儲和管理問題。它是數據庫技術的繼承和發展,一方面,圖像數據和文本數據存在著本質的區別,在文本數據領域得以成功應用的傳統數據庫技術,如果一成不變的照搬到圖像數據庫領域,結果往往是低效,甚至無效;另一方面,傳統數據庫的許多成果,如SQL語言、索引技術等都值得圖像數據庫借鑒。上述兩個方面的結合成為目前圖像數據庫技術發展的主流。

  1.1 BLOB數據類型

  BLOB是非常巨大的不定的二進制或者字符型數據,通常是文檔(.txt、.doc)和圖片(.jpeg、.gif、.bmp),它可以存儲在數據庫中。在SQL Server中,BLOB可以是text、ntext或者image數據類型。 Image數據類型存儲的是長度不確定的二進制數據,最大長度是2GB。

  BLOB數據在SQL Server系統中的存儲方式不同於普通的數據類型,對於普通類型的數據系統直接在用戶定義的字段上存儲數據值,而對於BLOB類型數據,系統開辟新的存儲頁面來存放這些數據,表中BLOB類型數據字段存放的僅是一個16個字節的指針,該指針指向存放該條記錄的BLOB數據的頁面。

  1.2 BLOB的設計策略

  BLOB數據是數據量很大的數據類型,它會占用大量的硬盤空間、內存和網絡資源,因此合理地設計包含有BLOB數據類型的屬性表,對提高存儲效率、查詢速度有很大的影響。一般BLOB的設計原則如下:

  (1) 使用BLOB數據類型還是使用varchar或者varbinary數據類型

  二進制大對象並不一定要存儲為text、ntext或者image數據類型,它們也可以作為varchar或者varbinary數據類型村處在表格中。數據類型的選擇要根據將要存儲的BLOB的實際大小。如果數據不會超過8K,那麼就使用Varchar或者varbinary數據類型。如果這些大對象的尺寸超過8K,那麼就使用text、ntext或者image數據類型。

  (2) 存儲BLOB在數據庫中或者在文件系統中

  常見的設計問題是將圖片存在數據庫中還是存在文件系統中。在大多數情況下,最好把圖片文件與其它數據一起存在數據庫中。因為將影像數據文件存儲在數據庫中有許多優點:

  易於管理 當BLOB與其他數據一起存儲在數據庫中時,BLOB和表格是數據一起備份和恢復。這樣就降低了表格數據與BLOB數據不同步的機會,而且降低了其他用戶無意中刪除了文件系統中BLOB數據位置的路徑和風險。另外,將數據存儲在數據庫中BLOB和其他數據的插入、更新和刪除都在同一個事務中實現。這樣就確保了數據的一致性和文件與數據庫之間的一致性。還有一點好處是不需要為文件系統中的文件單獨設置安全性。

  可伸縮性 盡管文件系統被設計為能夠處理大量不同大小的對象,但是文件系統不能對大量小文件進行優化。在這種情況下,數據庫系統可以進行優化。

  可用性 數據庫具有比文件系統更多的可用性。數據庫復制允許在分布式環境中復制、分配和潛在的修改數據。在主系統失效的情況下,日志轉移提供了保留數據庫備用副本的方法。

  當然,在某些情況下,將圖片存儲在文件系統中將是更好的選擇:

  (1)使用圖片的應用程序需要數據流性能,例如實時的視頻重現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved