论坛风格切换
  • 2969阅读
  • 0回复

[转换升级相关]转换程序快速方案升级版,转换大数据量站点专用.速度提升n倍 [复制链接]

上一主题 下一主题
离线rickyleo
 

发帖
315
金币
0
威望
99
只看楼主 倒序阅读 使用道具 楼主  发表于: 2011-11-14
上回在整理快速升级方案的时候提到过,将转换程序中大数据量的步骤抽离出来用shell来跑.这次在大河网测试转换的时候做了下尝试.
假想一下,你的回复一张表大小达到了50G,用浏览器进行请求,转换数据跳转一步需要多长时间,有没有可能数据库还在读数据的时候,php就已经提示你的连接超时了呢?而且用shell跑会省了很多不必要的麻烦事,域名解析,超时。这些我们都不用考虑
那么现在说下这个方案是怎么实现的?

----------------------------------------------------
run with shell:
1. /home/wwwroot/pwb/shell/do_{$step}.sh
2. /home/wwwroot/pwb/pwbuilder_shell.php
3. /home/wwwroot/pwb/source/discuz60/do_shell.php
-----------------------------------------------------
run with http:
1. /home/wwwroot/pwb/pwbuilder.php
2. /home/wwwroot/pwb/source/discuz60/do.php
============================================================
更新纪要:
1). pwbuilder.php 不做修改
2). pwbuilder_shell.php 接收shell参数,调用do_shell.php
3). do.php中注释掉shell跑的那些步骤
4). do_shell.php 中注释调http跑的那些步骤,去掉步骤跳转代码
5). 各个step的shell脚本存放在/pwb/shell/do_{$step}.sh
============================================================
需要shell跑的数据(最好在mysql服务器上跑,php用绝对地址)
step = 4: 会员
step = 6: 主题
step = 12: 回复
step = 13: 附件
step = 15: 短消息
step = 18:标签
step = 22:评分数据
step = 23:根据评分信息来更新tmsgs的ifmark字段
step = 26: 分类信息数据
------------------------------------------------------------

跑数据流程参考:
1、1-3步 [http]
2、4步 【shell】可以同时跑下一步
3、5步跑完后 进行下一步 [http]
4、6、12、13、22步可以同时跑【shell】(独立)
4、6步跑完后, 开始7-11步(需要主题跑完) [http]
5、14步 [http]
6、15步,需要4步转换完成后进行 【shell】
7、16-17步:[http]
8、18步 【shell】(独立)
8、19-21 [http]
8、22步见上面 【shell】
9、23步,需要评分和主题跑完【shell】
10、24-25步 [http]
11、26步:需要25步跑完【shell】

这个主要流程是这样的,在linux服务器上命令行下,执行
  1. /home/wwwroot/pwb/shell/do_{$step}.sh

文件,这些文件里边是这样的,比如会员的do_4.sh脚本代码如下:
  1. #!/bin/sh
  2. #增量开始uid
  3. START=0;
  4. #增量前开始uid
  5. #START=0;
  6. #cdb_members最大uid
  7. MAXuid=912586;
  8. #增量前最大uid
  9. #MAXuid=912586;
  10. #批量执行条数
  11. PERCOUNT=5000;
  12. #转换程序step值
  13. STEP=4;
  14. while [ $START -le $MAXuid ]
  15. do
  16.     END=`expr $START + $PERCOUNT`;
  17. echo "起始uid:"$START"  截止uid:"$END"  当前时间: "`date +%Y-%m-%d/%H:%M:%S`;
  18. #执行转换程序
  19. /usr/local/php.5.3.3/bin/php -e /home/www/pwb/pwbuilder_shell.php build discuz60 $STEP $START $PERCOUNT
  20. START=$END;
  21. done
  22. echo "第4步 '用户' 数据转换完成,当前时间: "`date +%Y-%m-%d/%H:%M:%S`;

要修改的就是start  maxid  step 这三个参数,其他就只要在pwb根目录下建一个pwbuilder_shell.php文件用来接收shell的参数,调用和shell跑的定制的转换步骤,这个文件就在 /home/wwwroot/pwb/source/discuz60/do_shell.php里边,将do_shell.php里边的跳转全部去掉,shell提供step、start、percount三个参数,do_shell.php文件就接收这三个参数,查询数据库,执行结束进行下一个shell循环,知道shell循环结束,这里就是那个maxid起到的作用。
基本上就是通过这几个参数控制一下,其他小数据量的也可以独立出来只是没多少必要,在web下转换也是很快的。小站点也没必要用这个方案。
大河网bbs的数据库已经高达80G了。用这个方案 顺利的话 能在8-9个小时以内跑完。
如果有兴趣的同学可以研究一下,有哪里可以改进的 可以回复探讨一下,目前只整理了discuz6.0版本的方案!



附件: 转换程序_11.23.zip (1160 K) 下载次数:61
本帖提到的人: @太史慈 @top @师师 @prisk
2条评分分享分+5金币+1
云天河 分享分 +5 不给力啊,老湿~ 2011-11-15
谯周 金币 +1 不顶不舒服斯基 2011-11-14
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个