çæ声æ æ¬ç«ååæç« ç± èå å表
转载请注æ èå | http://vearne.cc
åè¨
å¨åå¸å¼ç¯å¢ä¸ï¼çæå ¨å±å¯ä¸IDæ¯é常éæ±ãæ¬æå°ä»ç»å ç§å¸¸è§çææ¹æ³ï¼å¹¶å¯¹å®ä»¬çä¼ç¼ºç¹ååºç¹è¯ã
0. 8个åè
è¯è¨ææ°æ®åº
å 建类å
Golang
uint64
Java
long
Python
int
MySQL
bigint unsigned
2 ^ 32(4个åè)æå¤åªæ40å¤äº¿ï¼å¯¹äºé«å¹¶åçç³»ç»ï¼è¯å®ä¸æ¯å¤çã
以æ°æµªå¾®å为ä¾ï¼æ¯å¤©çæ°å¢çå¾®åéé½è¿äº¿ï¼æ以èèå°IDç容éï¼è¿ä¸ªIDçé¿åº¦è³å°æ¯8个åè
1. UUID
é¿åº¦: 为16 bytes, 128 bits
44e91a8a58d111e8ae84784f43a6cab8
è§åèèµæ1ï¼
5ç§çæ¬
1. æ¶é´ççæ¬
2. DCE Security
3. MD5åå¸
4. (伪)éæºæ°
5. SHA-1åå¸
以Version 1为ä¾å
time_inc + clk_seq + node
points
time_incæ¶é´ç²¾åº¦ä¸º100 ns
å³ä½¿å¨100ns以å ï¼2次çæçtime_incä¹ä¸ä¼éå¤ï¼å 为ä¼èªå¨å 1
clk_seq 为2个bytesä¸è¬æ¯éæºæ°(2 ^ 16 为65536)
åè®®ææ¡£ä¸åæï¼æ¤å段å¯ä»¥ç¨æ¥é²æ¢æ¶éåæ¨ï¼ä½æ¯å¨é«å¹¶åæ åµä¸ï¼ä¹å¾é¾ä¿è¯ä¸åºç°å²çªã
nodeåmacå°å
ä¸é¢æ¯pythonçuuidåºçæçä¸ç»ID
a7748921-58d9-11e8-a727-784f43a6cab8
a70b016e-58d9-11e8-8a8c-784f43a6cab8
a6991957-58d9-11e8-8874-784f43a6cab8
a5b143ba-58d9-11e8-9600-784f43a6cab8
2. snowflake
é¿åº¦: 8 bytes
216627617464324190
time + workerID + inc
points
timeç精度æ¯å°æ¯«ç§
workerIDçæ°éæ大为1024ï¼workerIDçè·åååé å¯è½æ¯è¾éº»ç¦
1毫ç§å çæçæ大IDæ°é为2ç12次æ¹ï¼çº¦ä¸º4096
æ¶éåæ¨ä¼äº§çIDå²çª
snowflakeæ¯ç±twitteræåºçï¼å¨twitterä¸ç¨äºçætwitterID
3. Mongdb objectID
é¿åº¦: 12 bytes
åæç §16è¿å¶è¡¨ç¤ºï¼å¦ææ¯å符串å 24个åè
time + machine + pid + inc
points
为äºéä½Server端çåå, objectIDæ¯å¨å®¢æ·ç«¯çæç
timeç精度æ¯å°ç§
machine ä¸è¬æ¯æºå¨ä¸»æºåçæ£åå¼
1ç§å çæçæ大IDæ°é为2ç24次æ¹ï¼çº¦ä¸º1600w
å¦æè¦å²çª2ç§æ åµ
1. 主æºæ è¯å®å ¨ä¸æ ·
2. ä¸ç§å 产ççIDè¦è¶ è¿1600w
3. æ¶éåæ¨ä¼äº§çIDå²çª
4. æ°æ®åºçæ1.0
é¿åº¦: 8 bytes
æ°æ®åºä¸ç表ç»æ
CREATE TABLE `wuid1` (
`h` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`x` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`x`),
UNIQUE KEY `h` (`h`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ä»æ°æ®åºè·åIDçé«ä½
REPLACE INTO wuid1(x) VALUES (0);
SELECT LAST_INSERT_ID();
注æ LAST_INSERT_ID()è¿åçæ¯èªå¢å段çææ°å¼ï¼å®ä¸å ·ä½çsessionç¸å ³ï¼æ¯ä¸ªSessionç¸äºç¬ç«ï¼å æ¤æ é使ç¨äºå¡
Points
çæé度åå³äºæ°æ®åºé度ï¼ä½è³å°å¯ä»¥è¾¾å°1w/s
5. æ°æ®åºçæ2.0
é¿åº¦: 8 bytes
ä¸æ¬¡ç³è¯·ä¸ä¸ªID段ï¼ç¨å®ä¹ååéæ°ç³è¯·
以edwingeng/wuid为ä¾ï¼å®çæçID为8 bytes(64 bits), å ¶ä¸é«24bitså¨æ°æ®åºä¸ç»´æ¤ï¼æ¯æMySQL/Redis/MongoDB ä¸ç§æ°æ®åº
æ°æ®åºä¸ç表ç»æ
CREATE TABLE `wuid2` (
`h` int(10) NOT NULL AUTO_INCREMENT,
`x` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`x`),
UNIQUE KEY `h` (`h`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ä»æ°æ®åºè·åIDçé«ä½
REPLACE INTO wuid2(x) VALUES (0);
SELECT LAST_INSERT_ID();
Points
çæé度å¯è¾¾1000w/s
å¨è ¾è®¯å é¨è¢«ç¨äºçæ微信ID
ç¾å¢å é¨è¢«ä½¿ç¨çæ
æ»ç»
å ¶å®çæIDçæ¹æ³ï¼è¿æå¾å¤ï¼æ¯å¦ä½¿ç¨Redisï¼ä½æ¯éè¦å½å¿ï¼Rediså®æºä»¥åï¼å次å¯å¨çèµ·å§æ°æ®çé®é¢ã
对IDå¯ä¸æ§è¦æ±æ´é«çåºæ¯ï¼æ¯å¦ä¸å¡è®¢åIDï¼æ¶æ¯IDï¼å»ºè®®ä½¿ç¨æ¹æ³4æè æ¹æ³5ï¼å ¶å®æ åµå¯ä»¥ä½¿ç¨æ¹æ³2æè æ¹æ³1
å¦å¤ç±äºUUIDé¿åº¦ä¸º16个åèï¼å¦æè¦åå¨å ¥æ°æ®åºï¼ä¸è¬æ¯ä¿åå®ç16è¿å¶å½¢å¼(32个åè)æ¯ä»¥å符串形å¼ä¿åï¼è¦èèç´¢å¼çå¼éååå¨å¼éã
æ©å±æè
è¿å ç§æ¹æ³çæçIDæ¯å¦æ»¡è¶³ä»¥ä¸æ¡ä»¶
1. å ¨å±å¯ä¸æ§
2. è¶å¿éå¢
3. åè°éå¢
4. ä¿¡æ¯å®å ¨
åèèµæ
å¦ææçæç« å¯¹ä½ æ帮å©ï¼ä½ å¯ä»¥ç»ææèµä»¥ä¿ä½¿ææ¿åºæ´å¤çæ¶é´åç²¾åæ¥å享æçç»éªåæèæ»ç»ã