读和写之间有一道门槛
一句话总结
调查即使错了也可以再做,但UPDATE不能再做,所以写之前会附上调查中没有的四个东西——范围计算、回溯路径、测试运行、中断标准。
为什么需要这个?
FDE在客户环境中做的大部分工作都是阅读。阅读日志,查询表格,遵循代码,并将结果转换为文档。在这一阶段,错误判断的代价是时间。如果假设不正确,可以删除并重新建立,如果数字计算错误,可以重新计算。
但是在某个时候一定会出现这句话。“那么你能帮我修改一下吗?”
从这里开始,性格会完全改变。错误的查询可以重做,但错误的UPDATE不能重做。如果没有提前准备好撤销的手段,那一刻我们做的事情不是调查,而是事故。
还有一个问题。请求不是条件,而是句子。“请整理长时间停止的结算项目”这句话WHERE status='pending'移动的瞬间,请求的人在脑海中画的范围和实际变化的范围就会分开。分开的宽度就是事故,在数完那个宽度之前,请求的一方和收到的一方都不知道。
怎么行动
书写前附着的四个装置都是为了缩小或应对无法缩小这种分歧。
**第一,范围计算。**将两个数字并排放置——将请求语句原样复制时变化的行数和缩小条件时变化的行数。这两个数字的差数是变更的危险。如果45件和20件,那么25件是危险的,应该逐行写出为什么排除25件,条件就完成了。
**第二,恢复之路。**备份有两种,用途不同。
파일 사본 전부 잘못됐을 때 통째로 되돌린다.
단점 — 그 사이에 들어온 남의 변경까지 함께 되돌아간다.
행 스냅샷 바꿀 행의 변경 전 값을 id 와 함께 남긴다.
id 를 열쇠로 그 행만 되돌릴 수 있고, 무엇이 어떻게 바뀌었는지 설명할 수 있다.
只有文件副本才能恢复,但无法解释;只有行快照才能恢复结构更改。因此,两者都保留。
第三,执行测试。打开事务,点击实际UPDATE,然后不提交,而是撤销。SELECT COUNT(*)虽然提前计数和结果看起来一样,但性质不同。因为计数的条件和变更条件字面上相同。如果两个句子单独写的话,中间就会隐藏错别字,错别字总是出现在两个句子中执行的那一边。
**网络、中断标准。**在执行前,根据看到的结果决定是否停止。这将在下一个模块中单独讨论。
而且应用结束后的验证还有一半。对照群——是把不应该改变的东西保持原样数。只数应该改变的东西的验证条件更宽泛,即使在一起碰到旁边的事故中也能顺利通过。
在现场相遇的样子
第一,**无法确认的东西不改。**客户桌子上没有的customer_id就像带有的订单一样,虽然满足了条件,但不知道是谁的行为几乎总是混在实际数据中。仅仅因为很旧就一起取消的话,以后就无法解释那件事情了。除了,把排除的事实和理由写在计划书中,问客户公司才是正确的做法。排除不是少做了一件事,而是记录了判断。
第二,新创建的没有的值的变更会悄悄传播。status到现在为止没有的cancelled输入后,不知道该值的汇总查询和仪表板会悄悄删除这些行。因为不会出现错误,所以没有人知道,一个月后发现结算不正确。所以引入新值的变更既是数据变更,也是需要通知的变更。
第三,执行记录不是为了执行者,而是为了两小时后会觉得这个表格奇怪的其他人。如果不知道什么时候、做什么、多少件、用什么来归档,那个人就会花时间去找我们。
可以分开撤销无法撤销的更改
在变更计划中,最重要的项目是“如果失败怎么办”,有些变更是 那个栏子里没有话可写。当时不是修改计划,而是分开更改本身。
**清除热量要分三次进行。**一次做的话,在旧代码运行期间就会崩溃。
- 在代码中让那个列不读取后进行发布(继续写)。
- 等几天,确认没有可以撤销的事情后,不使用并分发。
- 然后擦掉热度。
每个阶段都可以与前后任何版本一起运行,所以随时都可以撤销发布。
增加热量的事情也是一样的。not null从一开始就挂的话,旧代码的insert就会
全部失败。允许你加入,填写基本值,让代码总是输入值。
后面提出限制。在大的表格上提出限制not valid先走一下,以后再验证的话
锁定时间变短。
**长时间锁定不会显示为发布失败。**如果迁移在锁定表格的情况下拖延5分钟 这段时间所有的请求都堆积起来了。发布以“成功”结束,只剩下障碍。所以 迁移必须设定锁定上限。
set local lock_timeout = '3s';
set local statement_timeout = '30s';
alter table orders add column region text;
如果抓不到的话,最好失败后再试一次,而不是等到抓到为止才停止服务。 比好。
**实际尝试回溯。**计划书中的“回溯:部署到以前版本”一般 从未经过验证。在开发界回过头来看,设置文件不正确或缓存 发现有新格式残留,或者队列中堆积着新消息。
**变更窗口是为人们准备的。**凌晨3点发布的话,没有人能看到问题。 人清醒,交通少,第二天是工作日的时间是最安全的。
下次实习要做的事情
从头到尾走访客户要求“请将pending订单全部更改为cancelled”的情况。按照要求移动的话,45件会变更,但实际上需要更改的是20件。找到25件的差异,找到恢复的方法,在副本上演示恢复后,完成与本应用和对照群的验证。