Doms开发日记
Doms系统开发过程中的点滴
博客园
::
首页
::
联系
::
订阅
::
管理
22 Posts :: 0 Stories :: 213 Comments :: 4 Trackbacks
与我联系
发短消息
搜索
留言簿
(14)
给我留言
查看留言
我的标签
uubox.net
(4)
缩略图
(2)
ThumbCached
(2)
Doms Storage
(2)
缓存
(1)
相册
(1)
优化
(1)
防盗链
(1)
客户端
(1)
源代码
(1)
更多
随笔档案
2008年7月 (3)
2008年6月 (1)
2008年5月 (1)
2008年4月 (2)
2008年3月 (3)
2008年1月 (4)
2007年12月 (7)
相关链接
Doms Storage
研究和开发分布式网络文件存储系统的团队
uuBox.net 免费网络硬盘、文件共享社区
私人文件存储和文件共享的网站
最新随笔
1. 八种常见的防盗链方法总结及分析
2. 使用ThumbCached储存和优化相册的缩略图
3. 开源项目:ThumbCached小文件缓存及储存服务程序
4. uubox访问不了?网站暂停服务两天(6月22-23日)
5. 使用控制台显示Web项目和DLinq调试信息的小程序
积分与排名
积分 - 25669
排名 - 1560
最新评论
1. re: 八种常见的防盗链方法总结及分析
路过。虽然不懂,不过感觉mofile的防盗应该比较好。因为下载很稳定
--好好好0002566
2. re: uubox.net的一些问题解答
为什么我不能注册T0T
--- -
3. re: C#中的几个线程同步对象
简单明了 不错
好!
DING
--杨欣
4. FastDFS一个开源轻量级分布式文件系统
有机会多多交流。 可以试试纯C语言编写的开源分布式文件系统FastDFS吧,它比较轻量级,目前已提供Java Client API及文档,详情请参阅: google code下载地址:...
--happy_fish
5. re: uubox.net的一些问题解答
如果不解决下载失败这个问题,我想uubox做不下去!因为大家都想摆点资源上来提供下载!网盘的资源不能下载还叫网盘吗?
--jackie0105
阅读排行榜
1. asp.net资源网防盗链及防直接下载的实践,同时鄙视某些下载软件的野蛮行为(2687)
2. 八种常见的防盗链方法总结及分析(1975)
3. 开源项目:ThumbCached小文件缓存及储存服务程序(1793)
4. Doms Storage文件系统的设计及开发点滴(1751)
5. 使用ThumbCached储存和优化相册的缩略图(1549)
评论排行榜
1. 鼠年春节将至,给网站换个new look先(30)
2. uubox.net的一些问题解答(26)
3. 开源项目:ThumbCached小文件缓存及储存服务程序(21)
4. 八种常见的防盗链方法总结及分析(21)
5. uubox.net 增加了个性化头像设置功能(19)
使用ThumbCached储存和优化相册的缩略图
在上一篇(
http://www.cnblogs.com/uubox/archive/2008/07/14/1242588.html
)中介绍了ThumbCached的功能和使用方法,这篇主要介绍如何利用ThumbCached储存和优化相册网站中的缩略图。
为什么要用ThumbCached或者这类的程序来保存缩略图呢?
假如你正在做一个相册或带有相册功能的网站,相信第一个想到的问题是如何保存大量用户上传的照片文件。首先想到的可能是用一个大硬盘来解决咯,现在1TB的硬盘才1.5K左右,买3个做成RAID5,划分个目录出来保存所有的照片文件,问题就轻松解决了。假如过了几个月,你的网站莫名其妙地热起来,这三个硬盘的数据快爆了,这时候怎么办呢?再加3个硬盘,加到服务器机箱塞满硬盘为止,呵呵。如果所有硬盘都爆了,这时应该考虑使用分布式的文件系统(DFS)了,否则系统的扩展和数据的迁移会很头痛。DFS软件有很多可以选择,收费免费开源闭源的都有。好了,现在原始照片文件储存问题解决了,接下来看看缩略图的情况,一般相册都会对一张照片生成1个小尺寸的缩略图以供站内浏览,同时还会生成其他3、4个尺寸的小图以供到blog或论坛贴图,我们可以把这些网站产生的文件统统都存到DFS里。不过对于最小那个缩略图似乎可以优化一下,因为它们被高频率访问,同时它们很小(48*48像素的jpeg文件一般在2KB左右),大量这些文件会浪费部分磁盘空间。如果我们把这些小家伙用专门的一台服务器来装起来,并加个缓冲,再用一个轻量级的http服务程序来喷这些小数据,似乎是一个不错的优化策略。
ThumbCached本来的用途就像上段所述那样,被设计来做小缩略图的缓冲,以试图优化一些高访问率的网站(可惜的是这个组件所属的项目并没有预期的高访问量,做网站和做技术并不是一回事啊,呵呵,扯远了) ,要注意它不是文件系统,不能当成文件系统用哦。
当用户上传完照片之后,后台程序压缩并得到小缩略图,通过类似下面的代码保存到Thumbcached里。
/**/
///
<summary>
///
保存缩略图,在用户上传完照片之后调用
///
</summary>
public
void
Save(
long
fileId, DateTime lastModifyTime, Stream stream)
{
//
NOTE::stream为小缩略图文件的数据流
//
实例化ThumbCached的客户端
TCClient thumbClient
=
new
TCClient(
"
tcd001
"
);
thumbClient.Add(fileId, stream.ToArray(), lastModifyTime);
}
而在轻量级http服务程序里,读取Thumbcached里头的数据的代码大致如下:
/**/
///
<summary>
///
向客户端浏览器传送缩略图
///
</summary>
///
<param name="fileId"></param>
public
void
Show(
long
fileId)
{
//
NOTE::这里的Response应该是轻量级http服务程序中负责响应的对象。
//
这里使用了asp.net的Response的风格是为了说明大概的步骤.
//
下面的Request同样的意思。
Response.ClearContent();
Response.ContentType
=
"
image/jpeg
"
;
//
判断日期
string
lastModified
=
Request.Headers[
"
If-Modified-Since
"
];
DateTime lm
=
DateTime.MinValue;
if
(DateTime.TryParse(lastModified,
out
lm))
{
lm
=
lm.ToLocalTime();
}
//
实例化ThumbCached的客户端
TCClient thumbClient
=
new
TCClient(
"
tcd001
"
);
try
{
//
尝试从缓存中获取缩略图,并返回至用户浏览器
string
tbKey
=
fileName
+
"
-
"
+
sizeType;
ThumbBlock imgBlock
=
thumbClient.Get(tbKey, lm);
Response.AppendHeader(
"
Last-Modified
"
, imgBlock.LastModifyTime.ToUniversalTime().ToString(
"
r
"
));
Response.BinaryWrite(imgBlock.Data);
}
catch
(BlockNotFoundException)
{
Response.StatusCode
=
404
;
}
catch
(BlockNotModifyException ex)
{
//
被请求的内容在指定的时间之后没有发生改变
Response.AppendHeader(
"
Last-Modified
"
, ex.LastModifyTime.ToUniversalTime().ToString(
"
r
"
));
Response.StatusCode
=
304
;
}
catch
{
Response.StatusCode
=
500
;
}
Response.End();
}
慢着,ThumbCached本身不是内置http服务吗?为什么不直接拿他对外喷图片数据,还需要再外加一层http服务呢,这是因为有时网站可能会有一些权限控制,将网站内部的数据完全暴露应该不是一个很好的做法。
后记,发布此组件纯粹为了共享交流(包括编程和代码),请不要拿它来较真:)包括这篇文章提到的优化方案是否真实有效,呵呵。
最后,如果发现有错误或者有建议,可以回复此帖或email或到讨论组:
http://groups.google.com/group/thumbcached
讨论。
Tag标签:
ThumbCached
,
缩略图
,
相册
,
优化
posted on 2008-07-16 02:39
kwanhong young
阅读(1549)
评论(8)
编辑
收藏
Feedback
#1楼
2008-07-16 07:25
<∩扫地僧∩>
很不错的文章,受用了!
回复
引用
查看
#2楼
2008-07-16 08:41
玉开
关键实现部分被一笔带过了,这样不好吧。
回复
引用
查看
#3楼
2008-07-16 08:41
命运有自己的梦!
嗯,用MemCached缓存其它数据,用ThumbCached缓存图片及文件,很不错噢!
回复
引用
查看
#4楼
2008-07-16 09:31
飄lá┽蕩去
我不懂的是到底缓存在哪个地方了,缩略图依然是在硬盘吗?还是部分高频的在内存里,没命中就去读硬盘?
难道只是为了把缩略图集中管理,节省空间
回复
引用
查看
#5楼
[
楼主
]
2008-07-16 10:50
kwanhong young
@4
可以大致认为:ThumbCached = 缓存 + 储存
高访问的数据会放到缓存里,不活跃的数据就从缓存中移除,不同于内存式缓存系统的是,被移除的数据并不是从此就消失,它被转存到自己的(位于硬盘的)文件里头了,下次再次被访问时,它会从自己文件里调出,特别地,如果原始数据是要通过网络文件系统获取的话,那么从自己文件里调出数据会更快一些。
可能跟新浪的memcachedb有些类似,不过我没有详细研究过
回复
引用
查看
#6楼
2008-07-17 08:38
菜无罪1
这个东西最大可以支持多少g?
回复
引用
查看
#7楼
[
楼主
]
2008-07-17 09:31
kwanhong young
@6
视文件所在的分区对单个文件最大的支持是多少,例如NTFS是64G。如果每个小缩略图算5KB的话,大约最多存600万个小缩略图。
回复
引用
查看
#8楼
2008-07-17 10:46
菜无罪1
好。。多谢了,我想使用一下
回复
引用
查看
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-07-16 02:55 编辑过
最新IT新闻:
·
第一财经周刊:当前互联网世界正处无秩序时代
·
Visual Studio 2008 SDK 1.1 发布
·
死敌VMware变身微软认证计划新成员
·
英特尔雅虎开发网络计算机频道
·
Windows Live视频邮件9月9日开始测试
博客园新闻频道
博客园首页
社区
Copyright @ kwanhong young
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster