博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库如何部署上线阅读总结
阅读量:5134 次
发布时间:2019-06-13

本文共 1272 字,大约阅读时间需要 4 分钟。

阅读了这篇文章,不进学到了数据库部署上线的知识,对于面试技巧也学到了一点点,哈哈,收获不小,

数据库的部署分为两种方法,一种是比较简单的停机部署法,另外是双写部署法,也就是不停机部署法,停机部署法的大概思路就是挂一个公告,半夜停机升级,然后半夜把服务停了,跑数据迁移程序,进行数据迁移。(1)出一个公告,比如“今晚00:00~6:00进行停机维护,暂停服务

(2)写一个迁移程序,读db-old数据库,通过中间件写入新库db-new1和db-new2(3)校验迁移前后一致性,没问题就切该部分业务到新库。,这个中间件。现在流行的分库分表的中间件有两种,一种是proxy形式的,例如mycat,是需要额外部署一台服务器的。还有一种是client形式的,例如当当出的Sharding-JDBC,就是一个jar包,使用起来十分轻便。但是此方案有一个缺点,累!不止身体累,心也累!本来定六点结束,你五点把数据库迁移好,但是不知怎么滴,程序切新库就是有点问题。于是,眼瞅着天就要亮了,赶紧把数据库切回老库。第二个晚上继续这么干,简直是身心俱疲。

双写部署法,也就是不停机部署法,流程稍微复杂一些,首先要明白,历史数据和增量数据,历史数据就是在部署前,数据库表中的有关数据,称为历史数据,增量数据是在部署后,数据库表新产生的数据,称之为增量数据,

迁移流程如下

(1)先计算你要迁移的那张表的max(主键)。在迁移过程中,只迁移db-old中test_tb表里,主键小等于该max(主键)的值,也就是所谓的历史数据。
这里有特殊情况,如果你的表用的是uuid,没法求出max(主键),那就以创建时间作为划分历史数据和增量数据的依据。如果你的表用的是uuid,又没有创建时间这个字段,我相信机智的你,一定有办法区分出历史数据和增量数据。
(2)在代码中,与test_tb有关的业务,多加一条往消息队列中发消息的代码,将操作的sql发送到消息队列中,至于消息体如何组装,大家自行考虑。需要注意的是,只发写请求的sql,只发写请求的sql,只发写请求的sql。重要的事情说三遍!
原因有二:(1)只有写请求的sql对恢复数据才有用。(2)系统中,绝大部分的业务需求是读请求,写请求比较少。

(3)系统上线。另外,写一段迁移程序,迁移db-old中test_tb表里,主键小于该max(主键)的数据,也就是所谓的历史数据。

(4)将迁移程序下线,写一段订阅程序订阅消息队列中的数据

(5)订阅程序将订阅到到数据,通过中间件写入新库
(6)新老库一致性验证,去除代码中的双写代码,将涉及到test_tb表的读写操作,指向新库。

至于说到面试技巧,假设面试官问到你关于数据库分表的问题,你大可回答他分表的相关内容,至于部署不必拓展,在最后问面试官问题是,可以反问他贵公司部署问题是怎样解决的,这样面试官在最后肯定会认为你是真的做过数据库分库分表,自然面试效果也会不错。

转载于:https://www.cnblogs.com/ggrm/p/11055792.html

你可能感兴趣的文章
PIC单片机增强型开发板产生两路PWM
查看>>
golang中字符串的查找方法小结
查看>>
markdown
查看>>
join , select ,group by ,count,sum,where
查看>>
CSAPP阅读进度日记
查看>>
IO流(八)之InputStreamReader类与OutputStreamWriter类
查看>>
WebService
查看>>
html5定位
查看>>
[转]浅谈php web安全
查看>>
C#获得计算机名,当前登录用户名,Ip地址 .
查看>>
推荐几个精致的前端Web UI框架
查看>>
Vagrant 构建 LNMP 一致环境
查看>>
matlab 向量法建数组(推荐)
查看>>
easyui学习笔记4—panel的实现
查看>>
php性能调优
查看>>
科软-信息安全实验3-Rootkit劫持系统调用
查看>>
MySQL中根据A表画更新B表
查看>>
链接原理
查看>>
前端性能毫秒必争综合方案
查看>>
JavaEE Design Patter(2)
查看>>