MySQL分片存儲存儲 生成(chéng)全局唯一ID
Time:2021/07/11 19:11:17 Click:
把一個系統的數據庫轉爲分片數據存儲時(shí),經(jīng)常需要在多台的MySQL數據庫服務器上生成(chéng)全局唯一的ID。單一的數據存儲時(shí)通常用AUTO_INCREMENT列來取得唯一的ID。但涉及到多台的服務器就(jiù)不好(hǎo)辦了。下面(miàn)簡介幾種(zhǒng)解決方案。
1、使用auto_increment_increment和auto_increment_offset
其實這(zhè)種(zhǒng)方式理解起(qǐ)來很簡單,這(zhè)是使用MySQL的AUTO_INCREMENT偏移來實現的。比如有兩(liǎng)台MySQL服務器,我們就(jiù)設置偏移量爲2,初始值一個爲0.一個爲1,這(zhè)樣(yàng)兩(liǎng)台服務器一台爲奇數,一台爲偶數。這(zhè)裡(lǐ)主要重點就(jiù)是服務器的初始配置和服務器數據備份。
2、全局節點創建表
也就(jiù)是做一張全局的AUTO_INCREMENT表,其它節點都(dōu)是從該節點取得ID。這(zhè)樣(yàng)就(jiù)可以保證多台服務器的ID唯一。
3、使用memcached
在memcached的API中有一個incr()函數,可以自動增長(cháng)數字并且返回結果。另外也可以使用Redis。其實原理與上一條的差不多
4、批量的分配
向(xiàng)不同的服務器分配一段ID,當服務器的ID段用完,然後(hòu)重新請求分配。
5、使用GUID值
可以用GUID()函數來實現全局唯一ID,但對(duì)于InnoDB存儲引擎來說(shuō),這(zhè)樣(yàng)不規則的主鍵對(duì)MySQL很不利。