成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL分表之后,怎么平滑上線?

網絡 通信技術
項目開發中,我們的數據庫數據越來越大,隨之而來的是單個表中數據太多。以至于查詢數據變慢,而且由于表的鎖機制導致應用操作也受到嚴重影響,出現了數據庫性能瓶頸。

[[431098]]

分表的目的

項目開發中,我們的數據庫數據越來越大,隨之而來的是單個表中數據太多。以至于查詢數據變慢,而且由于表的鎖機制導致應用操作也受到嚴重影響,出現了數據庫性能瓶頸。

當出現這種情況時,我們可以考慮分表,即將單個數據庫表進行拆分,拆分成多個數據表,然后用戶訪問的時候,根據一定的算法,讓用戶訪問不同的表,這樣數據分散到多個數據表中,減少了單個數據表的訪問壓力。提升了數據庫訪問性能。

舉個栗子

比如咱們最常見的用戶表(user表)

id user_id 其他字段
主鍵id 用戶id 其他字段

咱們一般都會用user_id去查詢對應的用戶信息,但是隨著業務的增長,這張表會越來越大,甚至上億,嚴重影響了查詢性能。所以咱們就會對這張表進行分表處理,分到多張表減小查詢壓力。

分表策略

以分10張表為例(具體分多少張表,根據實際情況來估算) 首先咱們建10張表 user1、user2、user3。。。。。user10。

一般情況下,我們都會用作為索引的字段(user_id)進行取模處理。想分多少張表,就按照多少取模,比如這個case就是10。

  1. $table_name = $user_id % 10; 

按照上面的取模公式:

  • user_id為1295的會落在user5里面
  • user_id為8634的會落在user4里面
  • 。。。。。。。

「每次CURD根據上面查找表的策略進行就行了」,這個問題不大,我們暫且先不多說。

已經上線的運行中的表怎么辦?

其實上面的方法大家應該都知道怎么用,但是有個問題,已經上線了的表怎么辦?那張表的數據在線上是一直被查找或者改變的。如何能夠進行平滑的分表,并且讓用戶無感知呢?

方法1

直接上線,提前寫個腳本,腳本內容是把舊表(user)的數據同步到user1表到user10表,一上線了趕緊執行

這種方法明顯是行不通的,主要是存在以下問題:

如果執行過程中腳本有問題怎么辦?代碼全部回滾?

腳本把把舊表(user)的數據同步到user1表到user10表,這個腳本得執行多久?如果是1個小時,那么這段時間線上和這張表相關的業務都是不正常的

這顯然是行不通的,對線上影響很大。

方法2

先寫個同步數據的腳本,腳本內容是把舊表(user)的數據同步到user1表到user10表,腳本同步完了再上線。

這個方法看起來友好了一些,不過也存在一些問題。

腳本同步完,立即上線,這兩件事之間是有一些時間差的,這個時間差中線上表可能有一些改動,這些改動怎么辦?

「以上兩種方法看起來貌似都行不通,所以看來得來點不一樣的了。咱們直接看結論。」

步驟1 上線雙寫

首先咱們把雙寫上線了,什么意思呢?比如user_id=123,對于增加,刪除,修改操作來說,咱們既操作user表,也操作user_id=123對應的user3表。

  1. function modify($user_id){  //包含增加,刪除,修改操作 
  2.   modify_user();  //modify user表 
  3.   $table_name = $user_id % 10; 
  4.   modify_user($table_name) //modify對應的分表 

因為查詢的部分還是在user表中查詢的,所以上面的操作對線上用戶是無任何影響的。

步驟2 全量同步

寫一個全量同步user表到user1-user10的表,最好找個低峰期執行腳本,以防萬一影響user表的查詢

這一步執行之后,因為咱們之前上線了雙寫(見步驟1),所以user表和user1-user10表之間的數據已經是完全一致的了。

步驟3 查詢新表數據

將查詢的部分改到user1-user10

因為前面兩個步驟咱們已經保證了user表和各個分表之間的數據完全一致性,所以直接把查詢的部分改掉是沒有任何問題的。 

如果按照以上步驟執行,那么對線上的數據是沒有任何影響的,而且我們線上就是這么操作了,經過了多次實踐確保不會出問題,放心使用即可。

 

責任編輯:武曉燕 來源: 程序員小飯
相關推薦

2022-02-22 10:30:53

Jenkinsgit項目

2020-01-21 21:48:07

架構平滑上云機房遷移

2017-12-06 09:42:12

ERP管理數字化

2021-03-01 10:10:39

數據遷移擴容

2021-03-17 16:15:55

數據MySQL 架構

2010-11-23 15:33:17

MySQL分表處理

2015-06-12 09:56:35

Html5跑分爆表

2019-07-31 09:27:23

數據庫MySQLSQL

2010-10-15 15:54:33

Mysql分表

2010-10-15 16:03:03

Mysql分表處理

2018-09-21 15:50:58

數據庫MySQL分庫分表

2018-05-14 16:14:56

數據庫MySQL分表與分區

2020-11-18 09:39:02

MySQL數據庫SQL

2009-01-18 11:11:36

InnoDBMySQLMVCC

2019-05-13 15:00:14

MySQLMyCat數據庫

2022-06-02 16:04:55

分庫表數據

2020-11-09 14:38:29

Gartner云云計算云管理

2022-05-25 08:06:37

MySQL分庫分表

2022-09-26 08:28:22

分庫分表數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美在线不卡 | 国产美女精品视频免费观看 | 中文字幕 国产 | 久久国产精品视频 | 色一级 | 国内精品伊人久久久久网站 | 欧美日韩一区在线 | 中国一级大黄大片 | 在线观看av网站永久 | 草草视频在线播放 | 99色在线视频 | 亚洲国产精品一区二区www | 一区欧美 | 久久综合色综合 | 亚洲精品一区二区三区中文字幕 | 久久综合九九 | 亚洲协和影视 | 黄色一级毛片 | 天天操天天拍 | 国产精品一区二区三区四区 | 狠狠操电影 | 午夜在线影院 | 日本成人免费网站 | 国色天香成人网 | 日韩成人在线一区 | 密乳av | 高清国产午夜精品久久久久久 | 欧美日本韩国一区二区 | www.黄网 | 日韩视频在线观看中文字幕 | 雨宫琴音一区二区在线 | 亚洲精品1区 | 毛片大全 | 日韩三级电影在线看 | 精品少妇一区二区三区在线播放 | 1级黄色大片 | 91久久久精品国产一区二区蜜臀 | 伊人欧美视频 | 亚洲国产一区二区视频 | 蜜桃视频在线观看免费视频网站www | 精品国产一级 |