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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ϊ Key-Value Êý¾Ý¿âʵÏÖMVCC ÊÂÎñ
 
×÷Õß Juliashine£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-06-27
 

ACID ÊÇÈí¼þÁìÓòʹÓÃ×î¹ã·ºµÄ¼¼ÊõÖ®Ò»£¬ËüÊǹØÏµÊý¾Ý¿âµÄ»ùʯ£¬ÊÇÆóÒµ¼¶Öмä¼þ²»¿É»òȱµÄ²¿·Ö£¬µ«Í¨³£Í¨¹ýºÚºÐµÄ·½Ê½Ìṩ¡£µ«ÊÇÔÚÐí¶àÇé¿öÏ£¬ÕâÖÖ¹ÅÀϵÄÊÂÎñ·½Ê½ÒѾ­²»Äܹ»ÊÊÓ¦ÏÖ´ú´ó¹æÄ£ÏµÍ³ºÍNoSQLÊý¾Ý¿âµÄÐèÒªÁË£¬ÏÖ´úϵͳҪÇó¸ü¸ßµÄÐÔÄÜÒªÇ󣬸ü´óµÄÊý¾ÝÁ¿£¬¸ü¸ßµÄ¿ÉÓÃÐÔ¡£ÔÚÕâÖÖÇé¿öÏ£¬´«Í³µÄÊÂÎñÄ£Ðͱ»¶¨ÖƵÄÊÂÎñ»òÕß°ëÊÂÎñÄ£ÐÍËùÈ¡´ú£¬¶øÔÚÕâЩģÐÍÖÐÊÂÎñÐÔ²¢²»ÏñÒÔÍùÄÇÑù±»¿´ÖØ¡£

ÔÚ±¾ÎÄÖÐÎÒÃÇ»áÌÖÂÛÒ»ÏÂkey-valueÊý¾Ý¿âµÄÎÞËøÊÂÎñ²Ù×÷£¬ÕâÖÖ¼¼Êõ¿ÉÒԹ㷺ӦÓÃÓÚÈκÎÒ»ÖÖÊý¾Ý¿âϵͳ¡£ÔÚGridDynamicsÖУ¬ÎÒÃǾÍÓÃÕâÖÖ¼¼ÊõÔÚOracle CoherenceÉÏʵÏÖÁËÒ»¸öÇáÁ¿¼¶µÄ·Ç±ê×¼µÄÊÂÎñ»úÖÆ¡£ÔÚµÚÒ»²¿·ÖÎÒÃÇ»áͨ¹ý¼¸¸öÖØÒªµÄÓÃÀýÀ´Á˽âÁ½ÖÖ¼òµ¥µÄ·½·¨£¬ÔÚµÚ¶þ²¿·ÖÎÒÃÇ»áÑо¿¸ü¶à¸üͨÓõķ½·¨£¬±ÈÈç˵PostgreSQLµÄMVCCʵÏÖ¡£

Ô­×ÓÐÔ»º´æÇл»£¬¶ÁÌá½»¸ôÀë

ÈÃÎÒÃÇ´ÓÒ»¸ö¼òµ¥Ò×ÓÚʵÏֵķ½·¨¿ªÊ¼£¬Õâ¸ö·½·¨ÊÊÓÃÓÚ¶ÁÔ¶¶àÓÚдµÄϵͳ¡£±ÈÈç˵µç×ÓÉÌÎñϵͳÖÐÿÌìÒª½øÐеÄÊý¾Ý¸üУ¬Ò»Ð©¹ÜÀíÐÔ²Ù×÷ÀýÈçÎÞЧ»õÆ·µÄÐÞ¸´ÒÔ¼°»º´æ¸üС£

×î¼òµ¥µÄÀý×ÓÊǰÑËùÓÐÊý¾Ý¶¼¼ÓÔØ½ø»º´æÀȻºóͨ¹ýÒ»¸ö´úÀí½Ó¿ÚÀ´Ö´ÐÐÖîÈç get() ºÍ put() ÕâÑùµÄ²Ù×÷¡£Õâ¸ö½Ó¿Ú»áÓëÁ½¸ö»º´æ´ò½»µÀ£¬AºÍB£¬°´ÕÕÒÔÏÂÂß¼­ÔËÐУ¨Í¼ 1£©£º

1.ÈκÎʱºòÖ»ÄÜÓÐÒ»¸ö»º´æ´¦ÓÚ¿ÉÓÃ״̬£¬´úÀí½Ó¿Ú»á°ÑËùÓеÄÇëÇó·ÓɸøËü£¨Í¼1.1£©¡£

2.¸üÐÂÊý¾ÝµÄʱºò°ÑÐÂÊý¾Ý¼ÓÔØµ½Ä¿Ç°²»¿ÉÓõĻº´æÖУ¨Í¼1.2£©¡£

3.¸üнø³ÌÇл»±êÖ¾Äĸö»º´æ¿ÉÓõıê¼Ç£¨Í¼1.3£©£¬´úÀí½Ó¿Ú¿ªÊ¼°ÑеĶÁÇëÇó·Ö·¢µ½Ð±ê¼ÇΪ¿ÉÓõĻº´æ¡£

4.»º´æÇл»½×¶ÎµÄÊÂÎñ¿ÉÒÔÒÀ¾Ý²»Óõij־ÃÐԺ͸ôÀëÐÔÒªÇóÀ´·Ö±ð´¦Àí¡£Èç¹ûÔÊÐí¡°²»¿ÉÖØ¸´¶Á¡± £¬ÄÇôÇл»ºÜ¼òµ¥£¬ÀÏÊý¾Ý»á±»Á¢¿ÌÇåÀíµô¡£·ñÔò£¬´úÀí½Ó¿Ú»áά»¤Ò»¸öÈÔδ½áÊøµÄÊÂÎñÁÐ±í£¬²¢°ÑÊôÓÚÕâ¸öÁбíÖеÄÿһ¸öÇëÇó¶¼Â·Óɵ½Ô­À´µÄ»º´æÖС£Ö»Óе±ÁбíÖеÄËùÓÐÊÂÎï¶¼Ìá½»»òÕß·ÅÆúÖ®ºóÀÏÊý¾Ý²Å»á±»Çå¿Õ¡£

Fig.1 Cache Switch

ÏàͬµÄ¼¼ÊõÒ²¿ÉÓÃÓÚ²¿·Ö¸üС£ÒÀ¾Ý´æ´¢·½Ê½µÄ²»Í¬Ò²ÓжàÖÖʵÏÖ·½·¨£¬ÎÒÃÇÀ´¿´Ò»¸öÓÐÈý¸ö»º´æ¼òµ¥Àý×Ó¡£Õâ¸öÀý×ÓÖеĿò¼ÜÓöÉÏÒ»¸öÀàËÆ£¬µ«ÊÇ´úÀí½Ó¿Ú°´ÕÕÒÔÏÂÂß¼­ÔËÐУ¨Í¼ 2£©£º

1.Óû§ÇëÇó±»Â·Óɵ½Ö÷»º´æ£¨¡±PRIMARY¡±»º´æ£©£¨Í¼ 2.1£©

2.ÐÂÔöÊý¾ÝºÍ¸üÐÂÊý¾Ý¼ÓÔØ½ø2ºÅ»º´æ£¨¡°NEW¡±»º´æ£©£¬É¾³ýÏîµÄkey·ÅÈë3ºÅ»º´æ£¨¡±DELETE¡±»º´æ£©£¨Í¼2.2£©

3.Ìá½»½ø³Ì£¨ÌØÖ¸Ð´ÊÂÎñ£©Çл»È«¾Ö±êʾ£¬Õâ¸ö±êʾ»á¸æËß´úÀí½Ó¿ÚÏÈÈ¥¡±NEW¡±ºÍ¡±DELETE¡±»º´æÈ¥²éÕÒËùÇëÇóµÄÊý¾Ý£¬Èç¹ûÔÚÕâÁ½¸öÇøÓòÖÐûÓз¢ÏÖÔÙÈ¥¡±PRIMARY¡±»º´æ²éÕÒ£¨Í¼2.3£©¡£»»¾ä»°Ëµ£¬ÔÚÕâÒ»²½ËùÓеÄÇëÇó¶¼±»¸ÄÅɵ½Á˸üйýµÄÊý¾ÝÖвéÕÒ¡£

4.Ìá½»½ø³Ì½« NEW ºÍ DELETE ÇøÓòµÄ±ä»¯´«µÝ¸øPRIMARY¡£Ò²¼´ÔÚPRIMARY»º´æÇøÒÔ·ÇÔ­×ӵķ½Ê½¸üС¢Ôö¼Ó¡¢É¾³ýÊý¾ÝÏͼ2.4£©¡£

5.×îºó£¬ËùÓеÄÌá½»½ø³Ì°ÑÈ«¾Ö±êʶÇл»»ØÀ´£¬ËùÓеÄÇëÇóÈÔȻ·Óɵ½ PRIMARY »º´æÇøÓò£¨Í¼2.5£©¡£

