資料庫 ID 生成方案 資料庫多主模式

2021-09-29 23:33:36 字數 778 閱讀 4065

將兩個資料庫組成主從模式的集群,正常情況下,是可以解決資料庫的可靠性問題,但如果主庫掛掉後,資料沒有及時同步到從庫,這個時候就會出現 id 重複的問題。

可以使用雙主模式集群,也就是兩個例項都能單獨的生產自增id,這樣能夠提高效率,不過就需要單獨給每個資料庫例項配置不同的起始值和自增步長。

第一台 mysql 例項配置:

set @@auto_increment_offset = 1;     -- 起始值

set @@auto_increment_increment = 2; -- 步長

第二台 mysql 例項配置:

set @@auto_increment_offset = 2;     -- 起始值

set @@auto_increment_increment = 2; -- 步長

經過上面的配置後,這兩台例項生成的 id 序列如下:

mysql01:起始值為1,步長為2,id 生成的序列為:1,3,5,7,9,...

mysql02:起始值為2,步長為2,id 生成的序列為:2,4,6,8,10,...

實行這種方案後,就算其中某一台例項不能提供正常服務了,也不會完全影響整個系統。

但是,這種方案的擴充套件性並不太好,如果兩台例項不夠用,就需要新增新的例項來提高效能。

假設要再增加新的例項,不僅要解決 id 衝突的問題,而且還需要停止服務才能進行。

為解決以上問題,後面還會繼續介紹更常見的一些解決方案。

資料庫 ID 生成方案 Redis

使用 redis 來生成分布式 id,其實和利用 mysql 自增 id 類似,可以利用 redis 中的 incr 命令來實現原子性的自增與返回,比如 127.0.0.1 6379 set id 1 初始化自增 id 為1 ok127.0.0.1 6379 incr id 增加1,並返回 inte...

資料庫 ID 生成方案 號段模式

還可以使用號段的方式來獲取自增 id,號段可以理解成批量獲取。比如從資料庫獲取 id 時,就可以批量獲取多個 id 並快取在本地,提公升效率。比如每次從資料庫獲取 id 時,就獲取乙個號段,如 1,1000 這個範圍表示1000個 id,業務應用在請求提供 id 時,只需要在本地從1開始自增並返回,...

ibatis不同資料庫主鍵ID生成方式

在使用ibatis插入資料進資料庫的時候,會用到一些sequence的資料,有些情況下,在插入完成之後還需要將sequence的值返回,然後才能進行下一步的操作。使用ibatis的selectkey就可以得到sequence的值,同時也會將值返回。不過對於不同的資料庫有不同的操作方式。對於oracl...