Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
¾«Ñ¡ÄÚÈÝ/¼¼ÊõÉçȺ/ÓŻݲúÆ·,¾¡ÔÚС³ÌÐò
Á¢¼´Ç°Íù

17Ìõ±Ü¿ÓÖ¸ÄÏ£¬»ñÔÞ5K+£¬ÕâÊÇÒ»·ÝÀ´×Թȸ蹤³ÌʦµÄÊý¾Ý¿â¾­ÑéÌù

¡¸ACID ÓкܶຬÒ塹¡¢¡¸Ã¿¸öÊý¾Ý¿â¾ßÓв»Í¬µÄÒ»ÖÂÐԺ͸ôÀëÐÔ¡¹¡¢¡¸Ç¶Ì×ÊÂÎñ¿ÉÄÜÓк¦¡¹¡­¡­ ÕâЩ¶¼ÊǹȸèÔƹ¤³Ìʦ Jaana Dogan Ôø¾­²È¹ýµÄ¿Ó¡£ÔÚÕâƪÎÄÕÂÖУ¬Ëý×ܽáÁË 17 ÌõÕâÑùµÄ¾­Ñé½Ìѵ£¬Ï£ÍûΪ¸Õ½Ó´¥Êý¾Ý¿âµÄС°×Ìṩһ·Ý±Ü¿ÓÖ¸ÄÏ¡£Ä¿Ç°£¬ÕâÒ»Ö¸ÄÏÒÑÔÚ medium ÉÏÊÕ»ñÁË 5k+ ÔÞ¡£

¾ø´ó¶àÊý¼ÆËã»úϵͳ¶¼¾ßÓÐijÖÖ״̬£¬¶øÇҺܿÉÄÜ»¹ÒÀÀµÓÚÒ»¸ö´æ´¢ÏµÍ³¡£ÎÒ¶ÔÊý¾Ý¿âµÄ֪ʶҲÊÇÖð½¥ÀÛ»ýÆðÀ´µÄ£¬µ«ÔÚÀÛ»ýµÄ¹ý³ÌÖУ¬ÎÒÃǵÄÉè¼Æ´íÎóÔøµ¼Ö¹ýÊý¾Ý¶ªÊ§ºÍÖжÏÎÊÌâ¡£ÔÚÑÏÖØÒÀÀµÊý¾ÝµÄϵͳÖУ¬Êý¾Ý¿âÊÇϵͳÉè¼ÆµÄÄ¿±êºÍȨºâµÄºËÐÄ¡£¾¡¹ÜÎÒÃDz»¿ÉÄܺöÂÔÊý¾Ý¿âµÄ¹¤×÷·½Ê½£¬µ«Ó¦Óÿª·¢Õß¿ÉÒÔÔ¤¼û»òʵ¼Ê¾­ÀúµÄÎÊÌâÍùÍù¶¼Ö»ÊDZùɽһ½Ç¡£ÔÚ±¾ÏµÁÐÎÄÕÂÖУ¬ÎÒ½«·ÖÏíһЩÎÒרÃÅÕÒµ½µÄ¶Ô²»Éó¤Êý¾Ý¿âÁìÓòµÄ¿ª·¢ÕߺÜÓÐÓõļû½â£º

  1. Èç¹û 99.999% µÄʱ¼äÀïÍøÂçûÓÐÎÊÌ⣬ÄÇÄãȷʵºÜÐÒÔË¡£
  2. ACID ÓкܶຬÒå¡£
  3. ÿ¸öÊý¾Ý¿â¾ßÓв»Í¬µÄÒ»ÖÂÐԺ͸ôÀëÐÔ¡£
  4. µ±ÄãÎÞ·¨¸ã¶¨Ëøʱ£¬¾ÍʹÓÃÀÖ¹ÛËø¡£
  5. ³ýÁËÔà¶ÁºÍÊý¾Ý¶ªÊ§£¬»¹´æÔÚÆäËüÒì³£¡£
  6. ÎÒµÄÊý¾Ý¿âºÍÎÒÔÚÅÅÐò·½Ãæ²¢²»×ÜÊÇÒ»Öµġ£
  7. Ó¦ÓòãÃæµÄ·ÖƬ¿ÉÒÔ´æÔÚÓÚ¸ÃÓ¦ÓÃÖ®Íâ¡£
  8. AUTOINCREMENT ¿ÉÄÜÓк¦¡£
  9. ¹ýʱµÄÊý¾Ý¿ÉÄÜÓÐÓöøÇÒÊÇÎÞËøµÄ¡£
  10. ÈκÎʱÖÓÔ´Ö®¼ä¶¼»á·¢ÉúʱÖÓÆ«ÒÆ¡£
  11. ÑÓ³Ù£¨latency£©ÓкܶຬÒå¡£
  12. ÆÀ¹Àÿ¸öÊÂÎñµÄÐÔÄÜÐèÇó¡£
  13. ǶÌ×ÊÂÎñ¿ÉÄÜÓк¦¡£
  14. ÊÂÎñ²»Ó¦Î¬³ÖÓ¦ÓÃ״̬¡£
  15. ²éѯ¼Æ»®Æ÷ÄÜÌṩÓйØÊý¾Ý¿âµÄÒ»ÇÐÐÅÏ¢¡£
  16. ÔÚÏßǨÒÆ¿ÉÄܸܺ´ÔÓ£¬µ«È´¿ÉÒÔʵÏÖ¡£
  17. Êý¾Ý¿âÏÔÖøÔö³¤Ê±»áÒýÈë²»¿ÉÔ¤²âÐÔ¡£

Èç¹û 99.999% µÄʱ¼äÀïÍøÂçûÓÐÎÊÌ⣬ÄÇÄãȷʵºÜÐÒÔË¡£

ÈËÃÇÖÁ½ñÈÔÔÚÂÛ±çÈç½ñµÄÍøÂçÁ¬½Ó¼¼ÊõÓжà¿É¿¿ÒÔ¼°ÓÉÓÚÍøÂçÖж϶øµ¼ÖÂϵͳͣ»úµÄÇé¿öÓжàƵ·±¡£¿ÉÐеÄÑо¿ºÜÓÐÏÞ£¬¶øÇÒÕâЩÑо¿ÍùÍùÓÉÓµÓÐʹÓö¨ÖÆÓ²¼þµÄרÓÃÍøÂçµÄ´óÐÍ×éÖ¯ÒÔ¼°Ìض¨ÈËÔ±ËùÖ÷µ¼¡£

ƾ½è 99.999% µÄ·þÎñ¿ÉÓÃÐÔ£¬¹È¸è½ö°Ñ Spanner£¨¹È¸èÉ¢²¼ÔÚÈ«ÇòµÄÊý¾Ý¿â£©³öÏÖµÄÎÊÌâÖÐµÄ 7.6% ¹éÒòÓÚÍøÂçÁ¬½Ó£¬¾¡¹Ü¸Ã¹«Ë¾³ÆÆäרÓÃÍøÂçÊÇÕâÖÖ¿ÉÓÃÐÔ±³ºóµÄºËÐÄÔ­Òò¡£Bailis ºÍ Kingsbury 2014 ÄêµÄµ÷²éÏò Peter Deutsch ÓÚ 1994 ÄêÌá³öµÄ·Ö²¼Ê½¼ÆËãµÄÃýÎó£¨Fallacies of Distributed Computing£©Ö®Ò»·¢ÆðÁËÌôÕ½¡£ÍøÂçÕæµÄ¿É¿¿Âð£¿

ÎÒÃDz¢Ã»ÓÐÀ´×Ô¾ÞÍ·ÆóÒµÖ®ÍâµÄµ÷²é½á¹û»òÔÚ¹«¹²»¥ÁªÍøÉϵĵ÷²é½á¹û¡£Ö÷ÒªµçÐÅÌṩÉÌҲûÓÐ×ã¹»µÄÊý¾Ý£¬ÈÃÈËÎÞ·¨Á˽âËûÃǵĿͻ§¶ËÓöµ½µÄÎÊÌâÓжàÉÙ¿É×·Ëݵ½ÍøÂçÎÊÌâ¡£ÎÒÃdz£»áÓöµ½´óÐÍÔÆÌṩÉ̵ÄÍøÂç¶ÑÕ»ÖжϵÄÇé¿ö£¬Õâ¿ÉÄܵ¼Ö²¿·Ö»¥ÁªÍøÏÂÏß¼¸¸öСʱ£¬µ«Ö»ÓÐÓ°ÏìÁ¦ºÜ¸ßµÄʼþ²Å»áÓ°Ïìµ½´óÁ¿¿É¼û¿Í»§¶Ë¡£ÍøÂçÖжϿÉÄÜÓ°Ï췶ΧºÜ´ó£¬µ«²»ÊÇÿ¸ö°¸Àý¶¼»á²úÉúÑÏÖØÓ°Ïì¡£ÔÆ¿Í»§¶ËÒ²²»Ò»¶¨ÐèÒªÏêϸÁ˽âËûÃÇÓöµ½µÄÎÊÌâ¡£µ±³öÏÖÖжÏʱ£¬²»¿ÉÄÜʶ±ð³öÕâÊÇ·ñÊÇÓÉÌṩÉ̵¼ÖµÄÍøÂç´íÎ󡣶ÔËûÃǶøÑÔ£¬µÚÈý·½·þÎñ¶¼ÊǺÚÏä¡£Èç¹û²»ÊÇÖ÷ÒªÌṩÉÌ£¬ÊDz»¿ÉÄܹÀ¼Æ³öÓ°ÏìÓжà´óµÄ¡£

