Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·Ö²¼Ê½¼Ü¹¹ÏµÍ³Éú³ÉÈ«¾ÖΨһÐòÁкŵÄÒ»¸ö˼·
 
  3100  次浏览      27
 2018-1-5  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ 21CTO,±¾ÎÄͨ¹ýЯ³ÌÓû§IDÉú³ÉÆ÷µÄʵÏÖ£¬Ï£ÍûÄܹ»¶Ô´ó¼ÒÉè¼Æ·Ö¿â·Ö±íµÄΨһidÓÐһЩеÄ˼·¡£

Ò»¡¢Ïà¹Ø±³¾°

·Ö²¼Ê½¼Ü¹¹Ï£¬Î¨Ò»ÐòÁкÅÉú³ÉÊÇÎÒÃÇÔÚÉè¼ÆÒ»¸öϵͳ£¬ÓÈÆäÊÇÊý¾Ý¿âʹÓ÷ֿâ·Ö±íµÄʱºò³£³£»áÓö¼ûµÄÎÊÌâ¡£µ±·Ö³ÉÈô¸É¸ösharding±íºó£¬ÈçºÎÄܹ»¿ìËÙÄõ½Ò»¸öΨһÐòÁкţ¬ÊǾ­³£Óöµ½µÄÎÊÌâ¡£

ÔÚЯ³ÌÕ˺ÅÊý¾Ý¿âÇ¨ÒÆMySQL¹ý³ÌÖУ¬ÎÒÃǶÔÓû§IDµÄÉú³É·½°¸½øÐÐÁËеÄÉè¼Æ£¬ÒªÇóÄܹ»Ö§³ÅЯ³ÌÏÖÓеÄÐÂÓû§×¢²áÌåÁ¿¡£

¶þ¡¢ÌØÐÔÐèÇó

1. È«¾ÖΨһ

2. Ö§³Ö¸ß²¢·¢

3. Äܹ»ÌåÏÖÒ»¶¨ÊôÐÔ

4. ¸ß¿É¿¿£¬ÈÝ´íµ¥µã¹ÊÕÏ

5. ¸ßÐÔÄÜ

Èý¡¢ÒµÄÚ·½°¸

Éú³ÉIDµÄ·½·¨Óкܶ࣬À´ÊÊÓ¦²»Í¬µÄ³¡¾°¡¢ÐèÇóÒÔ¼°ÐÔÄÜÒªÇó¡£

³£¼û·½Ê½ÓУº

1¡¢ÀûÓÃÊý¾Ý¿âµÝÔö£¬È«Êý¾Ý¿âΨһ¡£

Óŵ㣺Ã÷ÏÔ£¬¿É¿Ø¡£

ȱµã£ºµ¥¿âµ¥±í£¬Êý¾Ý¿âѹÁ¦´ó¡£

2¡¢UUID£¬ Éú³ÉµÄÊÇlength=32µÄ16½øÖƸñʽµÄ×Ö·û´®£¬Èç¹û»ØÍËΪbyteÊý×é¹²16¸öbyteÔªËØ£¬¼´UUIDÊÇÒ»¸ö128bit³¤µÄÊý×Ö£¬Ò»°ãÓÃ16½øÖƱíʾ¡£

Óŵ㣺¶ÔÊý¾Ý¿âѹÁ¦¼õÇáÁË¡£

ȱµã£ºµ«ÊÇÅÅÐòÔõô°ì£¿

´ËÍ⻹ÓÐUUIDµÄ±äÖÖ£¬Ôö¼ÓÒ»¸öʱ¼äÆ´½Ó£¬µ«ÊÇ»áÔì³Éid·Ç³£³¤¡£

3¡¢twitterÔڰѴ洢ϵͳ´ÓMySQLÇ¨ÒÆµ½CassandraµÄ¹ý³ÌÖÐÓÉÓÚCassandraûÓÐ˳ÐòIDÉú³É»úÖÆ£¬ÓÚÊÇ×Ô¼º¿ª·¢ÁËÒ»Ì×È«¾ÖΨһIDÉú³É·þÎñ£ºSnowflake¡£

1. 41λµÄʱ¼äÐòÁУ¨¾«È·µ½ºÁÃ룬41λµÄ³¤¶È¿ÉÒÔʹÓÃ69Ä꣩

2. 10λµÄ»úÆ÷±êʶ£¨10λµÄ³¤¶È×î¶àÖ§³Ö²¿Êð1024¸ö½Úµã£©

3. 12λµÄ¼ÆÊý˳ÐòºÅ£¨12λµÄ¼ÆÊý˳ÐòºÅÖ§³Öÿ¸ö½ÚµãÿºÁÃë²úÉú4096¸öIDÐòºÅ£© ×î¸ßλÊÇ·ûºÅλ£¬Ê¼ÖÕΪ0¡£

Óŵ㣺¸ßÐÔÄÜ£¬µÍÑÓ³Ù£»¶ÀÁ¢µÄÓ¦Óã»°´Ê±¼äÓÐÐò¡£

ȱµã£ºÐèÒª¶ÀÁ¢µÄ¿ª·¢ºÍ²¿Êð¡£

4¡¢RedisÉú³ÉID

µ±Ê¹ÓÃÊý¾Ý¿âÀ´Éú³ÉIDÐÔÄܲ»¹»ÒªÇóµÄʱºò£¬ÎÒÃÇ¿ÉÒÔ³¢ÊÔʹÓÃRedisÀ´Éú³ÉID¡£ÕâÖ÷ÒªÒÀÀµÓÚRedisÊǵ¥Ï̵߳ģ¬ËùÒÔÒ²¿ÉÒÔÓÃÉú³ÉÈ«¾ÖΨһµÄID¡£¿ÉÒÔÓÃRedisµÄÔ­×Ó²Ù×÷INCRºÍINCRBYÀ´ÊµÏÖ¡£

¿ÉÒÔʹÓÃRedis¼¯ÈºÀ´»ñÈ¡¸ü¸ßµÄÍÌÍÂÁ¿¡£¼ÙÈçÒ»¸ö¼¯ÈºÖÐÓÐ5̨Redis¡£¿ÉÒÔ³õʼ»¯Ã¿Ì¨RedisµÄÖµ·Ö±ðÊÇ1,2,3,4,5£¬È»ºó²½³¤¶¼ÊÇ5¡£¸÷¸öRedisÉú³ÉµÄIDΪ£º

A£º1,6,11,16,21

B£º2,7,12,17,22

C£º3,8,13,18,23

D£º4,9,14,19,24

E£º5,10,15,20,25

±È½ÏÊʺÏʹÓÃRedisÀ´Éú³ÉÿÌì´Ó0¿ªÊ¼µÄÁ÷Ë®ºÅ¡£±ÈÈç¶©µ¥ºÅ=ÈÕÆÚ+µ±ÈÕ×ÔÔö³¤ºÅ¡£¿ÉÒÔÿÌìÔÚRedisÖÐÉú³ÉÒ»¸öKey£¬Ê¹ÓÃINCR½øÐÐÀÛ¼Ó¡£

Óŵ㣺

²»ÒÀÀµÓÚÊý¾Ý¿â£¬Áé»î·½±ã£¬ÇÒÐÔÄÜÓÅÓÚÊý¾Ý¿â¡£

Êý×ÖIDÌìÈ»ÅÅÐò£¬¶Ô·ÖÒ³»òÕßÐèÒªÅÅÐòµÄ½á¹ûºÜÓаïÖú¡£

ʹÓÃRedis¼¯ÈºÒ²¿ÉÒÔ·ÀÖ¹µ¥µã¹ÊÕϵÄÎÊÌâ¡£

ȱµã£º

Èç¹ûϵͳÖÐûÓÐRedis£¬»¹ÐèÒªÒýÈëеÄ×é¼þ£¬Ôö¼Óϵͳ¸´ÔÓ¶È¡£

ÐèÒª±àÂëºÍÅäÖõŤ×÷Á¿±È½Ï´ó£¬¶à»·¾³ÔËάºÜÂé·³£¬

ÔÚ¿ªÊ¼Ê±£¬³ÌÐòʵÀý¸ºÔص½ÄĸöredisʵÀýÒ»µ©È·¶¨ºÃ£¬Î´À´ºÜÄÑ×öÐ޸ġ£

5¡¢FlickerµÄ½â¾ö·½°¸

ÒòΪMySQL±¾ÉíÖ§³Öauto_increment²Ù×÷£¬ºÜ×ÔÈ»µØ£¬ÎÒÃÇ»áÏëµ½½èÖúÕâ¸öÌØÐÔÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ¡£

FlickerÔÚ½â¾öÈ«¾ÖIDÉú³É·½°¸Àï¾Í²ÉÓÃÁËMySQL×ÔÔö³¤IDµÄ»úÖÆ£¨auto_increment + replace into + MyISAM£©¡£

6¡¢»¹ÓÐÆäËûһЩ·½°¸£¬±ÈÈ義¶«ÌÔ±¦µÈµçÉ̵Ķ©µ¥ºÅÉú³É¡£ÒòΪ¶©µ¥ºÅºÍÓû§idÔÚÒµÎñÉϵÄÇø±ð£¬¶©µ¥ºÅ¾¡¿ÉÄÜÒª¶àЩÈßÓàµÄÒµÎñÐÅÏ¢£¬±ÈÈ磺

