關於圖片或者文件在數據庫的存儲方式概括

商品圖片,用戶上傳的頭像,其餘方面的圖片。目前業界存儲圖片有兩種作法:php

一、  把圖片直接以二進制形式存儲在數據庫中mysql

通常數據庫提供一個二進制字段來存儲二進制數據。好比mysql中有個blob字段。oracle數據庫中是blob或bfile類型sql

 

二、  圖片存儲在磁盤上,數據庫字段中保存的是圖片的路徑。數據庫

 

1、圖片以二進制形式直接存儲在數據庫中併發

 

第一種存儲實現(php語言):oracle

大致思路:性能

一、將讀取到的圖片用php程序轉化成二進制形式。再結合insert into 語句插入數據表中的blob類型字段中去。fetch

三、  從數據庫取出圖片展現的時候。則是直接發送圖片內容this

四、  orm

$row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row->this_image;

實現代碼以下:

$PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假設這是上傳的圖片,php放在一個臨時文件夾。腳本執行完畢後自動刪除了。

 

$imgStream = fread(fopen($PicturePath, "r");

 

$blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));

 

$sql =」 INSERT INTO Images (this_image) VALUES ($blob_img)";

注:this_image就是數據表中一個blob字段類型的字段

 

================取出展現圖片代碼

$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query"); $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row-> this_image;

 

 

總結:處理代碼感受還真比較麻煩。其實,我歷來沒用過在數據庫中以二進制存儲圖片的作法。咱們用得更多的是存儲圖片的路徑,實際圖片是在磁盤上保存的。

 

 

據我瞭解,互聯網環境中,大訪問量,數據庫速度和性能方面很重要。通常在數據庫存儲圖片的作法比較少,更多的是將圖片路徑存儲在數據庫中,展現圖片的時候只須要鏈接磁盤路徑把圖片載入進來便可。由於圖片是屬於大字段。一張圖片可能1m到幾m。

有個原則:圖片儘可能不要存儲在數據庫中。這樣的大字段數據會加劇數據庫的負擔,拖慢數據庫。在大併發訪問的狀況下很重要。這是一個經驗。去看看dba對數據庫性能調優方面的分析都能獲得這個答案的:就是圖片不要存儲在數據庫中。

相關文章
相關標籤/搜索