¶Ô±ÈÒ»ÏÂÖ÷ÒªÍæ¼Ò¹«²¼µÄϵͳ±¨¸æ£¬Èç¹û¿ÉÄܵ¼ÖÂÖжϵÄDZÔÚÎÊÌâÖнöÓÐһС²¿·ÖÊÇÍøÂçÎÊÌ⣬ÄÇô¿ÉÒÔ˵ÄãÊÇÏ൱ÐÒÔ˵ġ£ÍøÂçÁ¬½ÓÈÔÃæÁÙ×ÅÐí¶à³£¹æÎÊÌ⣬±ÈÈçÓ²¼þ¹ÊÕÏ¡¢ÍØÆ˱仯¡¢¹ÜÀíÅäÖøü¸ÄºÍµçÔ´¹ÊÕÏ¡£µ«ÎÒ×î½ü¿´µ½Ò»¸öÐÂÎÅ£¬·¢ÏÖöèÓã˺ҧҲÊÇÒ»¸öÏÖʵ´æÔÚµÄÎÊÌ⡪¡ªÒѾ­³öÏÖ¹ýöèÓã˺ҧº£µ×¹âÀµİ¸Àý¡£

ACID ÓкܶຬÒå

ACID ±íʾԭ×ÓÐÔ£¨atomicity£©¡¢Ò»ÖÂÐÔ£¨consistency£©¡¢¸ôÀëÐÔ£¨isolation£©¡¢³Ö¾ÃÐÔ£¨durability£©¡£ACID ÊÇÊý¾Ý¿âÊÂÎñ£¨database transaction£©ÐèÒªÏòÓû§È·±£ÓÐЧµÄÊôÐÔ¡ª¡ª¼´Ê¹ÔÚ³öÏÖ±ÀÀ£¡¢´íÎó¡¢Ó²¼þ¹ÊÕϵÈÇé¿öʱҲÐèÒª±£Ö¤ÕâЩÊôÐÔ¡£Èç¹ûûÓÐ ACID »òÀàËƵı£Ö¤£¬Ó¦Óÿª·¢Õß½«ÄÑÒÔÇø·ÖËûÃÇ×Ô¼ºµÄÖ°ÔðÓëÊý¾Ý¿âÄܹ»ÌṩµÄ±£Ö¤¡£´ó¶àÊý¹ØϵÊÂÎñÊý¾Ý¿â¶¼»á¾¡Á¦·ûºÏ ACID Ö¸±ê£¬µ« NoSQL Ô˶¯µÈз½·¨´ßÉúÁËÐí¶àûÓÐ ACID ÊÂÎñµÄÊý¾Ý¿â£¬ÕâЩÕâЩÊÂÎñµÄʵÏֳɱ¾±È½Ï¸ß¡£

ÔÚÎÒ¸Õ½øÈëÕâÒ»ÐÐҵʱ£¬ÎÒÃǵļ¼ÊõÖ÷¹Üµ±Ê±ÌÖÂÛ¹ý ACID ÊÇ·ñÒÑÊÇÒ»¸ö¹ýʱµÄ¸ÅÄî¡£¿ÉÒÔºÏÀíµØ˵£¬ACID ¿ÉÊÓΪһÖÖ¶¨Òå¿íËɵÄÃèÊö£¬¶ø²»ÊÇÑϸñµÄʵÏÖ±ê×¼¡£ÏÖÈç½ñ£¬ÎÒ·¢ÏÖ ACID ×îÓÐÓõĵط½ÊÇËüÌṩÁËÎÊÌâµÄÀà±ð£¨ÒÔ¼°¿ÉÄܵĽâ¾ö·½°¸µÄÀà±ð£©¡£

²¢·Çÿ¸öÊý¾Ý¿â¶¼·ûºÏ ACID£¬¶øÔÚ·ûºÏ ACID µÄÊý¾Ý¿âÖУ¬ACID µÄ½â¶Á·½Ê½Ò²¿ÉÄܲ»Í¬¡£ÎªÊ²Ã´ ACID »áÓв»Í¬µÄʵÏÖ·½Ê½£¿Ò»¸öÔ­ÒòÊÇÔÚʵÏÖ ACID ʱ£¬ÐèҪȨºâµÄ¶«Î÷Ì«¶àÁË¡£Êý¾Ý¿âÔÚ×ö¹ã¸æÐû´«Ê±¿ÉÄÜ»á˵×Ô¼º·ûºÏ ACID£¬µ«ÔÚÐí¶à±ßÔµ°¸ÀýÉÏÈÔ¿ÉÄÜÓв»Í¬µÄ½âÊÍ»òÔÚ´¦Àí²»Ì«¿ÉÄÜ·¢ÉúµÄʼþʱµÄ·½·¨²»Í¬¡£ÎªÁËÊʵ±µØÀí½â¹ÊÕÏģʽºÍÉè¼ÆȨºâ£¬¿ª·¢ÕßÖÁÉÙ¿ÉÒÔÔڸ߲ãÃæÉÏÁ˽âÊý¾Ý¿âʵÏÖ¸÷ÏÄܵķ½Ê½¡£

Ò»¸öÖÚËùÖÜÖªµÄÕùÒéÎÊÌâÊÇ MongoDB ÔÚµÚ 4 °æºóÓжà·ûºÏ ACID¡£MongoDB ºÜ³¤Ê±¼ä¶¼²»Ö§³ÖÈÕÖ¾¹¦ÄÜ£¬¾¡¹ÜĬÈÏÇé¿öÏÂÆäÒ²²»»á¸üƵ·±µØ£¨Ã¿ 60 Ã룩½«Êý¾ÝÎļþÌá½»µ½´ÅÅÌ¡£¿¼ÂÇÒÔÏÂÇé¿ö£¬Ò»¸öÓ¦ÓÃÖ´ÐÐÁ½´ÎдÈ루w1 ºÍ w2£©¡£MongoDB Äܹ»ÔÚµÚÒ»´ÎдÈëʱ±£Áô¸ü¸Ä£¬µ«ÎÞ·¨ÔÚдÈë w2 ʱ±£ÁôÕâÏî¸ü¸Ä£¬ÒòΪÕâ»á³öÏÖÓÉÓ²¼þ¹ÊÕÏËùÖµıÀÀ£¡£

MongoDB ÔÚдÈëÎïÀí´ÅÅÌÇ°±ÀÀ£¶øµ¼ÖÂÊý¾Ý¶ªÊ§µÄʾÒâͼ

½«Êý¾ÝÌá½»µ½´ÅÅ̵Ĺý³Ì¾ßÓнϸߵijɱ¾£¬¶øͨ¹ý±ÜÃâÌá½»£¬ËüÃÇ¿ÉÒÔÐû³ÆÔÚдÈë·½Ãæ±íÏÖ³öÉ«£¬µ«ÕâÑù¾ÍÎþÉüÁ˳־ÃÐÔ¡£Èç½ñ£¬MongoDB ÒѾ­ÓÐÁËÈÕÖ¾¹¦ÄÜ£¬µ«Ôàд£¨dirty writes£©ÈÔÈ»¿ÉÄÜÓ°ÏìÊý¾ÝµÄ³Ö¾ÃÐÔ£¬ÒòΪËüÃÇĬÈÏÊÇÿ 100 ms Ìá½»Ò»´Î¡£¶ÔÓÚÈÕÖ¾¼°ÕâЩÈÕÖ¾Ëù±íʾµÄ¸ü¸ÄµÄ³Ö¾ÃÐÔ£¬Ò²¿ÉÄÜ»á³öÏÖͬÑùµÄÇé¿ö£¬²»¹ýÕâÖÖ·çÏÕҪСµÃ¶à¡£

ÿ¸öÊý¾Ý¿â¾ßÓв»Í¬µÄÒ»ÖÂÐԺ͸ôÀëÐÔ

ÔÚ ACID ÊôÐÔÖУ¬Ò»ÖÂÐԺ͸ôÀëÐԵIJ»Í¬ÊµÏÖϸ½ÚµÄ·¶Î§ÊÇ×î¹ãµÄ£¬ÒòΪÆäÉæ¼°µÄȨºâÒòËظü¶à¡£Ò»ÖÂÐԺ͸ôÀëÐÔ¶¼ÊÇʵÏֳɱ¾½Ï¸ßµÄÊôÐÔ¡£ÎªÁ˱£³ÖÊý¾ÝÒ»Ö£¬ËüÃÇÐèҪЭµ÷¶øÇÒÕýµÃµ½Ô½À´Ô½¶àµÄÌÖÂÛ¡£µ±±ØÐëÒÔˮƽ·½Ê½À©Õ¹Êý¾ÝÖÐÐÄʱ£¨ÓÈÆäÊǶÔÓÚ²»Í¬µÄµØÇø£©£¬ÕâЩÎÊÌâ»á±äµÃ¸ü¼ÓÀ§ÄÑ¡£ÒòΪ´Ëʱ¿ÉÓÃÐÔ»áϽµÇÒÍøÂç·ÖÇø»áÔ½À´Ô½Æձ飬Õâ»áµ¼ÖºÜÄÑʵÏָ߲ãÃæµÄÒ»ÖÂÐÔ¡£CAP ¶¨ÀíΪÕâÒ»ÏÖÏó¸ø³öÁ˸üÆÕÊʵĽâÊÍ¡£ÐèÒªÖ¸³öµÄÊÇ£¬¼´Ê¹ÓÐһЩ²»Ò»ÖÂÐÔ£¬Ò»°ãÓ¦ÓÃÒ²ÄÜ´¦Àí£¬»òÕß³ÌÐò¿ª·¢Õ߶ÔÕâÒ»ÎÊÌâÓÐ×ã¹»µÄÈÏÖª£¬ÈÃËûÃÇÄÜΪ¸ÃÓ¦ÓÃÌí¼ÓÓÃÓÚ´¦ÀíÕâÒ»Çé¿öµÄÂß¼­£¬´Ó¶øÎÞÐè¹ýÓÚÒÀÀµËûÃǵÄÊý¾Ý¿â¡£

