java分庫分表技術

2021-08-20 22:42:31 字數 899 閱讀 4786

解決問題:資料庫分表可以解決單錶海量資料的查詢效能問題,分庫可以解決單台資料庫的併發訪問壓力問題

應用場景:在沒分庫分表情況下當訂單表數量超過1000萬條以上,我們需要對訂單表按照業務進行分庫分表(當超過500萬條資料資料庫查詢用索引效率大大下降)

技術方案:一般都採用第三方工具,當當網的sharding-jdbc,阿里tddl、mycat和cobar等外掛程式

資料分表實現策略:一般採用業務進行分,比如訂單表,如果是使用者訂單那麼按照使用者id後兩位(當資料量不是很大情況下)取模存到不同的資料庫表中,如果是商家訂單那麼按照商家id後兩位(當資料量不是很大情況下)取模存到不同的資料庫表中

資料庫環境:一般採用乙個主機(或者多個,公司有錢),安裝多個資料庫,設定不同資料庫埠而已,就是乙個阿里雲伺服器上裝多個資料庫不同埠而已

主從複製:一般採用主從複製,新增和修改都在主庫,查詢都是在從庫中,一般一對多

分庫分表查詢:當訂單頁面需要根據會員姓名、手機號碼、訂單號、下單開始時間、下單結束時間等等,設計到多個模組一起關聯查詢時,

採用如下方案:

1.對不可變字段做沉餘,方便查詢,比如使用者姓名,在金融平台使用者實名後姓名不能更改.

2.根據阿里規則:各個模組不要做關聯查詢,避免join。比如:上述訂單表查詢,首先到會員資料庫中查詢,然後在到訂單表中查詢。

規則:既然分庫分表就不要join查詢。

重點:(1).一般會員id使用uuid,那麼首先要進行hash獲取到整數值,然後進行去模操作

(2).所有資料根據資料庫表數量進行取模

(3).必須對資料庫查詢關鍵字段新增索引,提高查詢效率

本次利用sharding-jdbc進行分庫分表實戰如下:

mysql分表分庫實現 MySql分表分庫思路

一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...

MySQL範圍分表分庫 mysql 分表分庫策略

唯一id的生成 下面列舉幾種常見的唯一id生成方案,需要滿足兩大核心需求 1.全域性唯一 2趨勢有序 1.用資料庫的auto increment 自增id 來生成,每次通過寫入資料庫一條記錄,利用資料庫id自增的特性獲取唯一,有序的id。優點 使用資料庫原有的功能,相對簡單 能夠保證唯一 能夠保證遞...

mysql 分庫分表實戰 MySQL分庫分表實戰

為什麼要分庫分表 在大型 中,當使用者量以及使用者產生的業務資料量達到單庫單錶效能極限時,為了支撐業務可持續發展,對於重要的核心業務必然要進行分庫分表來儲存業務資料。對於非核心業務產生的大量資料,例如爬蟲爬取的資訊,論壇產生的資料等,可以考慮把資料儲存在像mongodb這樣的nosql儲存裡面,這些...