6.ÔÚµÚ4²½£¬¿ÉÒÔ°ÑÀÏÊý¾Ý¿½±´µ½ÁíÒ»¸ö»º´æÇø£¬ÕâÑù¾Í¿ÉÒÔÖ§³Ö»Ø¹ö²Ù×÷¡£¼´Ê¹ÊÇÈ«Á¿¸üÐÂÒ²¿ÉÒÔÓÃÕâÖÖ·½·¨¡£

Fig.2 Partial Cache Switch

´ÓÉÏÃæµÄÁ½¸öÀý×ÓÎÒÃÇ¿ÉÒÔ¿´³ö£¬×¨ÓÃÓÚ¶ÁµÄÊý¾Ý¿ìÕÕ±ÜÃâÁËÊý¾Ý¸üеĸÉÈÅ£¬´ó´ó½µµÍÁ˸´ÔÓÐÔ¡£ÔÚÒ»¸öдÃܼ¯Ð͵Ļ·¾³ÖоͲ»ÈÝÒ××öµ½ÕâÒ»µãÁË¡£ÔÚÏÂÒ»½ÚÎÒÃÇ»áÌÖÂÛÒ»Öַdz£ºÃµÄ·½·¨¿ÉÒÔÍêÃÀµÄ½â¾öÕâ¸öÎÊÌâ¡£

MVCC ÊÂÎñ£¬¿ÉÖØ¸´¶Á¸ôÀë

ÊÂÎï¼äµÄ¸ôÀë¿ÉÒÔͨ¹ý¸øÊý¾ÝÏî¼ÓÉϰ汾ºÅÀ´ÊµÏÖ¡£ÓÐÐí¶à·½·¨ÄÜ×öµ½ÕâÒ»µã£¬ÏÂÃæÎÒÃÇ»á½éÉÜÒ»ÖÖÓëPostgreSQL µÄÊÂÎñ´¦Àí·½·¨·Ç³£ÏàËÆµÄ°ì·¨¡£

ÕýÈçÇ°ÃæËù˵£¬Ã¿¸öÊÂÎñ¿ÉÒÔ¶ÔÓ¦ÓÚÒ»¸ö²¿·ÖÊý¾Ý¿ìÕÕ¡£ÔÚͬһʱ¼ä£¬Ã¿Ò»¸öÊý¾ÝÏî¶¼ÓÐËû×Ô¼ºµÄÉúÃüÖÜÆÚ ¨C ´Ó¼ÓÈ뻺´æµ½ÒƳö»º´æ»òÕß±»¸üУ¨±»Ð°汾ËùÈ¡´ú£©¡£ËùÒÔ¿ÉÒÔͨ¹ý¸øÃ¿ÌõÊý¾Ý´òÁ½¸öʱ¼ä´ÁÀ´ÊµÏÖ¸ôÀ룬ÿ¸öÊÂÎïͨ¹ý¿ªÊ¼Ê±¼ä£¨Á½¸öʱ¼ä´ÁÖ®Ò»£¬ÒëÕß×¢£©À´ÕÒ³öÔÚÊÂÎñ¿ªÊ¼Ê±´¦Óڿɼû״̬µÄÊý¾Ý¡£µ«ÔÚʵ¼ùÖг£ÓÃÒ»¸öµ¥µ÷µÝÔöµÄ¼ÆÊýÀ´´úÌæÊ±¼ä´Á£º

1¡¢µ±ÐÂÊÂÎñ¿ªÊ¼µÄʱºò£º

1£©Ëü»á»ñµÃÒ»¸öÈ«¾ÖΨһÇÒµ¥µ÷µÝÔöµÄÊÂÎñID £¬Ò²½Ð XID¡£

2)½ø³ÌÀï±£´æ×ÅËùÓÐÊÂÎñµÄXID.

2¡¢»º´æÀïµÄÿ¸öÊý¾ÝÏîÓÐÁ½¸ö¶îÍâ±ê¼Ç£¬xmin ºÍ xmax¡£°´ÕÕÒÔϹæÔò¸³Öµ£º

1)µ±Êý¾ÝÏij¸öÊÂÎñ½¨Á¢µÄʱºò£¬ xmin ÉèÖÃΪ¸ÃÊÂÎñµÄXID £¬xmax ÎÞÖµ¡£

2)µ±Êý¾Ý±»Ä³¸öÊÂÎñÒÆ³ýµÄʱºò£¬xmin ²»±ä£¬xmax ÉèÖÃΪ¸ÃÊÂÎñµÄXID¡£Êý¾Ý²¢Ã»ÓÐÕæµÄ´Ó»º´æÖÐÇå³ý£¬Ö»ÊDZ»±ê¼ÇΪÒÑɾ³ý¡£

