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很不利。






TAG
TOP

錦江區聚格樂享網絡工作室@2012 版權所有
蜀ICP備12016524号-2

立即咨詢
成(chéng)都(dōu)網站建設,成(chéng)都(dōu)做網站,錦江區聚格樂享網絡工作室
40f13d50b73e104f832ed1b719ae6935