大表添加字段不停服思路

前言

? ? ? ? 這個是源自于昨天寫的業務背景,對接蘋果支付退款退單接口-CSDN博客

? ??

? ? ? ? 涉及到了order表的改動,而目前order表已經有2千萬的數據,如果退款字段都直接加在這張表里面可能會比較慢,所以才有這篇文章,文章里只討論思路,而不進行具體的編碼實現,真正操作需要自己去注意細節

大表添加思路字段

直接加

? ? ? ? 也就是直接利用 alter table add 命令加,這種是最原始的,可能比較慢,這里就不討論了

阿里云操作

? ? ? ? 參考地址:如何進行無鎖結構變更_數據管理 DMS-阿里云幫助中心

程序處理

基礎版本
  1. 對 order 數據表結構進行復制,放到一張新表里面 order_back(只包含結構)
  2. 在order_back里面添加需要的字段(沒數據加字段很快)
  3. 把order的數據轉移到order_back里面去
  4. 把order_back和order表名進行互換即可

這種版本就是中間轉移數據會比較慢,其他的還行

進階版本
  1. 對 order 數據表結構進行復制,放到一張新表里面 order_back(只包含結構)
  2. 在order_back里面添加需要的字段(依然很慢,但是不影響業務)
  3. 把這段時間內order產生的數據插入到order_back上
  4. 替換表名

這種版本可以節省后面轉移數據的等待時間,在第1步就處理了,但是這里仍然有問題,假設中級order表有更新那么order_back是不知道的,其實基礎版本也有這個問題,雖然訂單表一般支付后就不會改了,但是還是有可能會發生,解決方案如下

進階版本-改版1

? ? ? ?就是數據轉移完以后不是直接把原有的order刪掉,而是等轉移以后,再起一個定時器去掃描,等到數據處理完成以后再把定時器去掉即可

? ? ? ? 這種方式確實可以做到最終同步,但是還是比較麻煩,需要借助定時器處理后續邏輯

進階版本-改版2

? ? ? ? 我們其實可以考慮一個問題,其實核心就是怕有數據的修改而引起數據不同步,一般做法可能就是在代碼里面添加邏輯去記錄修改的記錄然后轉移完成以后進行更新,這種方式確實可以,但是還可以用一種更妙的方式處理

? ? ? ? 就是我們再起一張結構跟order一樣的order_update表,然后在order表添加一個觸發器,當有修改的時候把新的數據插到order_update上,這樣一來就很好處理了,當前面的數據遷移完畢以后,我們只需要再掃一下order_update的數據,然后進行對應的修改就行了

? ? ? ? 這種做法就不用在程序里去記錄修改了,也不需要用定時器處理了,當然了這里也可以監控binlog(原理跟這個差不多)

結語

? ? ? ? 到這里就結束了,以上是我的幾種方式,如果有問題或者大家有更好的方案,可以提起來一起討論一下

mysql 8.0 版本,INSTANT 算法,可以參考文章

? ? ? ?在?上次你問對大型表的DDL操作,我找到好方法了 - 知乎

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搜索引擎語法

演示自定的Google hacking語法,解釋含意以及在滲透過程中的作用 Google hacking site:限制搜索范圍為某一網站,例如:site:baidu.com ,可以搜索baidu.com 的一些子域名。 inurl:限制關鍵字出現在網址的某…

重生之我是一名程序員 40 ——字符串函數(1)

