數(shù)據(jù)庫(kù)sharding下的主鍵生成策略
數(shù)據(jù)庫(kù)水平分區(qū)(sharding),即對(duì)同一張數(shù)據(jù)庫(kù)表,按照規(guī)則將數(shù)據(jù)切分至多個(gè)數(shù)據(jù)庫(kù)。
如上圖,將user表切分至三個(gè)數(shù)據(jù)庫(kù)中.
在對(duì)數(shù)據(jù)庫(kù)水平分區(qū)的情況下,面對(duì)多個(gè)數(shù)據(jù)庫(kù),想要生成一個(gè)唯一性的主鍵這是一個(gè)問(wèn)題。
通常解決辦法有兩種:
UUID:
使用UUID很容易就可以生成唯一性主鍵,并且不用擔(dān)心主鍵生成效率問(wèn)題,當(dāng)然缺點(diǎn)是UUID的長(zhǎng)度過(guò)長(zhǎng),浪費(fèi)空間,所以下面介紹另外一種方法。
單獨(dú)一臺(tái)服務(wù)器負(fù)責(zé)主鍵生成:
即我們使用一臺(tái)單獨(dú)的服務(wù)器(如mysql) 負(fù)責(zé)主鍵的生成
如果我們是使用mysql數(shù)據(jù)庫(kù),可以創(chuàng)建一張表來(lái)模擬oracle的sequence:
表sql:
create table tab_sequence (value bigint not null)
oracle數(shù)據(jù)庫(kù)直接使用sequence即可.
但現(xiàn)在我們又會(huì)碰到單點(diǎn)問(wèn)題,即如果master掛了,對(duì)我們的應(yīng)用影響非常大。
所以我們可以配合使用mysql 的復(fù)制功能。
配合使用linux HA: heartbeat,就算master服務(wù)器或是硬盤(pán)故障了,我們也可以很快的切換至slave.保障高可用性。
posted on 2009-11-23 18:31 badqiu 閱讀(1778) 評(píng)論(1) 編輯 收藏