Ticket #160 (closed 需求: 已处理)

Opened 12 years ago

Last modified 12 years ago

电脑论坛版块合并

Reported by: dingjianyong Owned by: jiangyichao
Priority: 最高级(1) Milestone:
Component: 电脑网产品论坛 Version:
Keywords: Cc:
Due Date: 25/11/2013

Description

根据编辑运营需求,需要把电脑网的版块及其所属的帖子进行重新合并、整合和删除。

Attachments

电脑网合并脚本完整.rar Download (15.8 KB) - added by jiangyichao 12 years ago.
版块合并需求文档_最终20131120.xls Download (187.0 KB) - added by jiangyichao 12 years ago.
checkdelete.groovy Download (3.2 KB) - added by jiangyichao 12 years ago.
检查删除脚本
combineOnebyMany.groovy Download (7.7 KB) - added by jiangyichao 12 years ago.
检查一对一合并脚本
combineOnebyOne.groovy Download (10.1 KB) - added by jiangyichao 12 years ago.
检查一对多合并脚本

Change History

Changed 12 years ago by jiangyichao

comment:1 Changed 12 years ago by jiangyichao

一,需求确认与分析

1.确定需求合理性;

检查是否存在同一个版块合并到不同版块,目标版块与源版块一样之类的基本逻辑错误;

2.父类版块无法移动或合并到子类版块;

在系统的数据库结构及系统的设计上,是不允许这样的操作,可以用替代办法,新建同名版块,然后再进行合并操作;

3.删除或移动版块是否包含子类以下的版块;

在删除、合并、移动版块的时候,往往出现源版块存在子版,且子版以下还有子版的情况,在操作之前,先要确定一共有基层,确定包含所有需要迁移的版块;

4.注意虚拟子版的储存逻辑;

虚拟子版跟正常版块在数据库的存储逻辑有所差异,需要注意版块操作执行的逻辑;

5.确认合并以后所在的父版;

确认好合并后的版块是否已经存在的版块,否则需要新建,且确认新建版块的位置;

6.精华帖与置顶帖是否需要保留;

在删除版块过程中,如果没有清理相应的置顶帖,精华帖,会导致前台报错,没有找到对应的帖子;

二,开发流程与设计

1.删除

1)删除帖子并非真正删除数据,把版块对应的bbs7_forum的数据【deleted改成1,parentid改成 0】;
2)把删除版块对应帖子数据的【fid改成1,status改成-1】,从bbs7_topic_x转移到bbs7_topic_1表中;
3)把删除帖子对应的bbs7_topic_forum_x映射表数据,【fid改成1】;
4) 在bbs7_top表中删除对应的置顶帖;
5) 对bbs7_forum里面的访问数、发帖数、回帖数等统计数据进行【清0】;

2合并

1)更新源版块对应的bbs7_pick表成目标版块的【fid继承关系】;
2)在bbs7_top表中删除对应的置顶帖;
3)若源版块是【正常子版】,则让其帖子数据的fid改成目标版块的fid,再迁移到目标版块帖子所在的bbs7_topic_x;
4)若源版块是【虚拟子版】,则让其帖子数据的subforumid改成目标版块的fid,fid改成目标版块的父类fid,再迁移到目标版块帖子所在的bbs7_topic_x;
5)对bbs7_forum里面的访问数、发帖数、回帖数等统计数据进行增加;
6)把源版块帖子对应的bbs7_topic_forum_x映射表数据,fid改成新版块的fid,(目标版块是虚拟子版,fid改成其父类fid;目标版块是正常子版,fid改成其fid);

三,sql实现与优化

1)备份数据源,写出备份脚本、回滚数据脚本和清空备份的脚本;

2) 根据需求文档,把需要操作的【数据源】,存到【临时表】,以便进行并表查询还有条件查询;
3) 有【批量思想】,在一些负责的操作当中,需要的表比较多,必须尽量把数据统一操作,避免重复,
例如,在迁移topic数据的时候,把所有源版块帖子数据存到一个临时表,然后再统一进行相应的update操作;
4)避免有【循环思想】,不能循环对查询结果进行操作;
5)多次实践尝试,优化sql语句的执行速度,避免多重的内连子查询;
6)活用临时表作为批量操作的容器;
7)合理为临时表添加【主键】及【索引】,增加链接、条件查询的执行速度;

Version 0, edited 12 years ago by jiangyichao (next)

Changed 12 years ago by jiangyichao

comment:2 Changed 12 years ago by jiangyichao

  • Status changed from new to closed
  • Resolution set to 已处理

Changed 12 years ago by jiangyichao

检查删除脚本

Changed 12 years ago by jiangyichao

检查一对一合并脚本

Changed 12 years ago by jiangyichao

检查一对多合并脚本

Note: See TracTickets for help on using tickets.