Êý¾Ý¿âÍùÍù»áÌṩ¶àÖÖ²»Í¬µÄ¸ôÀë²ã£¬ÕâÑùÓ¦Óÿª·¢Õ߾ͿÉÒÔ»ùÓÚ×Ô¼ºµÄȨºâ²ßÂÔÀ´Ñ¡Ôñ×î¾ß³É±¾Ð§ÒæµÄ¡£µ±¸ôÀë¸üÈõʱ£¬ËٶȿÉÄܸü¿ì£¬µ«Ò²¿ÉÄܵ¼ÖÂÊý¾Ý¾ºÕù£¨data race£©¡£µ±¸ôÀë¸üǿʱ£¬²»»á³öÏÖijЩDZÔÚµÄÊý¾Ý¾ºÕù£¬µ«ËٶȻá¸üÂý£¬¶øÇÒ»¹¿ÉÄܳöÏÖÕùÓã¨contention£©Çé¿ö£¬ÕâÉõÖÁ¿ÉÄܽ«Êý¾Ý¿âµÄËÙ¶ÈÍÏÂýµ½Öжϵij̶ȡ£

ÏÖÓв¢·¢Ä£Ðͼ°ËüÃÇÖ®¼äµÄ¹Øϵ¸Å¿ö

SQL ±ê×¼½ö¶¨ÒåÁË 4 ÖÖ¸ôÀë²ã¼¶£¬µ«ÀíÂÛÉϺÍʵ¼ùÖеIJ㼶¶¼¸ü¶à¡£jepson.io ºÜºÃµØ×ܽáÁËÏÖÓв¢·¢Ä£Ð͵ÄÇé¿ö£ºhttps://jepsen.io/consistency¡£¾Ù¸öÀý×Ó£¬¹È¸èµÄ Spanner ʹÓÃÁËʱÖÓͬ²½À´±£Ö¤Íⲿ¿É´®Ðл¯£¬¼´Ê¹ÕâÊÇÒ»ÖÖ¸üÑϸñµÄ¸ôÀë²ã£¬µ«±ê×¼¸ôÀë²ãÖÐÈ´²¢Ã»ÓÐÕâÑùµÄ¶¨Òå¡£

SQL ±ê×¼ÖÐÌá¼°µÄ¸ôÀë²ã¼¶°üÀ¨£º

  • ¿É´®Ðл¯£¨×îÑϸñ£¬³É±¾×î¸ß£©£º¿É´®Ðл¯Ö´ÐУ¨serializable execution£©µÃµ½µÄЧ¹ûÓëÕâЩÊÂÎñµÄijЩÐòÁÐÖ´ÐеÄЧ¹ûÒ»Ñù¡£ÐòÁÐÖ´ÐУ¨serial execution£©ÊÇÖ¸ÔÚÿ¸öÊÂÎñÖ´ÐÐÍê³ÉÖ®ºóÔÙÖ´ÐÐÏÂÒ»¸öÊÂÎñ¡£¹ØÓÚ¿É´®Ðл¯Ö´ÐУ¬ÐèҪעÒâµÄÒ»µãÊÇ£ºÓÉÓÚ½âÊ͵IJîÒìÐÔ£¬ËüÍùÍù±»ÊµÏÖΪ¿ìÕÕ¸ôÀ루snapshot isolation£©£¬±ÈÈç Oracle£¬¶ø¿ìÕÕ¸ôÀë²¢²»ÔÚ SQL ±ê×¼ÖС£
  • ¿ÉÖظ´µÄ¶ÁÈ¡£ºµ±Ç°ÊÂÎñÖÐδÌá½»µÄ¶ÁÈ¡¶Ôµ±Ç°ÊÂÎñÀ´ËµÊǿɼûµÄ£¬µ«ÆäËüÊÂÎñ×ö³öµÄ¸Ä±ä£¨±ÈÈçвåÈëµÄÐУ©²»ÊǿɼûµÄ¡£
  • ÒÑÌá½»µÄ¶ÁÈ¡£ºÎ´Ìá½»µÄ¶ÁÈ¡¶ÔÊÂÎñÀ´Ëµ²»¿É¼û¡£Ö»ÓÐÒÑÌá½»µÄдÈëÊǿɼûµÄ£¬µ«¿ÉÄܳöÏÖ»ÃÏó¶ÁÈ¡£¨phantom read£©¡£Èç¹ûÁíÒ»¸öÊÂÎñ²åÈëºÍÌá½»ÁËеÄÐУ¬Ôòµ±Ç°ÊÂÎñÔÚ²éѯʱ¿ÉÒÔ¿´µ½ËüÃÇ¡£
  • δÌá½»µÄ¶ÁÈ¡£¨×î²»Ñϸñ£¬³É±¾×îµÍ£©£ºÔÊÐíÔà¶Á£¨dirty read£©£¬ÊÂÎñ¿ÉÒÔ¿´µ½ÆäËüÊÂÎñ×ö³öµÄÉÐδÌá½»µÄ¸ü¸Ä¡£ÔÚʵ¼ùÖУ¬Õâ¸ö²ã¼¶¿ÉÓÃÓÚ·µ»Ø½üËƾۺϽá¹û£¬±ÈÈç¶ÔÒ»¸ö±í¸ñµÄ COUNT(*) ²éѯ¡£

¿É´®Ðл¯²ã¼¶³öÏÖÊý¾Ý¾ºÕùµÄÇé¿ö×îÉÙ£¬µ«³É±¾Ò²×î¸ß£¬¶øÇÒ»áÈÃϵͳ³öÏÖ×î¶àÕùÓá£ÆäËü¸ôÀë²ã¼¶µÄ³É±¾¸üµÍһЩ£¬µ«Ò²¸ü¿ÉÄܳöÏÖÊý¾Ý¾ºÕùÎÊÌ⡣ijЩÊý¾Ý¿âÔÊÐí×ÔÐÐÉèÖøôÀë²ã¼¶£¬Ä³Ð©Êý¾Ý¿âÔòÔÚÕâ·½Ãæ¸üΪ¹ÌÖ´Ò»µã£¬²¢²»Ò»¶¨Ö§³ÖËùÓÐÕâЩ²ã¼¶¡£

¶ø¾ÍËãÊý¾Ý¿âÐû³Æ×Ô¼ºÖ§³ÖÕâЩ¸ôÀë²ã¼¶£¬µ«Ö»Òª×Ðϸ¼ì²éÒ»ÏÂËüÃǵÄÐÐΪ£¬¾Í¿ÉÒÔÁ˽âÕâЩÊý¾Ý¿âʵ¼Ê¾¿¾¹ÊÇÔõô×öµÄ¡£

ÿ¸öÊý¾Ý¿âÔÚ²»Í¬¸ôÀë²ã¼¶ÉϵIJ¢·¢Òì³£¸Å¿ö

Martin Kleppmann µÄ hermitage ÏîÄ¿×ܽáÁ˲»Í¬µÄ²¢·¢Òì³££¬²¢ËµÃ÷ÁËÒ»¸öÊý¾Ý¿âÔÚ²»Í¬µÄ¸ôÀë²ã¼¶ÉÏÄÜ·ñ´¦ÀíÕâÑùµÄÒì³££ºhttps://github.com/ept/hermitage ¡£Kleppmann µÄÑо¿±íÃ÷Êý¾Ý¿âÉè¼ÆÕß»áÒÔ²»Í¬µÄ·½Ê½½âÊ͸ôÀë²ã¼¶¡£

µ±ÄãÎÞ·¨¸ã¶¨Ëøʱ£¬¾ÍʹÓÃÀÖ¹ÛËø

ËøµÄ³É±¾·Ç³£¸ß£¬²»½öÊÇÒòΪËüÃÇ»áΪÊý¾Ý¿âÒýÈë¸ü¶àÕùÓ㬶øÇÒ»¹ÐèÒªÄãµÄÓ¦Ó÷þÎñÆ÷ÓëÊý¾Ý¿âÖ®¼ä´æÔÚÒ»ÖµÄÁ¬½Ó¡£ÍøÂç·ÖÇø¿ÉÄÜ»á¸üÏÔÖøµØÓ°ÏìÅÅËüËø£¨exclusive lock£©£¬Õâ»áµ¼ÖÂÄÑÒÔʶ±ðºÍ½â¾öµÄËÀËø£¨deadlock£©¡£Èç¹ûÓÐЩ°¸ÀýÎÞ·¨ºÜºÃµØʹÓÃÅÅËüËø£¬¿ÉÒÔÑ¡ÔñÀÖ¹ÛËø£¨optimistic locking£©¡£

