关于图片或者文件在数据库的存储方式概括

商品图片,用户上传的头像,其余方面的图片。目前业界存储图片有两种作法: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对数据库性能调优方面的分析都能获得这个答案的:就是图片不要存储在数据库中。

相关文章
相关标签/搜索