3)µ±Êý¾Ý±»Ä³¸öÊÂÎñ¸üеÄʱºò£¬ÀÏÊý¾ÝÈÔÈ»±£´æÔÚ»º´æÀxmax ±»¸³ÖµÎªÊÂÎñµÄXID£¬Í¬Ê±Ôö¼ÓÒ»ÌõеÄÊý¾Ý£¬ÐÂÊý¾ÝµÄ xmin Ò²¸³ÖµÎªXID ²¢ÇÒxmax Ϊ¿Õ¡£»»¾ä»°Ëµ¸üвÙ×÷µÈÓÚÒ»´Îɾ³ý¼ÓÒ»´ÎÔö¼Ó¡£

3¡¢Èç¹ûÒÔÏÂÁ½¸öÌõ¼þ³ÉÁ¢£¬ÄÇôÊý¾Ý¶ÔÓÚij´ÎÊÂÎñÊǿɼûµÄ£º

1)xmin ÓÐÖµ²¢ÇÒСÓÚ»òµÈÓÚµ±Ç°ÊÂÎñID¡£

2)xmax Ϊ¿Õ£¬»òÕßµÈÓÚδÌá½»ÊÂÎñ£¨·ÅÆúµÄ»òÕß»¹Î´Íê³ÉµÄ£©µÄXID £¬»òÕß´óÓÚµ±Ç°ÊÂÎñID¡£

4¡¢xmin ºÍ xmax ¿ÉÒÔ´æ´¢Á½¸öλ±ê¼Ç£¬±íÃ÷ÊÂÎñÊÇ·ñ·ÅÆú»òÕßÌá½»£¬ÕâÑù²ÅÄܽøÐÐÉÏÃæµÄ¼ì²é£¨xmax ÊÇ·ñµÈÓÚδÌá½»ÊÂÎñµÄID£©¡£

Âß¼­ÈçÏÂͼËùʾ£º

Fig.3 PostgeSQL-like MVCC

ÕâÖÖ·½·¨µÄȱµãÊÇ·ÏÆúÊý¾ÝµÄÒÆ³ýÓÐЩ·±Ëö¡£ÒòΪ²»Í¬ÊÂÎñ¿´µ½µÄÊý¾Ý°æ±¾²»Í¬£¬¾ö¶¨ºÎʱ½«Êý¾Ý±êΪ²»¿É¼û»òÕßÒÆ³ýÊDZȽϸ´Ôӵġ£²»¹ýÒ²ÓÐÁ½ÖÖÒÔÉϵķ½·¨Äܹ»×öµ½£¬µÚÒ»ÖÖÊÇPostgreSQLÖÐʹÓõģ¬µÚ¶þÖÖÊÇOracleʹÓõģº

ËùÓеİ汾¶¼´æ´¢ÔÚͬһ¸ökey-value¿Õ¼äÖУ¬¶Ô°æ±¾ÊýÁ¿Ã»ÓÐÏÞÖÆ£¨Ò²¼´¿ÉÒÔ´¢´æÈÎÒâ¶àµÄ°æ±¾£¬ÒëÕß×¢£©¡£ÓÉÒ»¸öºǫ́½ø³ÌÀ´»ØÊÕÀϰ汾Êý¾Ý£¬Õâ¸ö»ØÊÕ¿ÉÒÔ°´¼Æ»®µ÷¶ÈÖ´ÐÐÒ²¿ÉÒÔÔÙ¶Á»òÕßдµÄʱºò´¥·¢¡£

Ö÷key-value ¿Õ¼äÖ»´¢´æ×îеİ汾£¬Ö®Ç°µÄ°æ±¾´¢´æÔÚÁíÍâµÄµØ·½£¬ÇÒ´¢´æÀϰ汾µÄ¿Õ¼ä´óСÊǹ̶¨µÄ¡£ ×îеİ汾»áÖ¸Ïò֮ǰµÄ°æ±¾£¬µ«ÊÇÈ´²»Äܹ»ÓÉ´ËÉÏËݵ½Ö®Ç°µÄÈÎÒâ°æ±¾£¬ ÒòΪ´æ´¢Àϰ汾Êý¾ÝµÄÇøÓò´óСÊǹ̶¨µÄ£¬ Ì«ÔçµÄ°æ±¾»á±»ÒƳý¡£Èç¹ûij¸öÊÂÎñ²»Äܹ»ÕÒµ½Ö¸¶¨°æ±¾µÄÊý¾Ý¾Í»áʧ°Ü¡£

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

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

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

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


MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí