admin 发表于 2017-3-15 00:13:18

Discuz附件分表优化

DiscuzX2附件分表优化



*************************************************
本教程基于版本:Discuz! X 2.0
*************************************************
相对于Discuz!X1.5和之前的Discuz!版本,Discuz!X2.0在附件表上做了分表优化,之前单一附件表结构,如果附件非常多。对服务器的负载要求会很大,在充分考虑附件表结构优化后,Discuz!X2.0对附件表进行了预先分表,合并forum_attachmentfield表,新增forum_attachment_0~9 十个表。这十个表的中0~9的规则为对应tid的个位数字,forum_attachment表作为了附件索引表。在上传附件时,会获取当前版块、主题id,用到getattachtablebytid()函数,添加一个新的附件索引记录,并返回新附件 id。在获取附加时,会先到forum_attachment索引表中搜索相关索引,如果存在,则直接通过tableid获取相应表中的附件信息,在附件相当多的情况下,大大节约了表查询的时间,减轻服务器负载。有新附件时附件记录表先创建索引表然后获取到aid,再插入到attachment_0~9中,包括附件下载次数。附件记录表信息为:
[*]aid '附件id',

[*]tid'主题id',

[*]pid '帖子id',

[*]tableid '附件表id',

[*]downloads '下载次数',

[*]PRIMARY KEY (aid),

[*]KEY tid (tid),

[*]KEY pid (pid)


forum_attachment_0~9表各字段为:
[*]//id

[*]aid '附件id',

[*]tid '主题id',

[*]pid '帖子id',

[*]uid '会员id',

[*]//基本属性

[*]dateline '上传时间',

[*]filename '原文件名',

[*]filesize '文件大小',   

[*]attachment '服务器路径',

[*]remote '是否远程附件',

[*]description '说明',

[*]//附属属性

[*]readperm '阅读权限',

[*]price '附件价格',

[*]//图片属性

[*]isimage '是否图片',

[*]width '附件宽度',

[*]thumb '是否是缩率图',

[*]picid '相册图片ID ',

[*]//索引

[*]PRIMARY KEY (aid),

[*]KEY tid (tid),

[*]KEY pid (pid),

[*]KEY uid (uid)

[*]) ENGINE=MyISAM '附件表';



页: [1]
查看完整版本: Discuz附件分表优化