首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 软件教学
discuz!2.0到discuz!5.0升级成功笔记_discuz!论坛
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

先说为什么升级吧,可能了解Discuz!的朋友看到版本号就知道为什么升级了。没错,版本太低,论坛发展受到很大制约成了升级的一个重要原因;另外一个重要原因就是升级前的一段时间社区访问量又有大幅上升,负载能力的不足,给用户带来不良体验,影响用户发贴积极性,制约社区发展。于是痛下决心升级...(ps:我是刚来到公司,系统早该升级了但由于人员不足一直没能落实),整个升级过程由我主刀,前期准备也就是仔细对比现有社区数据库与dz5.0数据库。自从开始使用dz2.0,就开始对其改造,经过近两年的改造,从程序到数据库被改动的地方非常多真可谓“面目全非”,程序的效率及负载能力也因此受到影响。

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

    既然升级就需要有所取“舍”,轻装上阵才是硬道理(并不是要丢弃一些数据,只是放到最后去做)。

    一:分析用户数据;
        ①. 由于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时期就有了"投票帖","附件",升级程序在遇到这些特殊帖子时就需要同时转移投票选项及附件的数据(当然你也可以一个表一个表的转),怎么判断遇到了这些特殊帖?有两个字段可以参考dz2.threads.pollopts和dz2.posts.aid。对于threads表,

        ①. 需要注意的是authorid,在dz2的threads表不记录发帖者uid,因此需要查出dz2.threads表中每条数据对应的uid。
http://www.knowsky.com/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){

                            $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其他就没什么特殊的问题了。

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

有一点就是我没有把程序整合到一起,而是利用<meta http-equiv="refresh" content="1 url=xxx.php">保持各个程序连贯运行。各个程序分开有利于编写时调试。再一点就是程序在转移数据时可以一次插入N条数据,这样做有好处也有风险,好处是减少与mysql的通讯次数缩短运行时间,但是如果在其中一条数据出现插入错误时就会造成后面的数据丢失。比如:半个字的问题,转义不管用的。。。 升级程序的效率还是需要注意的喔!在一切准备充分之后选择在凌晨3:00-8:00升级,事实上数据转移所花费的时间不到3个小时,共转移用户1100000++ ,帖子12000000++ ,其他数据累计也有千万之多,程序效率还是很重要的

数据升级完成只是新任务的开始:升级之前一定要注意的就是要规划好每一步该做什么,切忌乱了阵脚,因为用户可能会不习惯新版本,留恋老版本中的一些功能,而鉴于此就需要在新版中重新开发或者把老版中的相关功能迁移到新版。如果以前安装的插件比较多,可能就有更多的后续任务要做了,比如:插件所用到的数据,这些数据可能很集中这样还比较简单,也可能很分散这样就比较麻烦一些,这些就要看具体情况了。

    升级改版不是只是新任务的开始,解决因升级而产生的问题才是最重要的。很多东西并不像我们升级前想象的那么理想,因为用户的需求是千变万化的。

附件是短消息,和收藏夹的升级程序,由于以前的数据库改动较大,升级程序也具通用性也就不发出来了,或许看后能有一些启发~

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

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


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C#数据库连接字符大全-.NET教程,C#语言
·Ftp客户端编程-.NET教程,面向对象编程
·ASP.NET POST方式提交数据-.NET教程,Asp.Net开发
·单独控制IE WebControl里面的Treeview的几个动作的Postback-.NET教程,数据库应用
·根据IP找地址的java实现-JSP教程,Java技巧及代码
·ASP.NET 2.0 多文件上传小经验-.NET教程,Asp.Net开发
·ASP.NET 2.0中隐藏listbox的某一项-.NET教程,Asp.Net开发
·使用Windows Script 关闭和打开指定程序-.NET教程,数据库应用
·asp.net 2.0下嵌套masterpage页的可视化编辑-.NET教程,Asp.Net开发
·Jsp学习笔记(三)-----Jsp语法!-JSP教程,Jsp/Servlet
最新文章
·让windows vista系统只能识别自己指定的u盘_windows vista
·优化建议与技巧(来自adsense优化团队)_网赚技巧
·艾瑞曹军波:广告联盟发展的下一个突破点_网赚技巧
·狗狗网ceo李晶:80后创业 心态最重要_站长访谈
·从九句话看网站的综合发展_站长心得
·改进网页可读性的7个方法_站长心得
·常见问题_google adsense 广告点击统计_google推广
·10条优秀的网站设计经验1_站长心得
·怎样做个小网站_站长心得
·实施会员制计划中7项致命的失误_网站推广
相关主题
  • discuz!6.0新版本尝鲜—“电子商务”功能强大而完善,会员在论坛开店轻而易举_discuz!论坛
  • discuz!6.0新版本尝鲜—“数据结构化”方便分类浏览 规范帖子内容_discuz!论坛
  • discuz!新版本换新颜—全新模板抢先看_discuz!论坛
  • discuz!5.5 js的调用_discuz!论坛
  • discuz!论坛后台备份完全规范_discuz!论坛
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