ÀÖ¹ÛËøÕâÖÖ·½·¨ÊÇÖ¸µ±¶ÁȡijÐÐʱ»á¼Ç¼°æ±¾ºÅ¡¢ÉÏ´ÎÐ޸ĵÄʱ¼ä´Á»òÆäУÑéºÍ£¨checksum£©¡£È»ºóÄã¿ÉÒÔÔÚ¸ü¸Ä¼Ç¼֮ǰ¼ì²éÔ­×Ó·½Ãæ²¢ÎÞÐ޸ĵİ汾¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
UPDATE?products?SET?name?=?'Telegraph?receiver',?version?=?2?WHERE?id?=?1?AND?version?=?1?

Èç¹ûÁíÒ»Ïî¸üÐÂ֮ǰÒѾ­ÐÞ¸ÄÁËÕâÒ»ÐУ¬ÄÇô¶Ô products ±íµÄ¸üн«Ó°Ïì 0 ÐС£Èç¹ûûÓиüÔçµÄ¸üУ¬ÔòËü»áÓ°Ïì 1 ÐУ¬ÔòÎÒÃÇ¿ÉÒÔ˵¸üгɹ¦ÁË¡£

³ýÁËÔà¶ÁºÍÊý¾Ý¶ªÊ§£¬»¹´æÔÚÆäËüÒì³£

µ±ÎÒÃÇÔÚ̽ÌÖÊý¾ÝÒ»ÖÂÐÔʱ£¬ÎÒÃÇÖ÷Òª¹Ø×¢µÄÊÇ¿ÉÄܵ¼ÖÂÔà¶ÁºÍÊý¾Ý¶ªÊ§µÄ¾ºÕùÎÊÌâ¡£µ«Êý¾Ý·½ÃæµÄÒì³£²¢²»Ö¹ÕâÁ½ÖÖ¡£

¾Ù¸öÀý×Ó£¬»¹ÓÐÒ»ÖÖÒì³£ÊÇдƫÐò£¨write skew£©¡£Ð´Æ«Ðò¸üÄÑÒÔʶ±ðÈ϶¨£¬ÒòΪÎÒÃDz»»áÖ÷¶¯µØÈ¥²éÕÒÕâ¸öÎÊÌâ¡£µ¼ÖÂдƫÐòµÄÔ­Òò²»ÊÇ·¢ÉúÔÚдÈëÉϵÄÔà¶Á»òÊý¾Ý¶ªÊ§£¬¶øÊÇÒòΪÊý¾ÝÉϵÄÂß¼­Ô¼ÊøË𻵡£

±ÈÈ磬¼ÙÉèÒ»¸ö¼à¿ØÓ¦ÓÃÐèÒªÒ»¸öÈËÀà²Ù×÷ԱʼÖÕ´¦ÓÚ´ýÃü״̬¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
BEGIN?tx1;??????????????????????BEGIN?tx2;SELECT?COUNT(*)?FROM?operators?WHERE?oncall?=?true;?0???????????????????????????????SELECT?COUNT(*)?????????????????????????????????FROM?operators?????????????????????????????????WHERE?oncall?=?TRUE;?????????????????????????????????0UPDATE?operators????????????????UPDATE?operators?SET?oncall?=?TRUE???????????????SET?oncall?=?TRUE?WHERE?userId?=?4;???????????????WHERE?userId?=?2;COMMIT?tx1;?????????

ÔÚÉÏÃæµÄÇé¿öÖУ¬Èç¹ûÕâЩÊÂÎñÖÐÓÐÁ½¸ö³É¹¦Ìá½»£¬¾Í»á³öÏÖдƫÐò¡£¼´Ê¹´ËʱûÓгöÏÖÔà¶Á»òÊý¾Ý¶ªÊ§£¬Êý¾ÝҲʧȥÁËÍêÕûÐÔ£¬ÒòΪÆäÖ¸¶¨ÁËÁ½¸ö´ýÃüµÄÈË¡£

¿É´®Ðл¯¸ôÀ롢ģʽÉè¼Æ»òÊý¾Ý¿âÔ¼ÊøÓÐÖúÓÚÏû³ýдƫÐò¡£¿ª·¢ÕßÐèÒªÔÚ¿ª·¢¹ý³ÌÖÐʶ±ðÕâÑùµÄÒì³££¬ÒÔ±ÜÃâÉú²ú¹ý³ÌÖгöÏÖÊý¾ÝÒì³£¡£»°ËäÈç´Ë£¬Ê¶±ð´úÂë¿âÖеÄдƫÐòÈ´·Ç³£Ö®ÄÑ¡£ÓÈÆäÊÇÔÚ´óÐÍϵͳÖУ¬Èç¹û¸ºÔð»ùÓÚͬһ±í¸ñ¹¹½¨¹¦ÄܵIJ»Í¬ÍŶÓÖ®¼äûÓйµÍ¨ÇÒûÓл¥Ïà¼ì²éËûÃÇ´æÈ¡Êý¾ÝµÄ·½Ê½£¬ÄÇô¾Í»á³öÏÖÕâÖÖÎÊÌâ¡£

ÎÒµÄÊý¾Ý¿âºÍÎÒÔÚÅÅÐò·½Ãæ²¢²»×ÜÊÇÒ»ÖµÄ

Êý¾Ý¿âÌṩµÄÒ»´óºËÐÄÄÜÁ¦ÊÇÅÅÐò±£Ö¤£¬µ«ÅÅÐò½á¹û¿ÉÄÜ»á³öºõÓ¦Óÿª·¢ÕßµÄÔ¤ÁÏ¡£Êý¾Ý¿â²éÔÄÊÂÎñµÄ˳Ðò¾ÍÊÇËüÃǽÓÊÕÕâЩÊÂÎñµÄ˳Ðò£¬¶ø²»ÊÇ¿ª·¢Õ߲鿴ËüÃÇʱµÄ³ÌÐòÉè¼Æ˳Ðò¡£ÊÂÎñÖ´ÐеÄ˳ÐòÄÑÒÔÔ¤²â£¬ÓÈÆäÊÇÔÚ¸ßÈÝÁ¿µÄ²¢·¢ÏµÍ³ÖС£

ÔÚ¿ª·¢Ê±£¬ÓÈÆäÊÇÔÚʹÓ÷Ç×èÈûÈí¼þ¿â½øÐпª·¢Ê±£¬½Ï²îµÄÑùʽºÍ¿É¶ÁÐÔ¿ÉÄܻᵼÖÂÓû§ÈÏΪÊÂÎñÊÇ°´Ë³ÐòÖ´Ðеģ¬¼´Ê¹ËüÃÇ¿ÉÄÜÒÔÈκÎ˳ÐòµÖ´ïÊý¾Ý¿â¡£ÏÂÃæµÄ³ÌÐò¿´ÆðÀ´ÏñÊÇ T1 ºÍ T2 ½«°´Ë³Ðòµ÷Ó㬵«Èç¹ûÕâЩº¯ÊýÊÇ·Ç×èÈûµÄ£¬ÔòËüÃǽ«Á¢¼´´ø×Å promise ·µ»Ø£¬µ÷ÓõÄ˳Ðò½«È¡¾öÓÚËüÃÇÔÚÊý¾Ý¿âÖнÓÊÕµ½µÄʱ¼ä¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
result1?=?T1()?//?results?are?actually?promises?result2?=?T2()?

Èç¹ûÐèÒªÔ­×ÓÐÔ£¨ÒÔ±ãÍêÈ«Ìá½»»ò·ÅÆúËùÓвÙ×÷£©ÇÒÐòÁкÜÖØÒª£¬Ôò T1 ºÍ T2 ÖеIJÙ×÷Ó¦¸ÃÔËÐÐÔÚµ¥¸öÊý¾Ý¿âÊÂÎñÖС£

Ó¦ÓòãÃæµÄ·ÖƬ¿ÉÒÔ´æÔÚÓÚ¸ÃÓ¦ÓÃÖ®Íâ

·ÖƬ£¨Sharding£©ÊÇÒ»ÖÖˮƽ»®·ÖÊý¾Ý¿âµÄ·½·¨¡£ÓеÄÊý¾Ý¿â¿ÉÒÔ×Ô¶¯µØ¶ÔÊý¾Ý½øÐÐˮƽ·ÖÇø£¬ÓеÄÊý¾Ý¿âÔò²»Ö§³ÖÕâÖÖ¹¦ÄÜ»ò×öµÃ²»ºÃ¡£µ±Êý¾Ý¼Ü¹¹Ê¦ / ¿ª·¢Õß¿ÉÒÔÔ¤²â·ÃÎÊÊý¾ÝµÄ·½Ê½Ê±£¬ËûÃÇ¿ÉÄÜ»áÔÚÓû§ÇøÓò´´½¨Ë®Æ½·ÖÇø£¬¶ø²»Êǽ«ÕâÏ×÷ίÍиøËûÃǵÄÊý¾Ý¿â¡£ÕâÖÖ·½Ê½³ÆΪӦÓü¶·ÖƬ£¨application-level sharding£©¡£

