2013-06-19 71 views
5

有很多次我想將圖像保存到SQL Server。我看過一些做法保存圖像:在SQL Server中保存圖像的最佳實踐

1)上傳並保存圖片到服務器,保存表

2)保存圖像爲二進制

3內的路徑)保存圖像爲base64字符串

4)使用BLOB(我還沒有研究過它是如何工作的)

你知道當你向服務器請求圖像時哪種「方式」更快嗎? 你知道哪個「方法」更好,以免讓SQL服務器變慢嗎? 你是否知道其他「更好」的方法?

謝謝!

+0

可能的重複[在SQL Server中存儲圖像?](http://stackoverflow.com/questions/5613898/what-about-storing-images-in-sql-server) – Lamak

+0

@Lamak它不只是關於Blob或不Blob。我在發佈之前搜索過stackoverflow。我在那篇文章中搜索的是發現者的經驗所說的! –

+0

而且這個鏈接不僅僅是「Blob or Not to Blob」。 _它有很多關於它們的好點 – Lamak

回答

4

有關此主題,Microsoft已完成some research,並得出結論,這取決於您的圖像的大小。如果你的大多數圖像是< 256Kb,你應該使用VARBINARY。另一方面,如果它們高於1Mb,則應使用FILESTREAM(通常存儲在數據庫文件外的文件系統中)。

如果您的圖像與其他數據鏈接,將記錄本身與圖像分隔到不同的表格(即創建圖像表格)通常很有用,以便數據表格保持較小且易於操作。

+0

base64。獲取字符串,將其轉換爲客戶端中的image或byte()並使用它? –

+2

它會佔用更多的空間(大約多37%)。什麼是優勢? –

+0

讓我們說你有一個SQL中的圖像。您第一次下載到客戶端並保存它。第二次檢查CHECKSUM以查看base64是否已更改(字符串很容易),如果它刪除了存儲的文件並且您下載了新的文件。使用FILESTREAM可以檢查更改嗎? –

3

請注意,沒有「最好」的方式普遍,但只有最適合您的具體需求。

「當你從服務器請求圖像時,你知道哪個」方式「更快嗎?」 - 在這種情況下#1,因爲你本質上是將圖像存儲在文件系統中,並且只從數據庫檢索圖像路徑。

「你知道哪個」方法「更好,以免SQL服務器變慢?」 - 再次#1因爲它必須處理更少的數據。 SQL Server更容易檢索表示存儲圖像的路徑的varchar,而不是以任何形式檢索圖像本身。

1號是最簡單,可能比較容易建立,但請注意,也有缺點:

  • 如果一些圖像從文件系統的SQL Server刪除沒有一個線索,這件事發生
  • 當您刪除SQL Server行,你也需要從文件系統中刪除圖像(如果你想保持事情說清楚;))
  • 您還需要備份數據從文件系統,而不是僅在SQL Server數據庫