µÎµÎ£ºÊ±¼ä+Æðµã±àºÅ+³µÅƺÅ

ÌÔ±¦¶©µ¥£ºÊ±¼ä´Á+Óû§ID

ÆäËûµçÉÌ£ºÊ±¼ä´Á+ϵ¥ÇþµÀ+Óû§ID£¬ÓеĻá¼ÓÉ϶©µ¥µÚÒ»¸öÉÌÆ·µÄID¡£

¶øÓû§ID£¬ÔòÒªÇóº¬Òå¼òµ¥Ã÷ÁË£¬°üº¬×¢²áÇþµÀ¼´¿É£¬¾¡Á¿¶Ì¡£

ËÄ¡¢×îÖÕ·½°¸

×îÖÕÎÒÃÇÑ¡ÔñÁËÒÔflicker·½°¸Îª»ù´¡½øÐÐÓÅ»¯¸Ä½ø¡£¾ßÌåʵÏÖÊÇ£¬µ¥±íµÝÔö£¬Äڴ滺´æºÅ¶ÎµÄ·½Ê½¡£

Ê×ÏȽ¨Á¢Ò»ÕÅ±í£¬ÏñÕâÑù£º

SEQUENCE_GENERATOR_TABLE

id stub

1 192.168.1.1

ÆäÖÐidÊÇ×ÔÔöµÄ£¬stubÊÇ·þÎñÆ÷ip

ÒòΪÐÂÊý¾Ý¿â²ÉÓÃmysql£¬ËùÒÔʹÓÃmysqlµÄ¶ÀÓÐÓï·¨ replace toÀ´¸üмǼÀ´»ñµÃΨһid£¬ÀýÈçÕâÑù£º

REPLACE INTO SEQUENCE_GENERATOR_TABLE (stub) VALUES ("192.168.1.1");

ÔÙÓÃSELECT id FROM SEQUENCE_GENERATOR_TABLEWHERE stub = "192.168.1.1"; °ÑËüÄûØÀ´¡£

µ½ÉÏÃæÎªÖ¹£¬ÎÒÃÇÖ»ÊÇÔÚµ¥Ì¨Êý¾Ý¿âÉÏÉú³ÉID£¬´Ó¸ß¿ÉÓýǶȿ¼ÂÇ£¬½ÓÏÂÀ´¾ÍÒª½â¾öµ¥µã¹ÊÕÏÎÊÌâ¡£

ÕâÒ²¾ÍÊÇΪʲôҪÓÐÕâ¸ö»úÆ÷ip×Ö¶ÎÄØ£¿¾ÍÊÇΪÁË·ÀÖ¹¶à·þÎñÆ÷ͬʱ¸üÐÂÊý¾Ý£¬È¡»ØµÄid»ìÏýµÄÎÊÌâ¡£

ËùÒÔ£¬µ±¶à¸ö·þÎñÆ÷µÄʱºò£¬Õâ¸ö±íÊÇÕâÑùµÄ£º

id stub

5 192.168.1.1

2 192.168.1.2

3 192.168.1.3

4 192.168.1.4

ÿ̨·þÎñÆ÷Ö»¸üÐÂ×Ô¼ºµÄÄÇÌõ¼Ç¼£¬±£Ö¤Á˵¥Ï̲߳Ù×÷µ¥ÐмǼ¡£

Õâʱºòÿ¸ö»úÆ÷Äõ½µÄ·Ö±ðÊÇ5,2,3,4Õâ4¸öid¡£

ÖÁ´Ë£¬ÎÒÃÇËÆºõ½â¾öÕâ¸ö·þÎñÆ÷¸ôÀ룬ԭ×ÓÐÔ»ñµÃidµÄÎÊÌ⣬ҲºÍflicker·½°¸»ù±¾Ò»Ö¡£

µ«ÊÇ×·¸ùËÝÔ´£¬ÔÚÔ­ÀíÉÏ£¬·½°¸»¹ÊÇÒÀ¿¿Êý¾Ý¿âµÄÌØÐÔ£¬Ã¿´ÎÉú³Éid¶¼ÒªÇëÇódb£¬¿ªÏúºÜ´ó¡£ÎÒÃǶԴËÓÖ½øÐÐÓÅ»¯£¬°ÑÕâ¸öid×÷Ϊһ¸öºÅ¶Î£¬¶ø²¢²»ÊÇÒª·¢³öÈ¥µÄÐòÁкţ¬²¢ÇÒÕâ¸öºÅ¶ÎÊÇ¿ÉÒÔÅäÖó¤¶ÈµÄ£¬¿ÉÒÔ1000Ò²¿ÉÒÔ10000£¬Ò²¾ÍÊǶÔÄûØÀ´µÄÕâ¸öid·Å´ó¶àÉÙ±¶µÄÎÊÌâ¡£