Ó¦Óü¶·ÖƬÕâ¸öÃû³ÆÍùÍù»á¸øÈË´øÀ´Ò»ÖÖ´íÎóÓ¡Ïó£¬ÈÃÈËÒÔΪÕâÖÖ·ÖƬӦ¸Ã´æÔÚÓÚÓ¦Ó÷þÎñÖ®ÖС£·ÖƬ¹¦ÄÜ¿ÉÒÔʵÏÖΪÊý¾Ý¿âµÄÇ°ÃæÒ»²ã¡£È¡¾öÓÚÊý¾ÝÔö³¤ºÍ¼Ü¹¹µü´úÇé¿ö£¬·ÖƬµÄÒªÇó¿ÉÄÜ»á±äµÃ·Ç³£¸´ÔÓ¡£Èç¹ûÄÜÔÚÎÞÐèÖØв¿ÊðÓ¦Ó÷þÎñÆ÷µÄÇ°Ìá϶ÔijЩ²ßÂÔ½øÐеü´ú£¬Ôò»á´óÓÐñÔÒæ¡£

Ó¦Ó÷þÎñÆ÷Óë·ÖƬ·þÎñ·ÖÀëµÄ¼Ü¹¹Ê¾Àý

Èç¹û½«·ÖƬ×÷Ϊһ¸öµ¥¶ÀµÄ·þÎñ£¬Äã¾ÍÄܸüºÃµØÔÚ²»ÖØв¿ÊðÓ¦Ó÷þÎñÆ÷µÄÇ°Ìáϵü´ú·ÖƬ²ßÂÔ¡£Vitess ¾ÍÊÇÓ¦Óü¶·ÖƬϵͳµÄÒ»¸öÀý×Ó¡£Vitess Ϊ MySQL ÌṩÁËˮƽ·ÖƬ£¬²¢ÔÊÐí¿Í»§¶Ëͨ¹ý MySQL ЭÒéÁ¬½ÓËü£»Vitess »á½«Êý¾Ý·ÖƬµ½¶à¸ö»¥ÏàÖ®¼äÎÞÁªÏµµÄ MySQL ½ÚµãÉÏ¡£

AUTOINCREMENT ¿ÉÄÜÓк¦

AUTOINCREMENT£¨×Ô¶¯µÝÔö£©ÊÇÉú³ÉÖ÷¼ü£¨primary key£©µÄÒ»ÖÖ³£Ó÷½·¨¡£Êý¾Ý¿â±»ÓÃ×÷ ID Éú³ÉÆ÷ÒÔ¼°Êý¾Ý¿âÖÐÓÐ ID Éú³ÉÖ¸¶¨±í¸ñµÄÇé¿öÆäʵ²¢²»ÉÙ¼û¡£µ«Ê¹ÓÃ×Ô¶¯µÝÔöÉú³ÉÖ÷¼üµÄ·½Ê½Æäʵ²¢²»ÀíÏ룬ԭÒòÓм¸µã£º

  • ÔÚ·Ö²¼Ê½Êý¾Ý¿âϵͳÖУ¬×Ô¶¯µÝÔöºÜÀ§ÄÑ¡£ÎªÁËÉú³É ID£¬ÐèҪʹÓÃÈ«¾ÖËø²ÅÐС£¶øÈç¹ûÄã¿ÉÒÔÉú³É UUID£¬ÄÇô¾Í²»ÐèÒªÊý¾Ý¿â½ÚµãÖ®¼äÓÐÈκκÏ×÷¡£Ê¹ÓÃËøµÄ×Ô¶¯µÝÔö¿ÉÄܵ¼ÖÂÕùÓ㬲¢¿ÉÄܵ¼Ö·ֲ¼Ê½Çé¿öÖвåÈëÐÔÄÜÏÔÖøϽµ¡£MySQL µÈһЩÊý¾Ý¿â¿ÉÄÜÐèÒªÌض¨µÄÅäÖú͸ü¶àµÄ×¢Òâ²ÅÄÜÕýÈ·µØÍê³É master-master ¸´ÖÆ¡£ÕâÑùµÄÅäÖÃÈÝÒ×»ìÂÒ¶øÇÒ¿ÉÄܵ¼ÖÂдÈëÖжϡ£
  • ijЩÊý¾Ý¿âÓлùÓÚÖ÷¼üµÄ·ÖÇøËã·¨¡£°´Ë³ÐòÅŲ¼µÄ ID ¿ÉÄܵ¼ÖÂÎÞ·¨Ô¤²âµÄÈȵ㣬´Ó¶øʹµÃijЩ·ÖÇø¹ýÓÚ·±Ã¦£¬ÁíһЩÔòÒ»Ö±¿ÕÏС£
  • ·ÃÎÊÊý¾Ý¿âÖÐijÐеÄ×î¿ì·½Ê½ÊÇͨ¹ýÖ÷¼ü¡£Èç¹ûÄãÓиüºÃµÄ±êʶ¼Ç¼µÄ·½Ê½£¬ÄÇô˳Ðò ID ¿ÉÄÜ»áÈñíÖÐ×îÏÔÖøµÄÁгÉΪÎÞÒâÒåµÄÖµ¡£Ç뾡¿ÉÄܵØÑ¡ÔñÈ«¾Ö¶ÀÒ»µÄ×ÔÈ»Ö÷¼ü£¨±ÈÈçÓû§Ãû£©¡£

Ç뿼ÂÇ×Ô¶¯µÝÔö ID Óë UUID ¶ÔË÷Òý¡¢·ÖÇøºÍ·ÖƬµÄÓ°Ï죬ȻºóÔÙ¾ö¶¨ÄÄÖÖ·½Ê½¶ÔÄã¶øÑÔ×îºÃ¡£

¹ýʱµÄÊý¾Ý¿ÉÄÜÓÐÓöøÇÒÊÇÎÞËøµÄ

¶à°æ±¾²¢·¢¿ØÖÆ£¨MVCC£©ÄÜʵÏÖÎÒÃÇÉÏÃæ¼òÒªÌÖÂÛ¹ýµÄºÜ¶àÒ»ÖÂÐÔ¡£Postgres ºÍ Spanner µÈһЩÊý¾Ý¿âʹÓà MVCC ÒÔÈÃÿ¸öÊÂÎñ¶¼ÄÜ¿´µ½Ò»¸ö¿ìÕÕ£¬¼´¸ÃÊý¾Ý¿âµÄÒ»¸ö¸ü¾É°æ±¾¡£²ÎÕÕ¿ìÕÕµÄÊÂÎñÈÔÈ»¿ÉÒÔ´®Ðл¯ÒÔʵÏÖÒ»ÖÂÐÔ¡£µ±¶ÁÈ¡Ò»¸ö¾É¿ìÕÕʱ£¬Êµ¼Ê¶ÁÈ¡µÄÊǹýʱµÄÊý¾Ý¡£

µ«¼´Ê¹¶ÁÈ¡µÄÊÇÉÔ΢¹ýʱµÄÊý¾Ý£¬Ò²»áºÜÓÐÓô¦£¬±ÈÈçµ±ÔÚÉú³ÉÊý¾Ý·ÖÎö½á¹û»ò¼ÆËã½üËƾۺÏֵʱ¡£

¶ÁÈ¡¹ýʱÊý¾ÝµÄµÚÒ»´óÓÅÊÆÊÇÑÓ³Ù£¨ÓÈÆäÊǵ±ÄãµÄÊý¾Ý¿â·Ö²¼ÔÚ²»Í¬µÄµØÇøʱ£©¡£MVCC Êý¾Ý¿âµÄµÚ¶þ´óÓÅÊÆÊÇÆäÔÊÐíÖ»¶ÁÊÂÎñÊÇÎÞËøµÄ¡£ÔÚÐèÒª´óÁ¿¶ÁÈ¡µÄÓ¦ÓÃÖУ¬Ò»¸öÓÅÊÆÊÇÓùýʱµÄÊý¾ÝÒ²ÊÇ¿ÉÐеġ£

¼´±ã̫ƽÑóÁíÒ»¶ËÓÐij¸öÊý¾ÝµÄ×îа汾£¬µ«Ò²¿ÉÒÔ´Ó±¾µØ¶ÁÈ¡ 5 ÃëÇ°µÄ¹ýʱ¸±±¾¡£

Êý¾Ý¿â»á×Ô¶¯Çå³ý¾É°æ±¾£¬¶øÔÚijЩÇé¿öÏ£¬Êý¾Ý¿âÒ²Ö§³Ö°´ÐèÇåÀí¡£¾Ù¸öÀý×Ó£¬Postgres ÔÊÐíÓû§°´ÐèÖ´ÐÐ VACUUM ²Ù×÷»òÿ¸ôÒ»¶Îʱ¼ä×Ô¶¯Ö´ÐÐ VACUUM£¬¶ø Spanner ÔòÊÇͨ¹ýÔËÐÐÒ»¸öÀ¬»øÊÕ¼¯Æ÷À´¶ªÆúʱ¼ä³¬¹ý 1 СʱµÄ°æ±¾¡£

ÈκÎʱÖÓÔ´Ö®¼ä¶¼»á·¢ÉúʱÖÓÆ«ÒÆ

