一次项目上线的思考

昨天(20190619)公司项目功能开发上线,引发了不少问题,引以为戒

数据库问题

由于用户以及相关表的数据量很大,对其字段进行增加或者修改的时候就会很费时间. 为了尽可能减少线上用户的影响,采用建新表同步数据的方案. 进行同步数据的时候,最初直接是读原始表,拼接sql重新插入,组装sql如下 insert into xx (field1,field2, ... fieldx) values (value1, value2, ...valuex),(value1, value2, ...valuex)... (value1, value2, ...valuex) 效率极其低,发现同时插入3000条就无法执行了,900w的数据估计得操作几天几夜了

后来调整为 insert select方式效率提升明显,每次同步5w条,不过随着数据量变大,后期的插入操作耗时也会逐步增加.

// $lastMemid xxx_0619 表的最后一个pk
$nextMemid = $lastMemid + 50000;
$sql = "insert into `xxx_0619` ( `memid`, `addtime`, `addtime1`, `addtime2`, ...要同步的字段 )
    select `memid`, `addtime`, `addtime1`, `addtime2`, ...要同步的字段 from origin_table where memid > $lastMemid and memid <= $nextMemid ";

同步数据期间,一定会存在部分数据发生了变化,此时需要对这批数据进行更新操作

 $sql = " UPDATE xxx_0619 t1 
    INNER JOIN origin_table t2 ON t1.memid = t2.memid
    set 
    t1.`addtime` = t2.`addtime`,
     t1.`addtime1` = t2.`addtime1`,
     t1.`addtime2` = t2.`addtime2`,
     t1.`addtime3` = t2.`addtime3`,
     t1.`addtime4` = t2.`addtime4`,
     t1.`addtime5` = t2.`addtime5`,
     t1.`addtime6` = t2.`addtime6`,
    where t2.timestamp >= '2019-06-19 14:00:00'";

项目部署问题

公司的代码现在可以用过jenkins来部署,但是由于各种原因,有些情况下都是直接FTP上传代码,使用beyond compare进行比对上线. 这中手动提交上线很容易发生某些文件遗漏,而导致线上报错. 仍然建议使用自动化部署,用jenkins构建和发布,比较简单快速

考虑不周,问题

数据和代码都已经发布上线了,昨天测试了下也没发现什么大问题.今早上班,收到了不少报错反馈--都是无权限访问. 平时开发都是使用超管,这次由于迁移了某些控制权限,导致忘记了权限问题.作为一个开发,这是一个很大的过失. 以后上线都需要考虑下权限问题

如何解决

目前项目上线没有固定的流程,都是达到效果就可以,得过且过的感觉. 规范上线流程,上线必须提供一个上线详细文档. 第一步做什么,第二步做什么,第三步做什么. 上线时候可以直接根据文档的内容进行操作. 此外可以写一个shell脚本,需要操作的都可以用一个脚本执行

其他

项目使用java的中间件服务进行查询和索引,由于最初的开发者离职,现在仅仅是有人进行简单的重建索引或者重启,后期可能会存在大问题, 我打算研究下相关的东西,学习下GO或者JAVA 提供一个索引服务

results matching ""

    No results matching ""