最近上線的項(xiàng)目中數(shù)據(jù)庫數(shù)據(jù)已經(jīng)臨近飽和,最大的一張表數(shù)據(jù)已經(jīng)接近3000W,百萬數(shù)據(jù)的表也有幾張,項(xiàng)目要求讀數(shù)據(jù)(select)時(shí)間不能超過0.05秒,但實(shí)際情況已經(jīng)不符合要求,explain建立索引,使用redis,ehcache緩存技術(shù)也已經(jīng)滿足不了要求,所以開始使用讀寫分離技術(shù),可能以后數(shù)據(jù)量上億或者更多的時(shí)候,需要再去考慮分布式數(shù)據(jù)庫的部署,但目前來看,讀寫分離+緩存+索引+表分區(qū)+sql優(yōu)化+負(fù)載均衡是可以滿足億級(jí)數(shù)據(jù)量的查詢工作的,現(xiàn)在就一起來看一下親測(cè)可用的使用spring實(shí)現(xiàn)讀寫分離的步驟:

 

1.  背景

我們一般應(yīng)用對(duì)數(shù)據(jù)庫而言都是“讀多寫少”,也就說對(duì)數(shù)據(jù)庫讀取數(shù)據(jù)的壓力比較大,有一個(gè)思路就是說采用數(shù)據(jù)庫集群的方案,

其中一個(gè)是主庫,負(fù)責(zé)寫入數(shù)據(jù),我們稱之為:寫庫;

其它都是從庫,負(fù)責(zé)讀取數(shù)據(jù),我們稱之為:讀庫;

 

那么,對(duì)我們的要求是:

1、讀庫和寫庫的數(shù)據(jù)一致;(這個(gè)是很重要的一個(gè)問題,處理業(yè)務(wù)邏輯要放在service層去處理,不要在dao或者mapper層面去處理)

2、寫數(shù)據(jù)必須寫到寫庫;

3、讀數(shù)據(jù)必須到讀庫;

2.  方案

解決讀寫分離的方案有兩種:應(yīng)用層解決和中間件解決。

 

2.1. 應(yīng)用層解決:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

 

 

優(yōu)點(diǎn):

1、多數(shù)據(jù)源切換方便,由程序自動(dòng)完成;

2、不需要引入中間件;

3、理論上支持任何數(shù)據(jù)庫;

缺點(diǎn):

1、由程序員完成,運(yùn)維參與不到;

2、不能做到動(dòng)態(tài)增加數(shù)據(jù)源;

 

2.2. 中間