badqiu

          XPer
          隨筆 - 46, 文章 - 3, 評(píng)論 - 195, 引用 - 0
          數(shù)據(jù)加載中……

          數(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)  編輯  收藏

          評(píng)論

          # re: 數(shù)據(jù)庫(kù)sharding下的主鍵生成策略  回復(fù)  更多評(píng)論   

          金卡十九世紀(jì)
          2009-11-24 13:23 | 99書(shū)城

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 怀远县| 通化县| 肥东县| 东乌珠穆沁旗| 兴安县| 淳化县| 安义县| 彭水| 翁牛特旗| 额济纳旗| 旌德县| 太和县| 紫阳县| 新晃| 肥东县| 尚志市| 普洱| 阆中市| 鄯善县| 平南县| 东乡县| 扎兰屯市| 普安县| 丹阳市| 达日县| 定陶县| 斗六市| 蒙城县| 重庆市| 怀远县| 琼结县| 万全县| 资溪县| 咸宁市| 兰州市| 泾源县| 措美县| 岚皋县| 墨玉县| 阳高县| 邛崃市|