当前位置:首页 >> 中医减肥 >> “想要零停机地迁移数据表,请给三倍一段时间!”

“想要零停机地迁移数据表,请给三倍一段时间!”

发布时间:2023-04-11

FROMnew_rows RETURNING*; --- Update UPDATEold SETdata= ? WHEREold_id = ?; UPDATEnew SETcreated_date = ? WHEREnew_id = ?; --- Delete DELETE FROMold WHEREold_id = ?; DELETE FROMnew WHEREnew_id = ?;

举例来说,我们的可用看起来比先从前更为复杂,因为我们并不需要在一新详见里面创始人悄悄数据资料,然后如此一来放入到上新详见里面。为了尽可能随机填充的 UUID 是一致的,这两个可用在一个事务里面已完成。

将数据资料加载一新详见

在处置好一新历史纪录后,下一步我们并不需要复制上新历史纪录。

INSERTINTOnew(new_id, created_date) SELECTold_id, CAST( dataASTIMESTAMP) FROMOLD WHERENOTEXISTS( SELECT* FROMnew WHEREnew_id = OLD.old_id) LIMIT1000 RETURNING*;

我们将一新详见里面不存在的数据资料,从上新详见加载一新详见。为了保持数据资料库经常性组织起来,我们通过limit 1000,分批已完成这项可用。虽然块的大小可以根据详见进行重置,但我更喜欢小块,因为可以避免意味著大量数据资料。

的测试连续性

这一步的工作经常被忽视。在翻转存储先从前,我们必需尽可能上一新详见错综复杂的数据资料无论如何启动时。我们可以通过一些查询来的测试上一新详见错综复杂的连续性。

核对项1:是否毕竟任何历史纪录?

SELECT* FROMold FULLOUTERJOINnewONold_id = new_id WHEREnew_id ISNULL ORold_id ISNULL

核对项2:数据资料是否一致?

SELECT* FROMold INNERJOINnewONold_id = new_id WHERECAST( dataASTIMESTAMP) <> created_date

翻转存储

这一步的工作量往往最繁重。经常有几十处并不相同的代码会从详见里面存储。由于如今两个详见错综复杂的数据资料是启动时的,因此我们可以花点间隔时间跟著已完成这部分移入工作。

SELECT* FROMnew WHEREnew_id = ?;

在这个先决条件,我们还并不需要更一新视图、外键、触发器等,让它们都引述一新详见。

停止载入上新详见

到这里,所有存储已翻转到一新详见,我们不如此一来并不需要更上一新数据资料库。

--- Create

INSERTINTOnew(created_date) VALUES(?) RETURNING* --- UpdateUPDATEnewSETcreated_date = ? WHEREnew_id = ?; --- DeleteDELETEFROMnewWHEREnew_id = ?;

清理上新详见

在确认系统设计不如此一来引述上新详见时,上新详见就可以删除了。

DROPTABLEIFEXISTSold;

落成!

移入落成!

最吃力的工作是向产品组阐释,为什么看似如此小的一个催促,要花费的间隔时间却是他们预自已的三倍。期盼在选读本文之后,他们能够理解。

原文客户端:

END

☞谷歌起诉vivo不正当竞争;网易格鲁吉亚分公司申请破产,官方说是“银行联系人被格鲁吉亚没收”;Opera 87公开发表|极客头条

☞算网创一新巅峰对决,“旋转云杯”大赛一声头号玩家大举进攻一间隔时间

☞刚离开苹果,GAN 缔造者已找好下家:如此一来次重返网易,在此期间在家办公

一键三连 「个人」「点赞」「在看」

应急救护进校园
宝宝拉肚子肚子疼怎么办
术后恢复吃什么好得快
什么方法可以治疗牙疼
吃什么药可以治疗关节僵硬
标签:
友情链接: