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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql分库分表方案浅析

發布時間:2024/9/20 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql分库分表方案浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分庫分表(這里不討論中間件)

分庫:原因:單機負載高,優點:降低單機負載
分表:原因:單表讀寫壓力大或者數據增長快,優點:使用多個表,提高讀寫效率
1、(代碼)分表,即把一個很大的表達數據分到幾個表中,這樣每個表數據都不多。
???? ? ? ? ? ??? 優點:提高并發量,減小鎖的粒度
???????????????? 缺點:代碼維護成本高,相關sql都需要改動

2、(mysql)分區,所有的數據還在一個表中,但物理存儲數據根據一定的規則存放在不同的文件中,文件也可以放到另外磁盤上
??? ? ? ? ? ? ?? ?? 優點:代碼維護量小,基本不用改動,提高IO吞吐量
??? ? ? ? ? ? ? ? ? 缺點:表的并發程度沒有增加



分表
在一個庫中進行進行分表,有兩種方法
1、mysql表分區 (推薦)
使用表分區時,分區字段。需要根據業務來定,這里所說的業務,指的就是需要做分表的表會和哪些業務相關,
比如訂單表,主鍵是訂單ID,分表時,需要結合業務綜合看待。
單純就技術看:
如果按訂單ID進行hash,操作分布多個表,但是在拓展時,就很麻煩
如果按訂單ID進行范圍range,操作集中某幾個表,拓展時,很方便
綜合結合看:
a,當業務需要根據時間來查詢
如果按訂單ID進行表分區,那么會造成查詢無法走索引,導致全表掃描,效率低下,
如果按時間ID進行表分區,查詢會走索引,但是時間都是按范圍range,操作會集中幾個表,讀寫壓力就很明顯
b,當業務需要查詢用戶某一時間段的訂單
c,當業務需要.....
需要把所有業務都考慮進去

2、分表
分表的做法和表分區相同,不同的是需要在代碼中實現這個功能。做法是先建立分表,然后在程序中寫分表代碼邏輯。
比如需要對訂單表分表,代碼中就會按訂單ID(也可以任何字段)進行范圍、或者hash取余計算該訂單ID所處于的表,如果使用hash,可以使用一致性hash分表,避免hash取模方式在表增刪時遷移全部數據。
同樣,分表也需要集合業務,而且更加麻煩
單純就技術看:
如果按訂單ID進行hash,操作分布多個表,但是在拓展時,就很麻煩,需要把原來的數據再重新導入所有節點,這里很消耗時間,關鍵是導致系統很長的不可用時間
如果按訂單ID進行范圍range,操作集中某幾個表,拓展時,很方便
這里和表分區的技術優缺點相同。
綜合結合看:
a,當業務需要根據時間來查詢
如果按訂單ID進行表分區,無論是范圍,還是Hash,都無法根據時間進行查詢,只有全表掃描
如果按時間ID進行表分區,基本是按范圍分表,可以定位時間范圍。但是業務肯定會用訂單ID來查詢,而代碼是根據時間ID做范圍分表,等于說根據訂單ID查詢的業務就不可用了。
b,當業務需要查詢用戶某一時間段的訂單
c,當業務需要.....
需要把所有業務都考慮進去


從這里可以看到,單純做庫內的分表,mysql自帶的表分區適應度更高,分表的做法只適合于沒有復雜的業務、多維度的查詢。
一定要和業務結合起來,不然會遇到分了表后,業務無法運行的尷尬場面。

分庫
在數據庫中進行進行分庫,有兩個辦法
1、代碼分庫
在代碼中進行范圍、或者hash取余計算該訂單ID所處于的庫,如果使用hash,最好是一致性hash分庫,避免hash取模方式在節點增刪時遷移全部數據。
單純就技術看:
優點:計算簡單,
缺點:增刪庫時,需要修改代碼,并且需要遷移數據
2、單獨建庫建表,存放數據對應位置
單純就技術看:
優點:可拓展性強
缺點:多次查詢,效率低下,數據是否遷移看業務

綜合結合看:
無論代碼分庫還是表存放位置,都存在跨庫查詢,已經分布式事務的問題,這里一定要綜合業務,梳理流程,避免分布式事務。