OK£¬ÎÒÃÇ´ÓDBÒ»´Î²éѯ²Ù×÷µÄ¿ªÏú£¬ÄûØÀ´ÁË1000¸öÓû§idµ½ÄÚ´æÖÐÁË¡£

ÏÖÔÚµÄÎÊÌâ¾ÍÊÇÒª½â¾öͬһ̨·þÎñÆ÷Ôڸ߲¢·¢³¡¾°£¬Èôó¼Ò˳ÐòÄúţ¬±ðÄÃÖØ¸´£¬Ò²±ð©Äá£

Õâ¸öÎÊÌâ¼òµ¥À´Ëµ£¬¾ÍÊǸö±£³ÖÕâ¸öºÅ¶Î¶ÔÏó¸ôÀëÐÔµÄÎÊÌâ¡£

AtomicLongÊǸö¿¿Æ×µÄ°ì·¨¡£

µ±µÚÒ»´ÎÄûغŶÎidºó£¬À©´ó1000±¶£¬È»ºó¸³Öµ¸øÕâ¸ö±äÁ¿atomic£¬Õâ¾ÍÊÇÕâ¸öºÅ¶ÎµÄµÚÒ»¸öºÅÂë¡£

atomic.set(n * 1000);

²¢ÇÒÄÚ´æÀï±£´æÒ»ÏÂ×î´óid£¬Ò²¾ÍÊÇÕâ¸öºÅ¶ÎµÄ×îºóÒ»¸öºÅÂë

currentMaxId = (n + 1) * 1000;

Ò»¸öºÅ¶Î¾ÍÐγÉÁË¡£

´Ëʱÿ´ÎÓÐÇëÇóÀ´È¡ºÅʱºò£¬ÅжÏÒ»ÏÂÓÐûÓе½×îºóÒ»¸öºÅÂ룬ûÓе½£¬¾ÍÄøöºÅ£¬×ßÈË¡£

Long uid = atomic.incrementAndGet();

Èç¹ûµ½´ïÁË×îºóÒ»¸öºÅÂ룬ÄÇô×èÈûסÆäËûÇëÇóỊ̈߳¬×îÔçµÄÄǸöÏß³ÌÈ¥dbÈ¡¸öºÅ¶Î£¬ÔÙ¸üÐÂһϺŶεÄÁ½¸öÖµ£¬¾Í¿ÉÒÔÁË¡£

Õâ¸ö·½°¸£¬ºËÐÄ´úÂëÂß¼­²»µ½20ÐУ¬½â¾öÁË·Ö²¼Ê½ÏµÍ³ÐòÁкÅÉú³ÉµÄÎÊÌâ¡£

ÕâÀïÓиöСÎÊÌ⣬¾ÍÊÇÔÚ·þÎñÆ÷ÖØÆôºó£¬ÒòΪºÅÂ뻺´æÔÚÄڴ棬»áÀ˷ѵôÒ»²¿·ÖÓû§IDûÓз¢³öÈ¥£¬ËùÒÔÔÚ¿ÉÄÜÆµ·±·¢²¼µÄÓ¦ÓÃÖУ¬¾¡Á¿¼õСºÅ¶Î·Å´óµÄ²½³¤n£¬Äܹ»¼õÉÙÀË·Ñ¡£

¾­¹ýʵ¼ù£¬ÐÔÄܵÄÌáÉýÔ¶Ô¶ÖØÒªÓÚÀË·ÑÒ»²¿·Öid¡£

Èç¹ûÔÙ×·Çó¼«Ö£¬¿ÉÒÔ¼àÌýspring»òÕßservletÉÏÏÂÎĵÄÏú»Ùʼþ£¬°Ñµ±Ç°¼´½«·¢³öÈ¥µÄÓû§ID±£´æÆðÀ´£¬ÏÂ´ÎÆô¶¯Ê±ºòÔÙÀÌ»ØÄÚ´æ¼´¿É¡£

Îå¡¢ÉÏÏßЧ¹û

ÔËÐÐ5¸ö¶àÔ£¬Ê®·ÖÎȶ¨¡£

SOA·þÎñƽ¾ùÏìӦʱ¼ä 0.59ºÁÃ룻

¿Í»§¶Ëµ÷ÓÃÆ½¾ùÏìӦʱ¼ä2.52ºÁÃ룻

¸½Á÷³Ìͼ£º

   
3100 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