數據庫sharding下的主鍵生成策略
數據庫水平分區(sharding),即對同一張數據庫表,按照規則將數據切分至多個數據庫。
如上圖,將user表切分至三個數據庫中.
在對數據庫水平分區的情況下,面對多個數據庫,想要生成一個唯一性的主鍵這是一個問題。
通常解決辦法有兩種:
UUID:
使用UUID很容易就可以生成唯一性主鍵,并且不用擔心主鍵生成效率問題,當然缺點是UUID的長度過長,浪費空間,所以下面介紹另外一種方法。
單獨一臺服務器負責主鍵生成:
即我們使用一臺單獨的服務器(如mysql) 負責主鍵的生成
如果我們是使用mysql數據庫,可以創建一張表來模擬oracle的sequence:
表sql:
create table tab_sequence (value bigint not null)
oracle數據庫直接使用sequence即可.
但現在我們又會碰到單點問題,即如果master掛了,對我們的應用影響非常大。
所以我們可以配合使用mysql 的復制功能。
配合使用linux HA: heartbeat,就算master服務器或是硬盤故障了,我們也可以很快的切換至slave.保障高可用性。