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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MyBatis实现Mysql数据库分库分表操作和总结

發布時間:2024/8/24 综合教程 40 生活家
生活随笔 收集整理的這篇文章主要介紹了 MyBatis实现Mysql数据库分库分表操作和总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

作為一個數據庫,作為數據庫中的一張表,隨著用戶的增多隨著時間的推移,總有一天,數據量會大到一個難以處理的地步。這時僅僅一張表的數據就已經超過了千萬,無論是查詢還是修改,對于它的操作都會很耗時,這時就需要進行數據庫切分的操作了。

MyBatis實現分表最簡單步驟

既然文章的標題都這么寫了,不如直接上干貨來的比較實際,我們就先來看看如何實現最簡單的分表。

1、我們模擬用戶表數據量超過千萬(雖然實際不太可能)

2、用戶表原來的名字叫做user_tab,我們切分為user_tab_0和user_tab_1(實際也可能不是這么隨意的名字),這樣就能把原來千萬的數據分離成兩個百萬的數據量的兩張表了。

3、如何操作這兩張表呢?我們利用userId也就是用戶的唯一標識進行區分。

4、userId%2 == 0的用戶操作表user_tab_0,同理userId%2 == 1的用戶操作表user_tab_1

5、那么在MyBatis中sql語句如何實現呢?下面是舉例查詢一個用戶的sql語句

<select id="getUser" parameterType="java.util.Map" resultType="UserDO">
SELECT userId, name
FROM user_tab_#{tabIndex}
WHERE userId = #{userId}
</select>

其中我們傳入了兩個參數tabIndex和userId,tabIndex就是需要操作表的標示值(0或1),這樣如果需要查詢userId為5的用戶,那么最終出現的sql語句就會是:

SELECT userId, name
FROM user_tab_1
WHERE userId = 5

其他多余的DAO服務和實現我這里就不多展示了,相信聰明的你肯定會的。

以上就是最簡單的實現,不需要多余的框架,不需要任何的插件也就滿足了分表的要求。

上面基本上就是所有實現的內容了,下面就要開始詳細說說分離的細節了,看熱鬧的基本可以散了。

我將從下面幾個角度分別來說說。我盡可能用最簡單的白話來說。

分離的方式

切分的方式主要有兩種,水平切分和垂直切分。

1、水平切分

簡單的說就是,把一張表分離成幾張一模一樣的表,然后表的名字不同。就和上面最簡單的例子一樣。

這種切分適合于一張表的數據量過大而導致操作時間變慢的情況,如保存的一些記錄表。

2、垂直切分

把不同的業務模塊分成不同的數據庫,這些業務模塊直接最好是0耦合(簡單的說就是毫無關系)。

這主要是適合數據量普遍較大,而且業務場景比較分散,互相之間沒有邏輯關系的情況。

分離的策略

具體的策略有很多種,你也可以設計你自己的,普遍的策略有下面幾種,只是列舉就不具體展開了。

1、“%”取模,也就是上面例子中實現的,也是最簡單的一種。

2、MD5哈希

3、移位

4、日期時間(根據不同的日期分表,如一個月一張表,這個月就操作這張表,下個月就下張表)

5、枚舉范圍(用戶1-10000操作第一張表,用戶10001-20000操作第二張表)

分離的問題

下面說說最終要的點,導致的問題。

數據庫肯定不是你說分就分的。(人家比較有感情的,怎么能說分就分呢?)

正經來說,我列舉了下面幾個分離只有會導致的問題。

1、添加時主鍵唯一性的問題;分離之后多張表,就會導致原有的自增長主鍵不唯一,所以沒有辦法自增長了,導致問題,解決方案的也是有的,比如單獨維護一張主鍵表專門用來存放當前主鍵,或者說用別的中間件等。

2、新增時的效率問題,雖然不是個大問題,但是新增肯定會多了計算量嘛,這個問題可以忽略不計。

3、查詢所帶來的分頁問題,分離成多張表之后,分頁查詢就很困難了,這也考慮到不同的分離用不同的解決方案,總之會產生問題。

4、同理,關聯查詢,原本一張表關聯別的表或者別的表關聯一張表,都很簡單,但是現在分離之后就難了。

5、事務問題,多張表需要使用分布式事務才能完成原來帶有事務的操作。因為原來的事務只是鎖一張表現在可能要鎖多張了呢。

6、擴展性問題,有的切分策略下,對數據的擴展性其實不好,之后如果有更多的數據來了,是說還能再新建表來擴展嗎?

分離的原則

下面總結了幾點分離的原則,主要是參考了網絡上的,沒有任何實際的依據(我也不是個年薪百萬的DBA也碰不到那么大的數據去實際檢驗嘛),所以如果有任何問題也請指出。

1、能不分就不分

2、能分少就不分多

3、多冗余,不關聯

4、避免使用分布式事務,主要是太難我也不會啊

5、單表千萬記錄以內就不分

6、現在不分以后分也來得及

7、擴展,耦合,仔細考慮

實現分離的方式

最后說說分離的方式,現在流行使用的DAO框架是MyBatis,也有很多別的框架。分離的實現主要有下面幾種方式。