ÔÚ¼ÆËãÁìÓò£¬Òþ²ØµÃ×îºÃµÄÃØÃÜÊÇËùÓÐʱ¼ä API ¶¼ÔÚ˵»Ñ¡£ÎÒÃǵĻúÆ÷²¢²»ÄÜ׼ȷµØÖªµÀµ±Ç°µÄʱ¼äÊǶàÉÙ¡£ÎÒÃǵļÆËã»úÈ«¶¼°üº¬Ò»¸öÓÃÒÔ²úÉú¼ÆʱÐźŵÄʯӢ¾§Ìå¡£µ«Ê¯Ó¢¾§Ìå²¢²»ÄÜ׼ȷ¼ÆʱºÍ¼ÆËãʱ¼äÆ«ÒÆÁ¿£¬ÒªÃ´±Èʵ¼ÊʱÖӿ죬Ҫô¾Í¸üÂý¡£Ò»ÌìµÄÆ«ÒÆÁ¿ÉõÖÁ¿É´ï 20 Ã롣ΪÁË׼ȷ£¬ÎÒÃǵļÆËã»úʱ¼ä±ØÐ벻ʱµØÓëʵ¼Êʱ¼ä±£³Öͬ²½¡£

NTP ·þÎñÆ÷¿ÉÓÃÓÚͬ²½£¬µ«Í¬²½±¾ÉíÈ´¿ÉÄÜÓÉÓÚÍøÂçµÄÔ­Òò¶ø³öÏÖÑÓ³Ù¡£ÓëͬһÊý¾ÝÖÐÐÄµÄ NTP ·þÎñÆ÷ͬ²½¿öÇÒÐèҪʱ¼ä£¬Ó빫¹² NTP ·þÎñÆ÷ͬ²½¸üÊÇ¿ÉÄܲúÉú¸ü´óµÄÆ«ÒÆ¡£

Ô­×ÓÖÓºÍ GPS ʱÖÓÊǸüºÃµÄÈ·¶¨µ±Ç°Ê±¼äµÄÐÅÏ¢Ô´£¬µ«ËüÃǵIJ¿Êð³É±¾¸ü¸ß£¬¶øÇÒÐèÒª¸´ÔÓµÄÉèÖ㬲»¿ÉÄÜÔÚÿ̨»úÆ÷É϶¼°²×°¡£ÓÉÓÚ´æÔÚÕâЩÏÞÖÆÌõ¼þ£¬Êý¾ÝÖÐÐÄͨ³£Ê¹ÓõÄÊǶà²ã·½·¨¡£¼´ÔÚʹÓÃÔ­×ÓÖÓºÍ / »ò GPS ʱÖÓÌṩ׼ȷ¼ÆʱµÄͬʱ£¬ÔÙͨ¹ý¸¨Öú·þÎñÆ÷½«Ê±¼äÐÅÏ¢¹ã²¥¸øÆäËü»úÆ÷¡£ÕâÒâζ×ÅËùÓлúÆ÷¶¼Óëʵ¼ÊµÄµ±Ç°Ê±¼ä´æÔÚÒ»¶¨³Ì¶ÈµÄÆ«ÒÆ¡£

²»½öÈç´Ë£¬Ó¦ÓúÍÊý¾Ý¿âÍùÍù´î½¨ÔÚ²»Í¬µÄ»úÆ÷ÖУ¬ÉõÖÁ»¹¿ÉÄÜλÓÚ²»Í¬µÄÊý¾ÝÖÐÐÄ¡£Òò´Ë£¬²»½ö·ÖÉ¢ÔÚ²»Í¬»úÆ÷ÉϵIJ»Í¬Êý¾Ý¿â½ÚµãÖ®¼äÎÞ·¨Í³Ò»Ê±¼ä£¬Ó¦Ó÷þÎñÆ÷ʱÖÓºÍÊý¾Ý¿â½ÚµãʱÖÓÒ²ÎÞ·¨Í³Ò»¡£

¹È¸èµÄ TrueTime Ϊ´Ë²ÉÓÃÁËÒ»ÖÖ²»Í¬µÄ·½·¨¡£´ó¶àÊýÈËÈÏΪ¹È¸èÔÚʱÖÓÉϵijɹû¿ÉÒԹ鹦ÓÚËûÃÇʹÓÃÁËÔ­×ÓÖÓºÍ GPS ʱÖÓ£¬µ«ÄÇÆäʵ½ö½öÊDz¿·ÖÔ­Òò¡£TrueTime ʵ¼ÊÉÏÊÇÕâÑù¹¤×÷µÄ£º

  • TrueTime ʹÓÃÁËÁ½¸ö²»Í¬µÄʱ¼äÐźÅÔ´£ºGPS ʱÖÓºÍÔ­×ÓÖÓ¡£ÕâЩʱÖÓ´æÔÚ²»Í¬µÄ¹ÊÕÏģʽ£¬Òò´ËͬʱʹÓÃÁ½Õß¿ÉÒÔÌáÉý¿É¿¿ÐÔ¡£
  • TrueTime µÄ API ²¢²»Êdz£¹æÐ͵ġ£Ëü»áÒÔÇø¼äµÄÐÎʽ·µ»Øʱ¼ä¡£Òò´Ëʵ¼Êʱ¼äÊÂʵÉÏ´¦ÓÚÕâ¸öʱ¼äÇø¼äµÄÉϽçºÍϽçÖ®¼ä¡£Òò´Ë£¬¹È¸èµÄ·Ö²¼Ê½Êý¾Ý¿â Spanner ¾Í¿ÉÒԵȵ½ËüÈ·¶¨Á˵±Ç°Ê±¼ä³¬¹ýÁËÌض¨Ê±¼äÖ®ºó²ÅÖ´ÐÐÊÂÎñ¡£ÕâÖÖ·½·¨»á¸øϵͳ´øÀ´Ò»Ð©ÑÓ³Ù£¬ÓÈÆäÊǵ±Ö÷»úͨ¸æµÄ²»È·¶¨ÐԺܸßʱ£»µ«ÕâÖÖ·½·¨Äܱ£Ö¤ÕýÈ·ÐÔ£¬¼´Ê¹Êý¾Ý¿â·Ö²¼ÔÚÈ«ÇòÒ²ÊÇÈç´Ë¡£

ʹÓà TrueTime µÄ Spanner ×é¼þ£¬ÆäÖÐ TT.now() »á·µ»ØÒ»¸öʱ¼äÇø¼ä£¬ÕâÑù Spanner ¾Í¿ÉÒÔ²åÈë˯Ãßʱ¼äÒÔÈ·±£µ±Ç°Ê±¼äÒѳ¬¹ýÌض¨Ê±¼ä´Á¡£

µ±µ±Ç°Ê±¼äµÄÖÃÐŶÈϽµÊ±£¬Spanner Ö´ÐвÙ×÷¿ÉÄÜ»áºÄ·Ñ¸ü¶àʱ¼ä¡£Òò´Ë£¬¼´Ê¹²»¿ÉÄÜ»ñµÃ¾«×¼µÄʱÖÓ£¬±£Ö¤Ê±ÖÓµÄÖÃÐŶȶÔÐÔÄܶøÑÔÒ²ÊǷdz£ÖØÒªµÄ¡£

ÑÓ³ÙÓкܶຬÒå

Èç¹û·¿¼äÀïÓÐ 10 ¸öÈË£¬ÄãÎÊËûÃÇ¡¸ÑÓ³Ù£¨latency£©¡¹ÊÇʲôÒâ˼£¬Äã¿ÉÄÜ»áµÃµ½ 10 ¸ö²»Í¬µÄ´ð°¸¡£ÔÚÊý¾Ý¿âÖУ¬ÑÓ³Ùͨ³£ÊÇÖ¸Êý¾Ý¿âÑÓ³Ù£¬¶ø·Ç¿Í»§¶ËËù¸ÐÖªµ½µÄÑÓ³Ù¡£¿Í»§¶Ë¸ÐÖªµ½µÄÑÓ³Ù°üº¬Êý¾Ý¿âÑÓ³ÙºÍÍøÂçÑÓ³Ù¡£ÔÚµ÷ÊÔ²»¶Ï¶ñ»¯µÄÎÊÌâʱ£¬·Ö±æ¿Í»§¶ËÑÓ³ÙºÍÊý¾Ý¿âÑÓ³ÙÊǷdz£ÖØÒªµÄ¡£ÔÚÊÕ¼¯ºÍչʾָ±êʱ£¬ÍùÍùÐèҪͬʱ°üº¬ÕâÁ½ÖÖÑÓ³Ù¡£

ÆÀ¹Àÿ¸öÊÂÎñµÄÐÔÄÜÐèÇó

ÓÐʱºò£¬Êý¾Ý¿â»á½«ËüÃǵĶÁдÍÌÍÂÁ¿ºÍÑÓ³Ù×÷ΪÐÔÄÜÓÅÊƵÄÂôµãÀ´½øÐÐÐû´«¡£¾¡¹ÜÕâÄÜÔÚÆÀ¹ÀÊý¾Ý¿âµÄÐÔÄÜʱ´Ó½Ï¸ß²ãÃæÉÏÕ¹ÏÖÖ÷ÒªµÄÏÞÖÆÒòËØ£¬µ«ÎªÁ˸üÈ«ÃæµØ½øÐÐÆÀ¹À£¬ÐèÒªµ¥¶À·Ö¿ªÆÀ¹À¸÷¸ö¹Ø¼ü²Ù×÷µÄÐÔÄÜ£¬±ÈÈçÿ´Î²éѯ»òÿ¸öÊÂÎñµÄÖ´ÐÐÐÔÄÜ¡£Ê¾Àý£º

  • Ϊ¾ßÓиø¶¨Ô¼ÊøÌõ¼þµÄ°üº¬ 5000 ÍòÐеıí¸ñ X ²åÈëеÄÒ»Ðв¢Ìî³äÏà¹Ø±í¸ñʱµÄÍÌÍÂÁ¿ºÍÑÓ³Ù¡£
  • µ±Æ½¾ùºÃÓÑÊýΪ 500 ʱ£¬²éѯһ¸öÓû§µÄºÃÓѵĺÃÓÑʱµÄÑÓ³Ù¡£
  • µ±Óû§¶©ÔÄÁË 500 ¸öÕ˺ÅÇÒÿ¸öСʱÓÐ X ÏîÐÂÊäÈëʱ£¬¼ìË÷Óû§Ê±¼äÏßÇ° 100 Ìõ¼Ç¼ʱµÄÑÓ³Ù¡£

ÆÀ¹ÀºÍʵÑé¿ÉÄÜ°üº¬ÕâÑùµÄ¹Ø¼üÐÔ°¸Àý£¬Ö±µ½ÄãÓÐÐÅÐÄÄãµÄÊý¾Ý¿âÄܹ»Âú×ãÄãµÄÐÔÄÜÐèÇó¡£ÁíÒ»¸öÀàËƵľ­Ñé·¨ÔòÊÇÔÚÊÕ¼¯ÑÓ³ÙÖ¸±êºÍÉèÖà SLO ʱ¿¼ÂÇÕâÖÖ¹ÊÕÏÇé¿ö¡£

ÔÚÊÕ¼¯Ã¿¸ö²Ù×÷µÄÖ¸±êʱҪעÒâ¸ß»ùÊý¡£Èç¹ûÄãÐèÒª¸ß»ùÊýµÄµ÷ÊÔÊý¾Ý£¬ÇëʹÓÃÈÕÖ¾»ò·Ö²¼Ê½µÄ¸ú×Ù·½·¨¡£Èç¹ûÄãÏëÁ˽âÑÓ³Ùµ÷ÊÔ·½·¨£¬Çë²ÎÔÄ¡¶Want to Debug Latency?¡·£¨https://medium.com/observability/want-to-debug-latency-7aa48ecbe8f7£©¡£

ǶÌ×ÊÂÎñ¿ÉÄÜÓк¦

²¢·Çÿ¸öÊý¾Ý¿â¶¼Ö§³ÖǶÌ×ÊÂÎñ£¨nested transactions£©£¬µ«Èç¹ûÖ§³Ö£¬ÄÇôǶÌ×ÊÂÎñ¿ÉÄܵ¼Ö³öÈËÒâÁϵijÌÐòÉè¼Æ´íÎ󣬶øÇÒÕâÖÖ´íÎóÍùÍù²»Ò×ʶ±ð£¬Ö±µ½³öÏÖÁËÃ÷ÏÔÒì³£²ÅÄÜ¿´Çå¡£

Èç¹ûÄãÏëÒª±ÜÃâǶÌ×ÊÂÎñ£¬Ôò¿ÉÒÔʹÓÿͻ§¶ËÈí¼þ¿âÀ´¼ì²âºÍ±ÜÃâǶÌ×ÊÂÎñ¡£Èç¹ûÄã²»ÄܱÜÃâǶÌ×ÊÂÎñ£¬Ôò±ØÐë×¢Òâ²»Òª³öÏÖÒâÁÏÖ®ÍâµÄÇé¿ö£¬¼´µ±Ìá½»µÄÊÂÎñÒòΪ×ÓÊÂÎñ¶ø±»ÒâÍâÅ×Æúʱ¡£

Èç¹û½«ÊÂÎñ·â×°ÔÚ²»Í¬µÄ²ãÖУ¬¿ÉÄÜ»á³öÏÖ³öÈËÒâÁϵÄǶÌ×ÊÂÎñ°¸Àý£¬¶ø´Ó¿É¶ÁÐԽǶÈÀ´¿´£¬ÆäÒâͼ¿ÉÄܽ«±äµÃÄÑÒÔÀí½â¡£¿´¿´ÏÂÃæµÄ³ÌÐò£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
with?newTransaction():?????Accounts.create("609-543-222")????with?newTransaction():?????????Accounts.create("775-988-322")?????????throw?Rollback();?

ÒÔÉÏ´úÂëµÄ½á¹ûÊÇʲô£¿ÊÇÁ½¸öÊÂÎñ¶¼»á»Ø¹ö»¹Êǽö»Ø¹öÄÚ²¿ÄǸöÊÂÎñ£¿Èç¹ûÎÒÃǵ±Ê±ÒÀÀµµÄ¶à²ãÈí¼þ¿â½«¸ÃÊÂÎñµÄ´´½¨¹ý³Ì·â×°ÆðÀ´²»ÎªÎÒÃÇËù¼û£¬ÎÒÃÇ»¹ÄÜʶ±ðºÍ¸Ä½øÕâÑùµÄ°¸ÀýÂð£¿

¼ÙÉèÒ»¸ö¾ßÓжàÏî²Ù×÷£¨±ÈÈç newAccount£©µÄÊý¾Ý²ãÒѾ­ÔÚËüÃÇ×Ô¼ºµÄÊÂÎñÖÐʵÏÖÁË¡£µ±ÄãÓøü¸ß²ãµÄÒµÎñÂß¼­£¨ËüÃÇÔËÐÐÔÚ×Ô¼ºµÄÊÂÎñÖУ©ÔËÐÐËüÃÇʱ£¬»á·¢Éúʲô£¿¸ôÀëÐÔºÍÒ»ÖÂÐÔÓÖ»áÔõÑù£¿

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
function?newAccount(id?string)?{????with?newTransaction():????????Accounts.create(id)?}?

ÓëÆäºÄ·Ñ×ÊÔ´È¥½â¾öÕâЩÈÔ´ý½â¾öµÄÎÊÌ⣬»¹²»È粻ʹÓÃǶÌ×ÊÂÎñ¡£¼´Ê¹²»´´½¨ËüÃÇ×Ô¼ºµÄÊÂÎñ£¬ÄãµÄÊý¾Ý²ãÈÔ¿ÉÒÔʵÏָ߲ã²Ù×÷¡£È»ºó£¬ÒµÎñÂß¼­»áÆô¶¯ÊÂÎñ£¬ÔÚÊÂÎñÉÏÔËÐвÙ×÷£¬Ìá½»»òÖÐÖ¹¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
function?newAccount(id?string)?{?????Accounts.create(id)?}//?In?main?application:with?newTransaction():?????//?Read?some?data?from?database?for?configuration.?????//?Generate?an?ID?from?the?ID?service.?????Accounts.create(id)????Uploads.create(id)?//?create?upload?queue?for?the?user.?

? ?ÊÂÎñ²»Ó¦Î¬³ÖÓ¦ÓÃ״̬

Ó¦Óÿª·¢Õß¿ÉÄÜ»áÏëÔÚÊÂÎñÖÐʹÓÃÓ¦ÓÃ״̬À´¸üÐÂÌض¨µÄÖµ»òµ÷Õû²éѯ²ÎÊý¡£ÕâʱËùÒª¿¼ÂǵÄÒ»¸ö¹Ø¼üÊÂÏîÊÇÑ¡ÔñºÏÊʵķ¶Î§¡£¿Í»§¶ËÔÚÓöµ½ÍøÂçÎÊÌâʱÍùÍù»áÖØÊÔÊÂÎñ¡£Èç¹ûÒ»¸öÊÂÎñÒÀÀµÓÚÔÚÆäËüµØ·½»á±ä»¯µÄ״̬£¬ÄÇôÆä¿ÉÄܸù¾Ý¸ÃÎÊÌâÖÐÊý¾Ý¾ºÕùµÄ¿ÉÄÜÐÔÑ¡Ôñ´íÎóµÄÖµ¡£ÊÂÎñӦעÒâÓ¦ÓÃÖеÄÊý¾Ý¾ºÕù¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
var?seq?int64with?newTransaction():??????newSeq?:=?atomic.Increment(&seq)??????Entries.query(newSeq)?????//?Other?operations...?

ÉÏÃæµÄÊÂÎñ²»¹Ü×îÖÕ½á¹û¾¿¾¹ÈçºÎ£¬ÔÚÿ´ÎÔËÐÐʱ¶¼»áÔö¼ÓÐòÁкš£Èç¹ûÒòΪÍøÂçÎÊÌâ¶øµ¼ÖÂÌύʧ°Ü£¬ÔòÔÚµÚ¶þ´ÎÖØÊÔʱ»áʹÓò»Í¬µÄÐòÁкŽøÐвéѯ¡£

²éѯ¼Æ»®Æ÷ÄÜÌṩÓйØÊý¾Ý¿âµÄÒ»ÇÐÐÅÏ¢

²éѯ¼Æ»®Æ÷£¨query planner£©¾ö¶¨Á˲éѯÔÚÊý¾Ý¿âÖеÄÖ´Ðз½Ê½¡£ËüÃÇ»¹»áÔÚÔËÐÐ֮ǰ·ÖÎöºÍÓÅ»¯ÕâЩ²éѯ¡£¼Æ»®Æ÷½öÄÜ»ùÓÚÆäÓµÓеÄÐźÅÌṩijЩ¿ÉÄܵĹÀ¼Æ¡£ÈçºÎÈ·¶¨ÕÒµ½ÒÔϲéѯµÄ½á¹ûµÄ·½·¨£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
SELECT?*?FROM?articles?where?author?=?"rakyll"?order?by?title;?

¼ìË÷½á¹ûµÄ·½·¨ÓÐÁ½ÖÖ£º

  • È«±íɨÃ裺ÎÒÃÇ¿ÉÒÔ±éÀú±íÖеÄÿһÏȻºó·µ»Ø×÷ÕßÃûÆ¥ÅäµÄÎÄÕ£¬È»ºóÔÙÖ´ÐÐÅÅÐò¡£
  • Ë÷ÒýɨÃ裺ÎÒÃÇ¿ÉÒÔʹÓÃË÷ÒýÀ´²éÕÒÆ¥ÅäµÄ ID£¬¼ìË÷ÕâЩÐУ¬ÔÙÖ´ÐÐÅÅÐò¡£

²éѯ¼Æ»®Æ÷µÄ×÷ÓÃÊÇÈ·¶¨ÄÄÖÖ²ßÂÔÊÇ×î¼ÑÑ¡Ôñ¡£²»¹ý¶ÔÓÚÄÄЩ¿ÉÒÔÔ¤²â£¬ÄÄЩ¿ÉÄܵ¼ÖÂÔã¸âµÄ¾ö²ß£¬²éѯ¼Æ»®Æ÷½öÓÐÓÐÏÞµÄÐźš£Êý¾Ý¿â¹ÜÀíÔ±£¨DBA£©»ò¿ª·¢Õß¿ÉʹÓÃËüÃÇÀ´Õï¶ÏºÍÓÅ»¯±íÏֽϲîµÄ²éѯ¡£µ±Êý¾Ý¿âÉý¼¶Ê±£¬Èç¹ûа汾µÄÊý¾Ý¿â³öÏÖÁËÐÔÄÜÎÊÌ⣬ÄÇôÕâ¸öÊý¾Ý¿â¿ÉÒÔµ÷½Ú²éѯ¼Æ»®Æ÷²¢½øÐÐ×ÔÎÒÕï¶Ï¡£Âý²éѯÈÕÖ¾¡¢ÑÓ³ÙÎÊÌâ»ò¹ØÓÚÖ´ÐÐʱ¼äµÄͳ¼ÆÐÅÏ¢µÈ±¨¸æ¿ÉÓÃÓÚÈ·¶¨ÐèÒªÓÅ»¯µÄ²éѯ¡£

²éѯ¼Æ»®Æ÷ÌṩµÄijЩָ±ê¿ÉÄܾßÓн϶àÔëÉù£¬ÓÈÆäÊǵ±¹À¼ÆÑÓ³Ù»ò CPU ʱ¼äʱ¡£×÷Ϊ¶Ô²éѯ¼Æ»®Æ÷µÄ²¹³ä£¬¸ú×ÙºÍÖ´Ðз¾¶¹¤¾ß¶ÔÕï¶ÏÕâЩÎÊÌâ¶øÑÔ¿ÉÄÜ»á¸ü¼ÓÓÐÓ㬲»¹ý²¢·Çÿ¸öÊý¾Ý¿â¶¼»áÌṩÕâÑùµÄ¹¤¾ß¡£

ÔÚÏßǨÒÆ¿ÉÄܸܺ´ÔÓ£¬µ«È´¿ÉÒÔʵÏÖ

ÔÚÏß»òʵʱǨÒƵÄÒâ˼ÊÇÔÚ²»Í£»úÇÒ²»Ëðº¦Êý¾ÝÕýÈ·ÐÔµÄͬʱ´ÓÒ»¸öÊý¾Ý¿âǨÒƵ½ÁíÒ»¸öÊý¾Ý¿â¡£Èç¹ûÊÇǨÒƵ½Í¬ÑùµÄÊý¾Ý¿â / ÒýÇ棬ÔÚÏßǨÒÆ»á¸üΪ¼òµ¥£»µ«Èç¹ûÊÇǨÒƵ½ÐÔÄÜÌØÐÔºÍ×éÖ¯½á¹¹ÒªÇó²»Í¬µÄÐÂÊý¾Ý¿â£¬ÄÇÇé¿ö»á¸´Ôӵöࡣ

ÔÚÏßǨÒÆÓжàÖÖģʽ£¬ÏÂÃæ½éÉÜÆäÖÐÒ»ÖÖ£º

  • ¿ªÊ¼ÏòÁ½¸öÊý¾Ý¿âÖ´ÐÐ˫дÈ루dual writes£©¡£ÔÚÕâÒ»½×¶Î£¬ÐÂÊý¾Ý¿â»¹²»°üº¬ËùÓÐÊý¾Ý£¬µ«½«¿ªÊ¼¿´µ½ÐÂÊý¾Ý¡£Ò»µ©ÕâÒ»²½µÃµ½Á˱£Ö¤£¬Äã¾Í¿ÉÒÔ½øÈëÏÂÒ»²½ÁË¡£
  • ÈöÁȡ·¾¶¿ÉͬʱʹÓÃÕâÁ½¸öÊý¾Ý¿â¡£
  • Ö÷ҪʹÓÃÐÂÊý¾Ý¿âÀ´½øÐжÁÈ¡ºÍдÈë¡£
  • Í£Ö¹Ïò¾ÉÊý¾Ý¿âдÈ룬µ«¼ÌÐø±£³Ö´Ó¾ÉÊý¾Ý¿â¶ÁÈ¡¡£´Ëʱ£¬ÐÂÊý¾Ý¿âÈÔδ°üº¬ËùÓÐÐÂÊý¾Ý£¬¶øÔÚ»ñÈ¡¾É¼Ç¼ʱ£¬¿ÉÄÜ»¹ÐèÒª»ØÍËÖÁ¾ÉÊý¾Ý¿â¡£
  • Õâʱºò£¬¾ÉÊý¾Ý¿â´¦ÓÚÖ»¶Á״̬¡£´Ó¾ÉÊý¾Ý¿âÈ¡³öÐÂÊý¾Ý¿âȱʧµÄÖµ¶ÔÐÂÊý¾Ý¿â½øÐлØÌǨÒÆÍê³Éºó£¬ËùÓеĶÁÈ¡ºÍдÈë·¾¶¶¼½«Ê¹ÓÃÐÂÊý¾Ý¿â£¬¾ÉÊý¾Ý¿âÔò´ÓϵͳÖÐÒƳý¡£

Èç¹ûÄãÐèÒª¸ü¾ßÌåµÄ°¸Àý£¬¿ÉÒÔ¿´¿´ Stripe µÄ×ñÑ­ÕâһģʽµÄǨÒƲßÂÔ£ºhttps://stripe.com/blog/online-migrations

Êý¾Ý¿âÏÔÖøÔö³¤Ê±»áÒýÈë²»¿ÉÔ¤²âÐÔ

Êý¾Ý¿âÔö³¤»áÈÃÄãÔâÓö²»¿ÉÔ¤²âµÄÀ©Õ¹ÎÊÌâ¡£ÎÒÃǶÔ×Ô¼ºÊý¾Ý¿âµÄÄÚ²¿Çé¿öÔ½Á˽⣬¿ÉÄܾÍÔ½ÄÑÔ¤²âËüÃǵÄÀ©Õ¹Çé¿ö£¬»¹ÓÐЩÊÂÇéÊÇÎÒÃÇÎÞ·¨Ô¤²âµÄ¡£

ÔÚÊý¾Ý¿âÔö´óʱ£¬Ö®Ç°¹ØÓÚÊý¾Ý¹æÄ£ºÍÍøÂçÈÝÁ¿ÐèÇóµÄ¼ÙÉèºÍÔ¤ÆÚ¶¼½«±äµÃ¹ýʱ¡£Õâʱºò£¬ÎªÁ˱ÜÃâÖжϣ¬ÐèÒª´ó¹æÄ£µØÖØд×éÖ¯½á¹¹¡¢´ó¹æÄ£µØ¸Ä½øÔËÓª¡¢½â¾öÈÝÁ¿ÎÊÌâ¡¢ÖØп¼ÂDz¿Êð·½°¸»òǨÒƵ½ÆäËüÊý¾Ý¿â¡£

²»ÒªÒÔΪÁ˽âÄ㵱ǰÊý¾Ý¿âµÄÄÚ²¿Çé¿ö¾ÍÍòÎÞһʧÁË£¬¹æÄ£À©´ó»¹»á´øÀ´ÐµÄδ֪¡£ÎÞ·¨Ô¤²âµÄÈȵ㡢Êý¾Ý²»Æ½ºâµÄ·Ö²¼¡¢ÒâÁÏÖ®ÍâµÄÈÝÁ¿ºÍÓ²¼þÎÊÌâ¡¢²»¶ÏÔö³¤µÄÁ÷Á¿ºÍеÄÍøÂç·ÖÇø¶¼»áÈÃÄãÖØп¼ÂÇÄãµÄÊý¾Ý¿â¡¢Êý¾ÝÄ£ÐÍ¡¢²¿ÊðÄ£ÐͺͲ¿Êð¹æÄ£¡£

  • ·¢±íÓÚ:
  • Ô­ÎÄÁ´½Ó£ºhttp://news.51cto.com/art/202005/616396.htm
  • ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

ɨÂë

Ìí¼ÓÕ¾³¤ ½ø½»Á÷Ⱥ

ÁìȡרÊô 10ÔªÎÞÃż÷ȯ

˽Ïí×îР¼¼Êõ¸É»õ

ɨÂë¼ÓÈ뿪·¢ÕßÉçȺ
Áìȯ
http://www.vxiaotou.com