哈嘍啊大家晚上好!今天呢給大家帶來點新的東西——字符串函數strcpy。 首先,讓我來給大家介紹一下它。strcpy函數是C語言中的一個字符串函數,用于將一個字符串復制到另一個字符串中。其函數原型為: char* strcpy(char* dest, co…

LeetCode無重復字符的最長字符串的Java實現

題目 給定一個字符串 s ,請你找出其中不含有重復字符的 最長連續子字符串 的長度。 示例 1: 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子字符串是 "abc",所以其長度為 3。示例 2: 輸入: s "bbbbb" 輸…

【Spring】MyBatis的操作數據庫

目錄 一,準備工作 1.1 創建工程 1.2 準備數據 1.3 數據庫連接字符串 1.4 創建持久層接口UserInfoMapper 1.5 單元測試 二,注解的基礎操作 2.1 打印日志 2.2 參數傳遞 2.3 增(Insert) 2.4 刪(Delete&#x…

插件預熱 | 且看安全小白如何輕松利用Goby插件快速上分

001 前言 各位師傅們好,首先強調一遍我可沒做壞事,我只是想學技術,我有什么壞心思呢 回到正題,作為一個初學者,我想和大家分享一下我是如何利用 Goby 進行刷分的經歷。大家都知道,剛開始學習的時候&…

python每日一題——4移動0

題目 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行操作。 示例 1: 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 示例 2: 輸入: nums [0]…

Go 語言中的 Switch 語句詳解

switch語句 使用switch語句來選擇要執行的多個代碼塊中的一個。 在Go中的switch語句類似于C、C、Java、JavaScript和PHP中的switch語句。不同之處在于它只執行匹配的case,因此不需要使用break語句。 單一case的switch語法 switch 表達式 { case x:// 代碼塊 cas…

web前端開發基礎------外邊距折疊現象

引言 在設置樣式時,需要遵循先整體再細節,先通用樣式再特殊樣式的順序進行設置 一,什么是外邊距折疊現象呢? 外邊距折疊 定義: 外邊距折疊是指相鄰的兩個或者多個外邊距(margin)在垂直方向會合并…

Python入門學習篇(二)——算術運算符

1 算術運算符 1.1 分類 類型含義示例注意事項加號12?3“12”“3"?"123”數值之間,是加法運算(True為1,False為0)字符串之間,是進行拼接數值和字符串之間是不可以使用加法運算的,會報錯-減號1-2?-1*乘號2*3?6/除法2/1?2.0除法的結果永遠為小數%取余10%2?0//取…

SAP 預付款清賬程序

預付款批量清賬程序,也是來自于網上,稍微改了一下。依據付款參考清賬。 原文參考:【ABAP】供應商、客戶的特殊總賬和非特殊總賬清賬_sap f-44 bapi-CSDN博客 &---------------------------------------------------------------------*…

老生常談 - 從輸入URL到頁面加載的過程(詳細版)

從輸入URL到頁面加載的過程 之前一直都是直接看一下總結的八股文章,對于實際的整個鏈路并不是特別熟悉,這次花了一天多的時間看了很多資料,對于整個頁面加載的流程有了自己的理解,從前端開始訪問的瀏覽器多線程、緩存等問題&#…

5-11一個球從100米自由落下

#include<stdio.h> int main(){double down100;double back down/2;int n;//次數for(n2;n<10;n){downdownback*2;backback/2; }printf("第10次落地經過%f米\n",down);printf("第10次反彈%f米\n",back);return 0;}

href和src的區別

1、請求資源類型不同 &#xff08;1&#xff09; href是Hypertext Reference的縮寫&#xff0c;表示超文本引用。用來建立當前元素和文檔之間的鏈接。常用的有&#xff1a;link、a。 &#xff08;2&#xff09;在請求 src 資源時會將其指向的資源下載并應用到文檔中&#xff0…

分布式事務seata的AT模式介紹

分布式事務seata的AT模式介紹 seata是阿里開源的一款分布式事務解決方案&#xff0c;致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式&#xff0c;本文主要介紹AT模式的使用。 seata安裝 下載seata服務&#xff0c;官方地址…

測試數據不會造?可以用這個工具Faker

在測試過程中&#xff0c;大家應該都遇到過各種各樣的數據構造問題。e.g. 構造一批通訊錄、構造一批用戶三要素(姓名手機號身份證)、構造一批銀行卡數據…… 這時候&#xff0c;測試數據大多數可能是這樣的: 張三, 130 0000 0001 李四, 130 0000 0002 王五, 130 0000 0003 …

【C/PTA —— 11.函數2(課外實踐)】

C/PTA —— 11.函數2&#xff08;課外實踐&#xff09; 一.函數題6-1 計算A[n]1/(1 A[n-1])6-2 遞歸實現順序輸出整數6-3 自然數的位數(遞歸版)6-4 分治法求解金塊問題6-5 漢諾塔6-6 重復顯示字符(遞歸版)6-7 顯示平行四邊形(右)(遞歸版) 二.編程題7-2 N階樓梯上樓問題 一.函數…

python實現存款日利息計算器(窗口界面形式)

輸入存款金額&#xff0c;7日年化收益率&#xff0c;輸出每日利息 完整源碼如下&#xff1a; import tkinter as tk from tkinter import messageboxdef calculate_interest():deposit float(entry_deposit.get())interest_rate float(entry_interest_rate.get())daily_int…

【數據結構】二叉排序樹(c風格、結合c++引用)

目錄 1 基本概念 結構體定義 各種接口 2 二叉排序樹的構建和中序遍歷 遞歸版單次插入 非遞歸版單次插入 3 二叉排序樹的查找 非遞歸版本 遞歸版本 4 二叉排序樹的刪除&#xff08;難點&#xff09; 1 基本概念 普通二叉排序樹是一種簡單的數據結構&#xff0c;節點的值…

戲說二十三種設計模式_用故事的方式就是讓你一定能懂

創建型模式 1、FACTORY—追MM少不了請吃飯了&#xff0c;麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西&#xff0c;雖然口味有所不同&#xff0c;但不管你帶MM去麥當勞或肯德基&#xff0c;只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory 工廠模式&…

Cortex-M與RISC-V區別

環境 Cortex-M以STM32H750為代表&#xff0c;RISC-V以芯來為代表 RTOS版本為RT-Thread 4.1.1 寄存器 RISC-V 常用匯編 RISC-V 關于STORE x4, 4(sp)這種寄存器前面帶數字的寫法&#xff0c;其意思為將x4的值存入sp4這個地址&#xff0c;即前面的數字表示偏移的意思 反之LOA…