1、原生實現,就和最上面的例子一樣,不需要其他任何的東西,利用原生的框架,自己去控制實現。

優點是:容易控制,掌握主動權。

缺點是:代碼量多,需要自己很清楚,修改不方便,不支持復雜的切分,比如切分之后還需要做一些分頁查詢,還有上面說的主鍵問題等。

2、插件實現,利用框架本身開發的一些插件,去實現這些插件,然后利用插件去訪問數據庫,直接實現分離。

優點是:代碼量少,實現簡單,擴展性好。

缺點是:不易控制,分離方式有限,出現問題難以解決。沒有找到特別成熟的插件。

3、中間件實現。利用一些數據庫訪問的中間件,在訪問數據庫之前做一些操作使得sql進行相應的變化從而實現分離。

優點是:耦合小,擴展性好,可以解決分布式事務的問題。

確定是:實現比較復雜,需要對中間件進行學習,成本較大。維護也是一個大問題,萬一掛掉了。。

總之方式各有千秋,但是考慮到成本上面,第一種幾乎是0成本,即可上手,而且比較容易控制,就如同最上面給出的例子一樣,而且當前我處理的數據還沒有到達那種處處要分離的地步,所以我選擇第一種。也推薦使用。如果你找到比較好用的插件或者中間件也可以在評論中推薦。

總結

在實際項目中,我是因為用戶的賬戶記錄過多所以不得不進行分離,而且因為賬戶記錄更多的只是新增沒有修改和刪除,查詢也是少數,所以使用了最簡單的方式進行分離,也選擇了最簡單的策略。希望上面的原則策略方式和問題的總結能對你有所幫助,有所參考。

參考博客:

http://blog.csdn.net/jerome_s/article/details/52492616

http://blog.csdn.net/buchengbugui/article/details/60972176

http://blog.csdn.net/a63297066/article/details/51459422

轉載請注明出處:http://www.cnblogs.com/linkstar/p/7404698.html

作者:LinkinStar

總結

以上是生活随笔為你收集整理的MyBatis实现Mysql数据库分库分表操作和总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人激情视频网站 | 欧美大片免费播放器 | 91福利视频免费观看 | 中国国产bdsm紧缚捆绑 | 成人免费在线观看网站 | 伊人久久一区 | 亚洲女人天堂网 | 国产老头和老头xxxx× | 亚洲色图在线播放 | 无码人妻丰满熟妇区毛片18 | 欧美囗交做爰视频 | 欧美综合激情 | 亚洲成人777| 在线精品一区二区三区 | xxx视频网站 | 香蕉网站在线观看 | 黑人巨大av| 午夜片在线观看 | 成人手机视频 | 欧美色图30p | 日韩精品无码一区二区三区 | 日韩中文字幕在线免费观看 | 久草成人在线视频 | 野花成人免费视频 | 视频一区 国产 | 国产精品啊啊啊 | 色婷婷热久久 | 太久av | 国产精品久久久久久 | 国产情趣视频 | 成人欧美一区二区三区黑人免费 | 日本精品久久久久久久 | 国产成人无码精品 | 亚洲视频欧洲视频 | 你懂的av在线 | 欧美人交a欧美精品 | 加勒比视频在线观看 | 色综合中文综合网 | 日本护士体内she精2xxx | 精品久久成人 | 国产毛片毛片毛片毛片 | 亚洲一区视频网站 | 五月婷婷导航 | 国产盗摄一区二区三区 | 91爱| 天天草天天摸 | 亚洲欧美精品久久 | 久久久久久国产精品免费 | 视频一区国产 | 免费观看nba乐趣影院 | 韩国一区二区在线播放 | 久久久国产成人一区二区三区 | 免费国产羞羞网站视频 | 国产做爰全免费的视频软件 | 久久波多野 | 探花国产精品一区二区 | 欧美高清69hd | 99视频在线| 日韩欧美在线观看一区二区 | 久久久精品999 | 日韩中文字幕观看 | 一卡二卡精品 | 日本激情电影 | 精品视频一区二区三区 | 无码人妻精品一区二区三区99v | www.欧美色| 亚洲精品人 | 都市激情亚洲 | 尤物视频在线观看免费 | 亚洲四虎av | 拔插拔插影库 | 亚洲欧美日韩成人在线 | 一级黄色片国产 | 亚洲jizzjizz| 很黄很污的视频 | 日本美女一区二区三区 | av大全免费 | 五月开心激情 | 高清视频一区二区 | 欧美亚洲天堂网 | av资源免费观看 | 日韩黄色在线播放 | 久久综合伊人77777蜜臀 | 国产精品视频一区在线观看 | 国产有码在线 | 人人干免费| 国家队动漫免费观看在线观看晨光 | 久久尤物视频 | 亚洲一区二区自偷自拍 | 久久久一 | 免费a v网站| 欧美日韩一区二区三区在线观看 | 欧美丰满少妇 | 国产精品欧美亚洲 | 久久精品一区二区国产 | 这里只有精品视频 | 亚洲一区二区精华 | 男同av在线观看一区二区三区 | 日韩av中文 |