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¸öÊÂÎñ²»Äܹ»ÕÒµ½Ö¸¶¨°æ±¾µÄÊý¾Ý¾Í»áʧ°Ü¡£ |