數(shù)據(jù)庫水平分區(qū)(sharding),即對同一張數(shù)據(jù)庫表,按照規(guī)則將數(shù)據(jù)切分至多個數(shù)據(jù)庫。

如上圖,將user表切分至三個數(shù)據(jù)庫中.
在對數(shù)據(jù)庫水平分區(qū)的情況下,面對多個數(shù)據(jù)庫,想要生成一個唯一性的主鍵這是一個問題。
通常解決辦法有兩種:
UUID:
使用UUID很容易就可以生成唯一性主鍵,并且不用擔(dān)心主鍵生成效率問題,當(dāng)然缺點是UUID的長度過長,浪費空間,所以下面介紹另外一種方法。
單獨一臺服務(wù)器負責(zé)主鍵生成:
即我們使用一臺單獨的服務(wù)器(如mysql) 負責(zé)主鍵的生成
如果我們是使用mysql數(shù)據(jù)庫,可以創(chuàng)建一張表來模擬oracle的sequence:
表sql:
create table tab_sequence (value bigint not null)
oracle數(shù)據(jù)庫直接使用sequence即可.

但現(xiàn)在我們又會碰到單點問題,即如果master掛了,對我們的應(yīng)用影響非常大。
所以我們可以配合使用mysql 的復(fù)制功能。

配合使用linux HA: heartbeat,就算master服務(wù)器或是硬盤故障了,我們也可以很快的切換至slave.保障高可用性。