快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

Ag亚游国际网站:Discuz2.0到Discuz5.0升级成功笔记



先说为什么进级吧,可能懂得Discuz!的同伙看到版本号就知道为什么进级了。没错,版本太低,论坛成长受到很大年夜制约成了进级的一个紧张缘故原由;别的一个紧张缘故原由便是进级前的一段光阴社区造访量又有大年夜幅上升,负载能力的不够,给用户带来不良体验,影响用户发贴积极性,制约社区成长。于是痛下决心进级...(ps:我是刚来到公司,系统早该进级了但因为职员不够不停没能落实),全部进级历程由我主刀,前期筹备也便是仔细比较现有社区数据库与dz5.0数据库。自从开始应用dz2.0,就开始对其改造,颠末近两年的改造,从法度榜样到数据库被篡改的地方Ag亚游国际网站异常多真可谓“面貌全非”,法度榜样的效率及负载能力也是以受到影响。

下面废话就不多说了,先讲一下大年夜概的历程吧。

既然进级就必要有所取“舍”,轻装上阵才是硬事理(并不是要丢弃一些数据,只是放到着末去做)。

一:阐发用户数据;

①. 因为dz2时期用户资料及个性设置均存储在members表,而dz5是将用户信息和具体资料个性设置分手存储在members,和memberfileds两个表中。

②. 两个版本对付用户组的统计存储有较大年夜篡改,dz2时期整个寄托credit的值对比usergroup中的设置来确定用户组,而dz5则是根据credits确定用户组之后将组id保存在groupid字段,是以在转移用户数据时就必要对用户组设置有较周全的懂得,主如果懂得各个用户组的划分边界及组id,在写进级法度榜样时要用到这些数据。

③. dz2时期用status来区分用户权限,而dz5顶用adminid,groupid来反省权限,是以进级法度榜样要对status为Admin,SuperMod,Moderator,Banned,PostBanned,Inactive的用户从新分配groupid而不能单一经由过程②中的措施确定。其他字段的数据很轻易处置惩罚,也没什么特殊之处而且有一部分是两个版真相同的字段。

④. 由于曩昔安装的银行跟现在的银行也有较大年夜改变,dz2时期在用户表中有bank和money字段分手存储存款和现金,dz5中没有存款字段了,只好把用户的存款整个加到现金中,然后保存到dz5的银行扩展字段extcreditsX (X=1,2,…8)。还有一个必要留意的便是存款的利息,(虽然你可能会感觉这个应该是毛毛雨啦,但用户会很在意的。。。)转移银行存款时一路结算吧~~

二:阐发帖子数据;大年夜家都知道,帖子数据是要分threads和posts两个表的,是以在这一步还要分开斟酌threads和posts,要留意的便是帖子类型的不合,转数据时会涉及到其他表。从dz2时期就有了"投票帖","附件",进级法Ag亚游国际网站度榜样在碰到这些特殊帖子时就必要同时转移投票选项及附件的数据(当然你也可以一个表一个表的转),怎么判断碰到了这些特殊帖?有两个字段可以参考dz2.threads.pollopts和dz2.posts.aid。对付threads表,

①. 必要留意的是authorid,在dz2的threads表不记录Ag亚游国际网站发帖者uid,是以必要查出dz2.threads表中每条数据对应的uid。

' http://Ag亚游国际网站www.mypchelp.cn/article.asp?typeid=114

②. 转移投票帖时必要留意的是:dz2对投票选项采纳了serialize()编码,是以就必要unserialize,下面把我的这部分代码贴出来供参考:

if ($rows['pollopts']){// 处置惩罚投票帖

$pollopts = unserialize($rows['pollopts']);

$i = 0;

foreach ($pollopts as $key => $v1){

if ($key=='options')

foreach ($v1 as $v){Ag亚游国际网站

$sql = "INSERT INTO dz5.polloptions (`tid`,`votes`,`displayorder`,`polloption`,`voterids`)VALUES('$rows[tid]','$v[1]','0','$v[0]','')";

jkquery($sql,1,0);

}

if ($key=='multiple') $polls['multiple'] = $v1;

$polls['maxchoices'] = '1';

}

$sql = "INSERT INTO dz5.polls (`tid`,`multiple`,`visible`,`maxchoices`) VALUES('$rows[tid]','$polls[multiple]','1','$polls[maxchoices]')";

jkquery($sql,1,0);

}

阐明:jkquery是封装的函数,参数一$sql是需履行的SQL;参数二为1时履行SQL,为0时不履行SQL;参数三为1时输出SQL,为0时不输出SQL;这样封装是为了调试的方便,详细函数见附件。

③. 对付特殊帖必要在dz5版的threads表special字段做出标记,措施:$rows['pollopts']?1:0; 此中$rows查寻dz2.threads的结果集。

对付posts表,①. 用样有authorid的问题。②.对付包孕附件的帖子同时转移附件数据,好在dz2时期一个帖子只能发一个附件,不然数据量又变大年夜了J其他就没什么特殊的问题了。

对付一个社区而言,这两方面的数据是最紧张的,其他数据的转移我就不说了。。。。

有一点便是我没有把法度榜样整合到一路,而是使用维持各个法度榜样连贯运行。各个法度榜样分开有利于编写时调试。再一点便是法度榜样在转移数据时可以一次插入N条数据,这样做有好处也有风险,好处是削减与mysql的通讯次数缩短运行光阴,然则假如在此中一条数据呈现插入差错时就会造成后面的数据损掉。比如:半个字的问题,转义不管用的。。。 进级法度榜样的效率照样必要留意的喔!在统统筹备充分之后选择在早晨3:00-8:00进级,事实上数据转移所花费的光阴不到3个小时,共转移用户1100000++ ,帖子12000000++ ,其他数据累计也有切切之多,法度榜样效率照样很紧张的

数据进级完成只是新义务的开始:进级之前必然要留意的便是要筹划好每一步该做什么,切忌乱了阵脚,由于用户可能会不习气新版本,留恋老版本中的一些功能,而鉴于此就必要在新版中从新开拓或者把老版中的相关功能迁移到新版。假如曩昔安装的插件对照多,可能就有更多的后续义务要做了,比如:插件所用到的数据,这些数据可能很集中这样还对照简单,也可能很分散这样就对照麻烦一些,这些就要看详细环境了。

进级改版不是只是新义务的开始,办理因进级而孕育发生的问题才是最紧张的。很多器械并不像我们进级前想象的那么抱负,由于用户的需求是千变万化的。

附件是短消息,和收藏夹的进级法度榜样,因为曩昔的数据库篡改较大年夜,进级法度榜样也具通用性也就不发出来了,或许看后能有一些启迪~

(ps: 这里没法添加附件...)

http://blog.csdn.net/zhys9/archive/2007/02/23/1513163.aspx

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: