文件缓存系统的设计与实现
时间:2008-09-23
来源:互联网
一、项目背景
随着系统运营时间的增加,数据量与日俱增,数据库系统单张表的数量超过百万以上,数据的慢查询日志频频出现慢查询语句。根据观察得出以下规律:
大部分是查询的历史数据且重复率不高。
现行处理办法:
方法 |
可扩展性 |
复杂度 |
效果 |
查询优化 |
低 |
中 |
中 |
结构调整 |
中 |
高 |
高 |
Memcache |
高 |
低 |
低 |
二、系统架构

三、文件缓存系统说明
系统由唯一md5(global unique key)生成的零星小文件组成,每个文件存储一条数据库记录。存储系统暂时分成三级目录存储,每个目录由md5(key)的单一两个字符组成。
1.总容量:
((10 + 26) * (10 + 26)) * ((10 + 26) * (10 + 26)) *
((10 + 26) * (10 + 26)) * 1024 = 2229025112064条
2.缓存文件路径规则:
$md5 = md5($key)
$cache_file = $path.”/”.substr($md5,0,2)."/".substr($md5,3,2)."/".substr($md5, 5, 2)."/".$md5.".php";
3.数据存储格式:
/cache/6d/4a/f3/6d04af37caec85c561772d40a0540746.php
<?php
$arr_post_list[] = array (
0 => '26135',
1=> '~值得收藏的美图~-6',
2 => '2001456573',
3 => '张金鑫',
4 => 'fs4.cyworld.com.cn/data6',
5 => '1165344437538443_file.jpg',
6 => '3',
);
?>
4.使用
$sql = “SELECT id FROM table”;
$data = $db->getAll($sql);
$arr_post_list = array();
foreach($data as $record) {
$cache_file = getLocalCacheFile($record[“id”]);
require_once($cache_file);
}
5.服务器部署
Web服务器与文件缓存服务器之间通过nfs mount进行通信, Web服务器与文件缓存服务器之间是一对多的关系,每个Web服务器上有多个mount点已解决单点故障问题。每次数据更新是更新到所有的cache节点上。
6.数据表id作为主索引
因为数据表id作为主索引,因此查询时至通过索引就可以得到所需数据。
四、测试
以一张记录总数为277376条数据的表为例进行测试。
测试工具webbench
结构比较
|
前 |
后 |
结构 |
SQL + Memcache( 前 n 页 ) |
SQL + File Cache( 所有数据 ) |
SQL |
SELECT id,… FROM table … |
SELECT id FROM table |
结果 (时长30秒)
speed(pages/min) transfer(bytes/sec)
并发 |
前 |
后 |
||||||
speed |
transfer |
requets |
slow log |
speed |
transfer |
requets |
slow log |
|
1 |
170 |
221430 |
85 |
无 |
228 |
294333 |
114 |
无 |
5 |
272 |
354360 |
136 |
有 3 |
382 |
493089 |
191 |
无 |
100 |
242 |
134336 |
121 |
有 5 |
236 |
117174 |
118 |
无 |
500 |
196 |
141882 |
98 |
有 12 |
120 |
154856 |
60 |
无 |
1000 |
140 |
174381 |
70 |
有 23 |
146 |
154074 |
73 |
无 |
结论:
系统改造后的方案比改造前随并发量(或运行时长)的增加对数据库产生压力增长缓慢。
五、文件散列
散列结果相对均衡,都在9-10M之间
9.4M
./cache/b8
9.8M
./cache/7a
9.3M
./cache/7c
六、问题与挑战
1.生成的缓存文件占用硬盘较大,未压缩处理时大致十倍于数据库。
2.把对数据库的压力转嫁到磁盘IO上,产生大量的随机读取,磁盘损害几率加大。
3.大量零星的小文件存储可能遇到linux inode问题。
4.合适的文件系统未测试证实。
说明:本方案测试用例非通用,需结合自身系统自行设置业务逻辑。
原文见:http://hi.baidu.com/meizhe/blog/ ... 38e7489358072f.html
自己点进去看吧,欢迎回帖讨论!
作者: meizhe1981 发布时间: 2008-09-23
作者: 逆雪寒 发布时间: 2008-09-23
作者: meizhe1981 发布时间: 2008-09-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28