分庫分表
在數據庫中進行進行分庫分表,有兩個辦法
1、代碼分庫
a、代碼分庫+表分區
像這種組合的分庫,一定要考慮到后期拓展的問題,如果是按范圍,就沒問題,直接增庫,如果是按hash,就需要把所有的數據全部導出,再導入,時間代價很大。
優點:只需一層計算數據位置,表分區管理簡單
缺點:需要遷移數據時,表分區較麻煩
這里沒有寫一致性hash分庫+表分區,因為組合不能起到應有的效果。例如,分庫使用一致性Hash,而表分區是hash,兩邊的算法不一致,數據無法對應, 就只能全部遷移了。
b、代碼分庫+分表
一種是hash分庫 + hash分表,這個方法和上面的a方法相比,拓展時的都存在數據遷移時間過長,不同的是,a方法的表分區管理起來更簡單。
一種是一致性hash分庫 + 一致性hash分表,相比較,一致性Hash不易理解,有難度,遷移需要玩完備的方案,很繁瑣,但是拓展時,只需要遷移部分數據即可。
優點:自由度高
缺點:多層計算,維護難度大
這里沒有寫一致性hash和hash分表的組合,因為一致性hash要求算法一致。如果算法不同,在數據遷移時,很可能就會遷移全部數據,甚至數據混亂。
2、建庫建表,存放數據對應的DB位置和表位置
注意:
分庫分表中可能遇到跨庫查詢或者分布式事務的問題,比如用戶ID為1的數據在庫A,用戶1的訂單數據在庫B,可以將用戶1的關聯訂單數據在插入時選擇用戶1所在的庫A,這樣就能避免分布式查詢和事務的問題。

來源:http://blog.csdn.net/stubborn_cow/article/details/50781310

總結

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

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

主站蜘蛛池模板: 日本黄色特级片 | 99久久久久久久久 | 清纯唯美亚洲 | 亚洲成人一二三 | 色片网站在线观看 | 欧美熟妇精品黑人巨大一二三区 | 欧美精品乱码久久久久久按摩 | 欧亚毛片 | 国产伦精品视频一区二区三区 | 国产免费视频一区二区三区 | 天天视频黄色 | 欧美国产日韩在线观看 | 亚洲 欧美 成人 | 色婷网| 欧美一级黑人 | 国产综合内射日韩久 | 最近免费中文字幕大全免费版视频 | 免费黄色在线网址 | 老女人网站 | 精品在线二区 | 久久密av | 成人免费高清 | 成人交配视频 | 人妖干美女 | 伊朗做爰xxxⅹ性视频 | 强乱中文字幕 | 亚洲手机视频 | 91久久精品一区二区 | 国产初高中真实精品视频 | 肉大捧一进一出免费视频 | 国产人妖在线 | 午夜综合网 | 中文字幕不卡在线观看 | 91亚洲国产成人久久精品麻豆 | 亚洲人在线视频 | 黄色片小视频 | 日韩手机视频 | 亚洲欧美另类国产 | 免费精品视频一区二区三区 | 国产欧美一区二区精品性色99 | 亚洲熟女乱色一区二区三区 | 免费黄毛片 | av激情小说 | 午夜精品福利一区二区 | 欧美成人91| 欧美一区二区三区久久综合 | 日韩精品一区二区三区色欲av | 茄子视频懂你更多在线观看 | 精品国产免费看 | 40到50岁中老年妇女毛片 | 五月天久久久久 | 中文字幕国产一区 | 黄色你懂的| 爱爱三级视频 | 污片在线看 | 做爰无遮挡三级 | 蜜桃av一区| 久久一二三区 | 国产网站一区 | 把高贵美妇调教成玩物 | 老女人网站| 亚洲无人区码一码二码三码 | 久久6精品 | 亚洲天堂免费视频 | 久久福利在线 | 欧美国产不卡 | 久久久青青草 | 一区二区91 | 91精品成人| 污视频91 | 国产欧美在线播放 | 日韩123区 | 欧洲亚洲视频 | 美女131爽爽爽做爰视频 | 欧美亚洲视频在线观看 | 国产成人精品白浆久久69 | 久久这里只有精品久久 | 国产精品一区二区三区久久 | 少妇免费直播 | 亚洲性天堂 | 日本免费高清一区二区 | 亚洲在线中文字幕 | 婷婷综合社区 | 国产精品色悠悠 | 麻豆精品免费观看 | 日韩精品免费一区二区在线观看 | 久久久久国产一区二区三区 | 国产精品久久久久久久无码 | 美女草逼视频 | 超污巨黄的小短文 | 成人久久久精品国产乱码一区二区 | 亚洲性事 | 老司机深夜网站 | 亚洲色图少妇 | 梦梦电影免费高清在线观看 | 欧美日韩第一页 | 欧美日韩一区二 | 日韩一级在线 | 亚洲白浆 |