日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分库分表介绍

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分库分表介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

讀寫分離是為了擴展數據庫的讀能力,分庫分表則是為了擴展數據庫的寫能力。

一旦業務表中數據太大(對于mysql,單表數據一般不超過3000w,單庫不超過300G),無論是任何CRUD操作,所耗費資源和性能都極大。這個時候一般就需要

分庫分表,將海量數據分配給N個子表維護。

二、分庫分表優點

分庫優點:降低單臺機器的負載壓力

分表優點:提高數據操作的效率

三、分庫分表的挑戰

主要體現在四個方面:基本的數據增、刪、改操作,分布式ID生成,分布式事務,動態擴容。

3.1 對于研發人員,即使分庫分表,我們仍然希望能夠像單表那樣去操作數據庫。

例如我們希望插入四條用戶記錄:

insert into user(id,name) values (1,”tianshouzhi”),(2,”huhuamin”), (3,”wanghanao”),(4,”luyang”)

  而在分庫分表之后,這樣的sql已經無法執行。只有將sql轉化為如下形式才可以執行:

insert into user_1(id,name) values (1,”tianshouzhi”) insert into user_2(id,name) values (2,”huhuamin”) insert into user_3(id,name) values (3,”wanghanao”) insert into user_0(id,name) values (4,”luyang”)

  

3.2 分布式ID

在分庫分表后,我們不能再使用mysql的自增主鍵。因為在插入記錄的時候,不同的庫生成的記錄的自增id可能會出現沖突。因此需要有一個全局的id生成器。

3.3 分布式事務

例如上面的批量插入記錄到四個不同的庫,如何保證要么同時成功,要么同時失敗。關于分布式事務,mysql支持XA事務,但是效率較低。柔性事務是目前比較主流的方案,柔性事務包括:最大努力通知型、可靠消息最終一致性方案以及TCC兩階段提交。

3.4 動態擴容

動態擴容指的是增加分庫分表的數量。

例如原來的user表拆分到2個庫的四張表上。現在我們希望將分庫的數量變為4個,分表的數量變為8個。這種情況下一般要伴隨著數據遷移。例如在4張表的情況下,id為7的記錄,7%4=3,因此這條記錄位于user_3這張表上。但是現在分表的數量變為了8個,而7%8=7,而user_7這張表上根本就沒有id=7的這條記錄,因此如果不進行數據遷移的話,就會出現記錄找不到的情況。

?

轉載于:https://www.cnblogs.com/zhangjwcode/p/9517965.html

總結

以上是生活随笔為你收集整理的分库分表介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。