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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
UberµÄµ×²ã´æ´¢´ÓPostgres»»³ÉMySQLÖ®ºó
 
×÷Õߣº×ãÏ À´Ô´£ºInfoQ ·¢²¼ÓÚ 2016-9-26
  2751  次浏览      31
 

×î½ü£¬UberÈí¼þ¹¤³ÌʦEvan KlitzkeдÁËһƪÎÄÕ½éÉÜϵͳµÄµ×²ã´æ´¢ÓÉPostgres»»³ÉMySQLµÄÔ­Òò¡£ÎÒÃÇÏÈÀ´¿´¿´UberÎÄÕÂÀï±í´ïÁËÄÄЩ¹Ûµã¡£

±³¾°

ÔçÆÚµÄUberºǫ́Èí¼þÓÉPythonд³É£¬Êý¾Ý´æ´¢Ê¹ÓÃPostgres¡£ºóÆÚËæ×ÅÒµÎñµÄ·ÉËÙ·¢Õ¹ºǫ́¼Ü¹¹Ò²±ä»¯¾Þ´ó£¬Ñݽø³ÉÁË΢·þÎñ¼ÓÊý¾Ýƽ̨¡£Êý¾Ý´æ´¢Ò²ÓÉPostgres±ä³ÉÁËSchemaless¡ª¡ªUber×ÔÖ÷Ñз¢µÄÒÔMySQL×öΪµ×²ãµÄ¸ß¿ÉÓÃÊý¾Ý¿â¡£

UberµÄÊý¾Ý¿âÖ÷Òª´æ´¢µÄÊÇTripÊý¾Ý£¬¾ÍÊÇÒ»¸ö½Ð³µ¶©µ¥´Óϵ¥Æð£¬µ½Éϳµ¡¢Ï³µ¡¢¸¶·ÑµÈµÄÈ«¹ý³Ì¸ú×Ù¼°´¦Àí¡£´Ó2014Äê³õÆð£¬ÓÉÓÚÒµÎñÔö³¤Ñ¸ÃÍ£¬UberµÄÔ­Óлù´¡¼Ü¹¹ÒѾ­ÎÞ·¨¼ÌÐøÖ§³ÅÒµÎñ¡£¸Ä½øµÄÏîÄ¿»¨Á˽«½üÒ»Äêʱ¼ä¡£

¶ÔÓÚеÄÊý¾Ý¿â´æ´¢ÏµÍ³£¬UberµÄÖ÷Òª¹Ø¼üÐèÇóÊÇ£º

1.ÒªÓÐÄÜÁ¦Í¨¹ýÔö¼Ó·þÎñÆ÷¶øÏßÐÔµØÔö¼ÓÈÝÁ¿¡£Ôö¼Ó·þÎñÆ÷²»µ«ÒªÔö¼Ó¿ÉÓõÄÓ²ÅÌÈÝÁ¿£¬»¹Òª¼õÉÙϵͳµÄÏìӦʱ¼ä¡£

2.ÐèÒªÓÐд»º³åÄÜÁ¦£¬ÍòÒ»³Ö¾Ã»¯µ½Êý¾Ý¿âʧ°Üʱ£¬ÈÔ¿ÉÒÔÉÔºóÖØÊÔ¡£

3.ÐèҪ֪ͨÏÂÓÎÒÀÀµ¹ØÏµµÄ·½Ê½£¬Êý¾Ý±ä¸üÒªÄÜÎÞËðµÄ֪ͨ³öÈ¥¡£

4.ÐèÒª¶þ¼¶Ë÷Òý¡£

5.ϵͳҪ×ã¹»½¡×³£¬¿ÉÒÔÖ§³Ö7*24·þÎñ¡£

ÔÚµ÷²é¶Ô±ÈÁËCassandra¡¢RiakºÍMongoDBµÈµÈÖ®ºó£¬Uber¼¼ÊõÍŶÓûÓз¢ÏÖÄÜÍêÈ«Âú×ãÐèÇóµÄÏֳɽâ¾ö·½°¸¡£¶øÔÙ¿¼Âǵ½Êý¾Ý¿É¿¿ÐÔ¡¢¶Ô¼¼ÊõµÄ°ÑÎÕÄÜÁ¦µÈÒòËØ£¬ËûÃǾö¶¨×Ô¼º¿ª·¢Ò»Ì×Êý¾Ý¿â¹ÜÀíϵͳ¡ª¡ªSchemaless£¬Ò»¸ö¼üÖµÐÍ´æ´¢¿â£¬¿ÉÒÔ´æ·ÅJSONÊý¾Ý¶øÎÞÐèÑϸñµÄģʽÑéÖ¤£¬ÊÇÍêÈ«µÄÎÞģʽ·ç¸ñ¡£

ÓÃMySQL×÷µ×²ã´æ´¢£¬ÆäÖÐÖ»ÓÐ˳ÐòдÈ룬ÔÚMySQLÖ÷¿â¹ÊÕÏʱ֧³ÖдÈ뻺³å¡£²¢ÓÐÒ»¸öÊý¾Ý±ä¸ü֪ͨµÄ·¢²¼-¶©ÔŦÄÜ£¨ÃüÃûΪtrigger£©£¬Ö§³ÖÊý¾ÝµÄÈ«¾ÖË÷Òý¡£

SchemalessÏîÄ¿¼¼Êõ¸ºÔðÈËJakob ThomsenÈÏΪ£º

SchemalessµÄÇ¿´óÓë¼òµ¥¸ü¶àÊÇÒòΪÎÒÃÇÔÚ´æ´¢½ÚµãÖÐʹÓÃÁËMySQL¡£Schemaless±¾ÉíÊÇÔÚMySQLÖ®ÉÏÏà¶Ô½Ï±¡µÄÒ»²ã£¬¸ºÔð½«Â·ÓÉÇëÇó·¢Ë͸øÕýÈ·µÄÊý¾Ý¿â¡£½èÖúÓÚMySQLµÚ¶þË÷Òý¼°InnoDBµÄBufferPool£¬SchemalessµÄ²éѯÐÔÄܸܺߡ£

ÔÚEvan KlitzkeµÄÎÄÕÂÖУ¬ËûÊÇ´ÓPostgresÓëInnodbµÄµ×²ã´æ´¢»úÖÆ¶Ô±È¿ªÊ¼µÄ£¬ºóÃæÌáµ½ÁËËûÃÇÅöµ½µÄÈô¸ÉPostgresÎÊÌ⣺

1.дÈëЧÂʲ»¸ß¡£

2.Êý¾ÝÖ÷´Ó¸´ÖÆÐ§Âʲ»¸ß¡£

3.±íËð»µÎÊÌâ¡£

4.´Ó¿âÉϵÄMVCCÖ§³ÖÎÊÌâ¡£

5.ÄÑÓÚÉý¼¶µ½Ð°汾¡£

ÔÚPostgresµÄµ×²ãÉè¼ÆÖУ¬ËüµÄÐÐÊý¾ÝÊDz»¿ÉÐ޸ĵģ¬Ã¿¸ö²»¿ÉÐ޸ĵÄÐж¼½Ð×ö¡°Ôª×顱£¬Ã¿¸öΨһµÄÔª×é¶¼ÓÉÒ»¸öΨһµÄctid±êÖ¾£¬ctidÒ²¾Íʵ¼ÊÖ¸³öÁËÕâ¸öÔª×éÔÚ´ÅÅÌÉϵÄÎïÀíÆ«ÒÆÁ¿¡£ÕâÑù¶ÔÓÚÒ»ÐÐÐ޸ĹýµÄÊý¾ÝÀ´Ëµ£¬¾Í»á¶ÔÓ¦×ÅÔÚÎïÀíÉÏÓжà¸öÔª×é¡£±íÊÇÓÐË÷ÒýµÄ£¬Ö÷¼üË÷ÒýºÍµÚ¶þË÷Òý¶¼ÒÔBÊ÷×éÖ¯£¬¶¼Ö±½ÓÖ¸Ïòctid¡£

³ýÁËctidÖ®Í⻹ÓÐÒ»¸ö¹Ø¼ü×Ö¶Îprev£¬ËüµÄĬÈÏֵΪnull£¬µ«¶ÔÓÚÓÐÊý¾ÝÐ޸ĵļǼ£¬ÐµÄÔª×éÀïÃæµÄprev×Ö¶ÎÀï´æ´¢µÄ¾ÍÊǾÉÔª×éµÄctidÖµ¡£

ÓëPostgresÏà¶ÔÓ¦µÄÊÇ£¬MySQLµÄInnoDBÒýÇæÖ÷¼üË÷ÒýºÍµÚ¶þÒ²¶¼ÒÔBÊ÷×éÖ¯£¬µ«ÊÇË÷ÒýÖ¸ÏòµÄÊÇÖ÷¼ü£¬¶øÖ÷¼ü²ÅÕæÕýÖ¸ÏòÊý¾Ý¼Ç¼¡£¶øÇÒ£¬InnoDBµÄÊý¾ÝÊÇ¿ÉÒÔÐ޸ĵġ£Á½ÕßʵÏÖMVCCµÄ»úÖÆ²»Í¬£¬MySQLÒÀ¿¿UNDO¿Õ¼äÖеĻعö¶Î£¬¶ø²»ÊÇÏóPostgresÒÀ¿¿ÔÚÊý¾Ý±í¿Õ¼ä¶ÔͬһÌõÊý¾Ý±£³Ö¶à·Ý¡£

PostgresºÍInnoDB¶¼Í¨¹ýWAL£¨Write Ahead Log£©À´±£Ö¤Êý¾Ý¿ÉÒÔÔÚÊý¾Ý¿âÉϰ²È«Ð´È룬µ«¶ÔÓÚÖ÷´Ó¿âµÄÊý¾Ý¸´ÖÆÊµÏÖÔ­Àí²¢²»Í¬¡£Postgres»áÖ±½Ó°ÑWAL·¢Ë͵½´Ó¿âÉÏ£¬ÈôӿâÒ²Ö´ÐÐWALÀ´¸´ÖÆÊý¾Ý¡£¶øMySQLÔòÊÇ·¢ËÍBinlog£¬ÔÚ´Ó¿âÉÏÓ¦ÓÃBinlog¡£

Uber¶ÔPostgresÓÐÄÄЩ²»ÂúÒ⣿

д·Å´ó

Ò»°ãÀ´Ëµ´ó¼Ò½éÒâд·Å´óµÄÎÊÌâÊÇÓÉÓÚ¶ÔSSD´ÅÅ̵ÄʹÓá£SSD´ÅÅÌÊÇÓÐÊÙÃüµÄ£¬ËüµÄдÈë´ÎÊýÊÇÓÐÏ޵ģ¨ËäÈ»Êý×ֺܴ󣩡£ÕâÑùÈç¹ûÓ¦ÓòãÖ»ÊÇÏëдÈëÉÙÁ¿Êý¾Ý¶øÒÑ£¬µ«Êý¾ÝÂäÈë´ÅÅÌʱȴ±ä´óÁËÐí¶à±¶£¬ÄÇ´ó¼Ò¾Í»á±È½Ï½éÒâÁË¡£±ÈÈçÄãÖ»ÊÇÏëдÈë1KµÄÊý¾Ý£¬¿ÉÊÇ×îÖÕÈ´ÓÐ10KÊý¾ÝÂäÅÌ¡£

PostgresµÄд·Å´óÎÊÌâÖ÷Òª±íÏÖÔÚ¶ÔÓÐË÷ÒýµÄ±í½øÐÐÊý¾Ý¸üÐÂÉÏ¡£ÒòΪPostgresµÄË÷Òý¶¼ÊÇÖ¸ÏòÔª×éµÄctid£¬¶øÔª×éÓÖÊDz»¿É¸üеģ¬ËùÒÔµ±Äã¸üÐÂÒ»Ìõ¼Ç¼ʱ£¬Ëü»á´´½¨Ò»¸öеÄÔª×é´æÈë´ÅÅÌ£¬²¢ÇÒÒªÕë¶ÔËùÓеÄË÷Òý£¬ÎªÃ¿¸öË÷Òý¶¼´´½¨Ò»ÌõмǼÀ´Ö¸ÏòеÄÔª×飬²»¹ÜÄã¸ü¸ÄµÄ×ֶκÍÕâ¸öË÷ÒýÓÐûÓйØÏµ¡£ÕâÑù¶ÔÓÚWALÀ´Ëµ£¬Postgres¸ü¸ÄÒ»Ìõ¼Ç¼²Ù×÷»áдÈëеÄÍêÕû¼Ç¼£¬ÔÙ¼ÓÉ϶àÌõË÷Òý¼Ç¼¡£

×÷Õß×¢£º²»¹ýMySQLµÄInnoDBÆäʵҲÊÇÓÐд·Å´óÎÊÌâµÄ¡£InnoDBÊÇÒÔÊý¾ÝÒ³µÄÐÎʽ×éÖ¯Êý¾ÝµÄ£¬LinuxÉÏĬÈÏÊý¾ÝÒ³µÄ´óСÊÇ16K¡£ÕâÑùµ±Äã¸ü¸ÄÁËÒ»Ìõ¼Ç¼ʱ£¬×îÖÕ»á°ÑÕâÌõ¼Ç¼ËùÔÚµÄÊý¾ÝÒ³Õûҳˢ»Ø´ÅÅÌ£¬ÉèÏëÒ»ÏÂÄã¿ÉÄÜÖ»ÊǸÄÁËÒ»¸öС×ֶΣ¬Ò²ÐíÖ»ÓÐ4¸ö×Ö½Ú£¬¿ÉÊÇ×îÖÕÈ´»áµ¼ÖÂ16K×Ö½ÚµÄдÈë¡£

ÁíÍ⣬PostgresµÄÕâ¸öÉè¼ÆÒ²ÊÇÓÐÆäºÃ´¦µÄ£¬ËüµÄµÚ¶þË÷ÒýÖ±½ÓÖ¸ÏòÔª×éµÄctid£¬ÕâÑùÔÚ¶ÁÈ¡Êý¾ÝʱЧÂʾͷdz£¸ß¡£Ïà¶ÔÓ¦µØ£¬Í¨¹ýMySQLµÄµÚ¶þË÷ÒýÈ¥¶ÁÊý¾Ý»á¾­Àú¡°µÚ¶þË÷Òý¡ª¡ªÖ÷¼ü¡ª¡ªÊý¾Ý¡±µÄ¹ý³Ì£¬MySQLµÄ¶ÁЧÂʲ»ÈçPostgres¡£ÕâÊÇÒ»¸ö¾­µäµÄ¶ÁдÐÔÄÜȨºâÎÊÌ⣬ÔÚ´ËEvanûÓиø³ö¾ßÌåµÄÊý×ÖÈÃÎÒÃÇÌå»áËûÃǵÄÒµÎñÌØÕ÷¡£

Ö÷´Ó¸´ÖÆ

PostgresµÄд·Å´óÎÊÌâ×îÖÕÒ²·´Ó¦ÔÚÁËÖ÷´Ó¸´ÖƵÄÈÕÖ¾´«ÊäÉÏ£¬±ä³ÉÁËÁ÷Á¿·Å´óÎÊÌâ¡£PostgresµÄÖ÷´Ó¸´ÖÆ´«ÊäµÄÊÇWALÈÕÖ¾£¬ËùÒÔ¶ÔÓÚÒ»ÌõÊý¾Ý¸üÐÂÀ´Ëµ£¬ËüÒª´«ÊäеÄÊý¾Ý£¬»¹Òª´«ÊäÕâÕűíÉÏÿһÌõË÷ÒýÐ޸ĵÄÈÕÖ¾¡£

ÕâÑùµÄÁ÷Á¿·Å´óÔÚͬһ»ú·¿ÄÚ»¹ÉԿɽÓÊÜ£¬µ«¶ÔÓÚ¿ç»ú·¿µÄÇé¿ö£¬´«ÊäËٶȺͼ۸ñµÈÎÊÌâÈÃUber²úÉúÁ˹ËÂÇ¡£UberÊÇÓпç»ú·¿´Ó¿âµÄ£¬Ò»·½ÃæÊÇÈÝÔÖ£¬ÁíÒ»·½ÃæÊÇWALµÄ±¸·Ý£¬ÒÔ±¸ÓÐʱÐèÒª¿¿ËüÀ´´î½¨ÐµĴӿ⡣

MySQLµÄȷûÓÐÒýÆðÁ÷Á¿·Å´ó¡£MySQLµÄÖ÷´Ó¸´ÖÆÒÀ¿¿µÄÊÇBinlog£¬ËüÖ»ÊǼǼÕâÌõÊý¾ÝµÄÐ޸쬶ø²»ÔÚºõÕâÕűíÉϵ½µ×ÓжàÉÙË÷Òý£¬ËùÒÔ¿ÉÒÔÈÏΪÓëPostgresÏà±È£¬ËüµÄBinlogÊÇÒ»ÖÖ¶ÔÊý¾ÝÐ޸ĵġ°Âß¼­¡±ÃèÊö¡£

MySQL´Ó¿âÉÏÓ¦ÓÃBinlogÈÕ־ʱ£¬Èç¹ûÓеڶþË÷ÒýÉæ¼°Á˸͝µÄ×ֶΣ¬ÄǾ͸üеڶþË÷Òý£¬·ñÔòµÚ¶þË÷Òýѹ¸ù²»ÐèÒªÐ޸ġ£¶øÇÒ£¬MySQLÓÐÈýÖÖ²»Í¬µÄBinlog¸ñʽ£¬°üº¬Á˲»Í¬ÊýÁ¿µÄÐÅÏ¢À´¹©Ê¹ÓÃÕßÑ¡Ôñ£º

Statement£ºÖ»´«ÊäDMLµÄSQLÓï¾ä£¬È磺UPDATE users SET birth_year=770 WHERE id = 4¡£ÕâÖÖģʽÈÕÖ¾Á¿×îС£¬µ«ÔÚijЩ³¡¾°ÏºͶÔijЩ×Ö¶ÎÀ´ËµÈÝÒ׳ö´í¡£

Row£º¶ÔÓÚ¸ü¸ÄÁ˵ÄÊý¾Ý£¬»á°ÑÐÞ¸ÄǰºÍÐ޸ĺóµÄËùÓÐ×Ö¶ÎÖµ¶¼´òÓ¡ÔÚBinlogÖС£ÕâÖÖģʽÈÕÖ¾Á¿×î´ó£¬µ«Ò²×îÑϽ÷£¬Ô½À´Ô½¶àµÄ¹«Ë¾ÔÚתÏòÕâÖÖÈÕÖ¾¸ñʽ¡£ºÜ¶àÈÕÖ¾½âÎö¹¤¾ß¸üÊÇÖ»¹¤×÷ÔÚÕâÖÖģʽÏ¡£

Mixed£ºÉÏÃæÁ½ÖֵĽáºÏÌ壬MySQL»á¸ù¾Ý²»Í¬µÄÓï¾äÀ´×ÔÐÐÅжϡ£ÕâÖÖģʽÈÕÖ¾Á¿¾ÓÖС£

Êý¾ÝËð»µ

UberʹÓÃPostgres 9.2Ê±Ôø¾­ÒòΪһ¸öBUGµ¼ÖÂÁ˺ܴóµÄ¹ÊÕÏ¡£µ±Ê±ÓÉÓÚÓ²¼þÉý¼¶µÄÔ­ÒòËûÃÇ×öÁËÖ÷´ÓÇл»£¬½á¹û¾ÍÒý·¢ÁËÕâ¸öBUGµ¼Ö¸÷¸ö´Ó¿âµÄÊý¾ÝÈ«¶¼ÂÒµôÁË£¬¶øÇÒ»¹Ã»Óа취ÅжÏÄĸö´Ó¿âµÄÄÄЩÊý¾ÝÊÇÕýÈ·µÄ»òÕßÂҵġ£

×îÖÕËûÃÇÈ·ÈÏÁËеÄÖ÷¿âÉϵÄÊý¾ÝÈ«²¿ÕýÈ·ºó£¬ÓÃÐÂÖ÷¿âµÄÊý¾Ý°ÑËùÓдӿâÊý¾ÝÈ«¸²¸ÇÁËÒ»±é£¬²ÅËã¹ýÁËÕâÒ»¹Ø¡£¿ÉÊÇÒ»³¯±»ÉßÒ§Ê®Äêž®Éþ£¬ËûÃÇ×îºóÓõİ汾ÈÔÊÇPostgres 9.2£¬Ô­ÒòÖ®Ò»ÊDz»ÏëÔÙÈ¥²È±ðµÄ°æ±¾µÄ¿ÓÁË¡£

´Ó¿âÉϵÄMVCCÖ§³Ö²»ºÃ

PostgresµÄ´Ó¿âÉϲ¢Ã»ÓÐÕæÕýµÄMVCC£¬ËüµÄÊý¾Ý±í¿Õ¼ä¡¢±í¿Õ¼äÎļþÄÚÈݺÍÖ÷¿âÊÇÍêȫһÑùµÄ£¬ÔÚ´Ó¿âÉϾÍÊÇÒÀ´ÎÓ¦ÓÃWAL¡£¿ÉÈç¹û´Ó¿âÉÏÓÐÒ»¸öÕýÔÚ½øÐÐÖеÄÊÂÎñµÄ»°£¬Ëü¾Í»áµ²×¡WALµÄÓ¦Ó㬴Ӷøµ¼Ö¿´ÆðÀ´Ö÷´Óͬ²½Ñӳٺܴó¡£

PostgresʵÏÖÁËÒ»¸ö»úÖÆ£¬Èç¹ûij¸öÒµÎñ³ÌÐòµÄÊÂÎñµ²×¡Í¬²½Ïß³ÌÌ«¾ÃµÄ»°£¬¾ÍÖ±½Ó½«ÄǸöÊÂÎñɱµô¡£ËùÒÔÈç¹ûÔÚ´Ó¿âÉÏÓÐһЩ±È½Ï´óµÄÊÂÎñÔÚÔËÐеϰ£¬Äã¿ÉÄܾͻᾭ³£¿´¼ûĪÃûÆäÃîµÄÖ÷´Óͬ²½¾ÍÑÓ³ÙÁË£¬Ò²»á¿´¼û×Ô¼ºµÄ²Ù×÷ÔËÐÐÁËÒ»¶Îʱ¼ä¾Í²»Öª±»Ë­É±µôÁË¡£²¢²»ÊÇÿ¸ö³ÌÐòÔ±¶¼ºÜÊìϤÊý¾Ý¿âµÄµ×²ã¹¤×÷»úÖÆ£¬ËùÒÔÕâЩÏÖÏó»áÈôó¼Ò¾õµÃºÜ¹îÒì¡£

PostgresÊý¾Ý¿âµÄÉý¼¶

PostgresµÄÊý¾Ý¸´ÖÆÊÇÎïÀí¼¶µÄ£¬Ö÷´ÓÊý¾ÝÎļþÍêȫһÖ£¬ËùÒÔ²»ÄÜÖ§³Ö²»Í¬°æ±¾Ö®¼äµÄÖ÷´Ó¸´ÖÆ£¬±ÈÈçÖ÷¿âʹÓÃ9.2´Ó¿âʹÓÃ9.3£¬»òÕßÏà·´£¬µÈµÈ¡£Uber×î³õʹÓõÄÊÇPostgres 9.1£¬ËûÃdzɹ¦µÄÉý¼¶³ÉÁË9.2£¬µ«Éý¼¶ºÄ·ÑÁËÏ൱³¤µÄʱ¼ä£¬ÔÙ¼ÓÉϺóÀ´ÒµÎñ±¬·¢Ê½Ôö³¤£¬ÈÃËûÃÇÔÙҲûÄܰ²ÅÅÏÂÒ»´ÎÉý¼¶¡£

¶øÇÒPostgresÖ±µ½9.4Ö®ºó²ÅÓÐÁ˹¤¾ßpglogicalÀ´°ïÖú¼õÉÙÉý¼¶ºÄʱ£¬¿ÉÊÇpglogicalÓÖ²»ÔÚPostgresÖ÷·ÖÖ§ÀÈÃʹÓþɰ汾µÄÈËÎÞËùÊÊ´Ó¡£

MySQLµÄÆäËûÓŵã

³ýÁËÉÏÎÄËùÊöµÄ¼¸µã£¬MySQL»¹Óм¸¸öÆäËûPostgres²»¾ß±¸µÄÓŵ㡣

BufferPool£ºËäÈ»PostgresÔÚÄÚ²¿ÓбȽÏСµÄ»º´æ£¬µ«ºÍÏÖÔÚ¶¯éü¼¸°ÙGµÄ·þÎñÆ÷ÄÚ´æ±ÈÆðÀ´£¬ËüµÄ»º´æ»¹ÊÇ̫С£¬¶ÔÓ²¼þÀûÓÃÂÊÌ«µÍÁË¡£InnoDBÔòÓÐBufferPool£¬¿ÉÒÔͬʱÓÃÓÚд»º³åºÍ¶Á»º´æ£¬ÓÃLRU¹ÜÀí£¬´óС¿ÉÅ䣬ÕâÑù¾Í°ÑÓ²¼þ×ÊÔ´³ä·ÖºÏÀíµÄÀûÓÃÆðÀ´ÁË¡£

Á¬½Ó¹ÜÀí£ºMySQLµÄÁ¬½Ó¹ÜÀíÊÇÿ¸öÁ¬½ÓÒ»¸öỊ̈߳¬Ã¿¸öÏß³ÌÏûºÄµÄ×ÊÔ´¶¼ºÜÓÐÏÞ£¬ËùÒÔMySQL¿ÉÒÔÇáËÉÖ§³Ö10000¸öÒÔÉϵÄÁ¬½Ó¡£¿ÉÊÇPostgresÊÇÿ¸öÁ¬½ÓÒ»¸ö½ø³ÌµÄ£¬½ø³ÌÖ®¼äͨÐź͹²Ïí×ÊÔ´¸´ÔÓ£¬ÏûºÄ×ÊÔ´ÑÏÖØ£¬¶øÇÒ¶Ô¶àÁ¬½ÓÖ§³Ö²»ºÃ¡£UberµÄÒµÎñÒѾ­ÐèÒª¼«´óµÄÔö¼ÓÊý¾Ý¿âÁ¬½ÓÊý£¬PostgresÒѾ­ÎÞ·¨Âú×ãÐèÒª¡£

Evan Klitzke×ܽá˵£º

ÔÚ³õÆÚPostgres»¹Êǹ¤×÷µÃºÜºÃµÄ£¬µ«ÒµÎñÀ©Õ¹Ê±ÎÒÃǾÍÅöÉÏÁ˷dz£ÑÏÖØµÄÎÊÌâ¡£ÏÖÔÚÎÒÃÇ»¹ÊÇÔÚÓÃ×ÅһЩPostgresÊý¾Ý¿â£¬µ«ÊÇÖ÷ÒªµÄÊý¾ÝÒѾ­Å²µ½ÁËSchemalessÉÏ£¬ÓÐÐ©ÌØ±ðµÄÒµÎñÒ²ÓÃÁËCassandraµÈNoSQLÊý¾Ý¿â¡£ÎÒÃÇÏÖÔÚÓÃMySQLÓõúܺã¬ÎÒÃÇÒ²»áд¸ü¶àµÄ²©¿ÍÀ´·ÖÏí¸ü¶à¹ØÓÚMySQLÔÚUberµÄʹÓÃÄÚÈÝ¡£

³ÏÈ»£¬SchemalessÖ»Êǽ«MySQLÓÃÓÚÊý¾Ý´æ´¢£¬´æµÄÄÚÈÝÊǼòµ¥µÄ¡°¼ü-Öµ¡±¶ÔÄ£ÐÍ£¬ËäȻҲÓõ½Á˵ڶþË÷Òý£¬¿ÉÊÇÕâЩ²¢²»ÊÇ·ÅÆúPostgresµÄ³ä·ÖÀíÓÉ¡£Ëµµ½Ð´·Å´óºÍÁ÷Á¿·Å´ó£¬ÕâЩǮÄܽâ¾öµÄÎÊÌâÒ²²»Ó¦¸Ã¶ÔÈçÈÕÖÐÌìµÄUber²úÉúÀ§ÄÓ¡£Ò²ÐíÔÚÈ·¶¨ÁËÓɵ¥»ú°æµÄPostgres»»³É·Ö²¼Ê½µÄSchemalessÕâÑùµÄ·½ÏòÖ®ºó£¬ÔÙÑ¡Ôñµ×²ã´æ´¢Ê±£¬·´Õý֮ǰʹÓÃPostgresµÄ¾­ÀúÒ²²»Óä¿ì£¬¼ÓÉÏÁ÷Á¿ÎÊÌ⣬¾ÍË÷ÐÔ»»³ÉMySQL£¿

PostgreSQLÕæµÄÓÐÄÇô²îÂð£¿

UberµÄ±¾Òâ¿ÉÄÜÊÇ˵£¬¶ÔÓÚËûÃǵÄÒµÎñÐèÇóÀ´Ëµ£¬ËûÃÇ·¢ÏÖMySQL±ÈPostgreSQL¸üºÏÊÊ¡£±¾À´ËûÃÇ¿ÉÒÔ˵¡°PostgreSQL¶ÔÓÚ¸üвÙ×÷ºÜ¶àµÄϵͳÓÐЩ¾ÖÏÞ¡±£¬Èç¹ûÄãµÄϵͳ¸üвÙ×÷²»ÊǷdz£Æµ·±µÄ»°£¬ÆäʵÄã²»±Øµ£ÐÄUberµÄÎÊÌâ¡£

ÄÇô£¬UberµÄÑ¡ÔñÄÜ×÷Ϊ´ó¼ÒΪÊý¾Ý¿âÑ¡ÐÍʱµÄÒ»°ã²Î¿¼Âð£¿ÎªÊ²Ã´MySQL¿ÉÄܵÄÈ·ÊÇÊʺÏUberÒµÎñµÄ£¿ÎªÊ²Ã´ÆóÒµ³É¹¦ÁËÖ®ºó¿ÉÄÜ»áÅöµ½ÐÂÎÊÌâ¶ø²»½ö½öÊÇÒªÀ©Õ¹Êý¾Ý´æ´¢¹æÄ££¿½ÓÏÂÀ´¾ÍÕë¶ÔUberÎÄÕÂÌá³öµÄ¹Ûµã½øÐÐÉîÈëµÄ·ÖÎö¡£

¹ØÓÚ¸üвÙ×÷

UberµÄÎÄÕÂÖÐÊ×ÏÈÖØµãд¿ÉÊÇÓÖûÓÐÌṩ×㹻ϸ½ÚµÄÎÊÌâÊÇ£ºÔÚ¸üÐÂÒ»Ìõ¼Ç¼ʱPostgreSQL×Ü»á¸üÐÂÄÇÕűíÀïµÄËùÓÐË÷Òý¡£Ïà¶ÔÓ¦µÄÊÇMySQLµÄInnoDBÔòÖ»¸üÐÂÄÇЩ°üº¬Á˸üÐÂ×ֶεÄË÷Òý¡£PostgreSQLµÄµ×²ã»áÒòΪ¸üÐÂûÓб»Ë÷Òýµ½µÄ×ֶζø²úÉú¸ü¶àµÄ´ÅÅÌIO£¨ÎÄÖÐÌáµ½µÄ¡°Ð´·Å´ó¡±ÎÊÌ⣩¡£Èç¹ûÕâ¸ö¶ÔÓÚUberµÄÈ·ÊǸö´óÎÊÌâµÄ»°£¬ÄÇÕâÖÖ¸üвÙ×÷Ò²ÐíÕ¼ËûÃÇϵͳ¸ºÔصĺܴóÒ»²¿·Ö¡£

µ«ÊÇ£¬ËäÈ»UberµÄÎÄÕÂÖÐûÓÐÌáµ½£¬PostgreSQLµÄHeap-Only-Tuples (HOT)»úÖÆ¡£´ÓPosgreSQLµÄÔ´ÂëÖпÉÒÔ¿´µ½£¬HOT»úÖÆÖ»¶ÔijЩ³¡¾°ÊÊÓ㺡°µ±Ò»¸öÔª×é±»²»¶ÏµØ¸ü¸ÄûÓб»Ë÷Òýµ½µÄ×Ö¶Îʱ¡£¡±

ÔÚÕâÖÖ³¡¾°Ï£¬Èç¹ûа汾µÄÔª×é¿ÉÒԺ;ɰ汾´æ´¢ÔÚÏàͬµÄÊý¾ÝÒ³ÀïµÄ»°£¬PosgreSQL¿ÉÒÔ²»¸üÐÂÈκÎË÷Òý¾ÍÍê³É¸üС£¶øµ÷½Ú²ÎÊýfillfactor¿ÉÒÔ´ïµ½Õâ¸öЧ¹û¡£¿ÉÄÜUberµÄ¼¼ÊõÍŶÓÖªµÀHOT»úÖÆ¶ÔËûÃǵÄÎÊÌâû°ïÖú£¬Ò²Ðíÿ´Î¸üж¼»áÖÁÉÙ¸üе½Ò»¸ö±»Ë÷ÒýÁ˵Ä×ֶΡ£

ÎÄÕÂÖÐÓÐÒ»¶Î»°Ò²´ÓÒ»¸ö²àÃæÓ¡Ö¤ÁËÕâ¸öÍÆÀí£º¡°Èç¹ûÎÒÃÇÔÚ±íÉ϶¨ÒåÁË12¸öË÷Òý£¬ÄǼ´Ê¹¸üеÄ×Ö¶ÎÖ»±»Ò»¸öË÷ÒýË÷Òýµ½ÁË£¬ÄÇÕâ12¸öË÷ÒýÒ²¶¼Òª¸üÐÂctidÀ´Ö¸ÏòмǼ¡£¡±ËüÃ÷È·µØËµµ½¡°Ö»±»Ò»¸öË÷ÒýË÷Òýµ½ÁË¡±£¬Õâ¾ÍÊÇÒ»Öֱ߽çÇé¿ö¡ª¡ªÖ»ÒªÓÐÒ»¸öË÷Òý¡ª¡ªÒª²»È»µÄ»°£¬´ÓPosgreSQLµÄHOT»úÖÆÊÇ¿ÉÒÔ½â¾öÕâ¸öÎÊÌâµÄ¡£

¿´ÆðÀ´UberµÄϵͳ»á½øÐÐÐí¶à¸üвÙ×÷£¬Ã¿´Î¶¼»áÖÁÉÙ¸üÐÂÒ»¸ö±»Ë÷Òýµ½µÄ×ֶΡ£Èç¹ûÕ¼¾ø´ó¶àÊýµÄÓÃÀý¶¼Òª×öÕâÑùµÄ¸üУ¬ÄǹØÓÚ²ÉÓÃMySQL¶ø²»ÊÇPostgreSQLµÄ¹Ûµã¾ÍÊÇÓеÀÀíµÄ¡£

¹ØÓÚ²éѯ²Ù×÷

ÎÄÕÂ˵µ½MySQL/InnoDBʹÓþ۴ØË÷Òý£¬²¢ÇÒ³ÐÈÏ£º¡°ÕâÑùµÄÉè¼ÆÒâζ×ÅÔÚ½øÐеڶþË÷Òý²éѯʱ£¬InnoDBÓëPostgreSQLÏà±ÈÉÔÓÐÑ·É«£¬ÒòΪInnoDBÒª½øºÍÁ½´ÎË÷Òý²éѯ£¬¶øPostgreSQLÖ»ÓÃÒ»´Î¡£¡±

ËûÃǵÄÓôÊÊÇ¡°ÉÔÓÐÑ·É«¡±¡£ÒÀÎÒÖ®¼û£¬Èç¹ûÄãҪͨ¹ýµÚ¶þË÷Òý½øÐдóÁ¿²éѯµÄ»°£¬Õâ¸ö¿ÉÊÇÏ൱´óµÄ²»×ã¡£Èç¹ûËûÃÇÈÏΪÕâÖ»ÊÇÒ»µãµãÎÊÌâµÄ»°£¬ÄÇÒ²Ðí¾Í±íÃ÷ËûÃǵĵڶþË÷ÒýºÜÉٻᱻÓõ½¡£ÄǾͱíÃ÷£¬ËûÃÇÖ÷ÒªÊÇͨ¹ýÖ÷¼üËÑË÷£¨ÕâÖÖ³¡¾°ÏÂûÓеڶþË÷Òý³Í·££©¡£×¢Ò⣬ÕâÀïÓôÊÊÇ¡°ËÑË÷¡±£¨searching£©¶ø²»ÊÇ¡°²éѯ¡±£¨selecting£©£¬Ô­ÒòÊǵڶþË÷Òý³Í·£»áÓ°ÏìÈκδøÓÐwhere×Ó¾äµÄÓï¾ä£¬¶ø²»½ö½öÊDzéѯ¡£Õâ±íÃ÷¸ßƵÂʵĸüвÙ×÷Ö÷ÒªÊÇÒÀ¾ÝÖ÷¼üµÄ¡£

×îºó£¬»¹ÓÐÒ»µãËûÃÇûÓÐÌáµ½µÄºÍËûÃǵIJéѯÏà¹ØµÄ¶«Î÷£ºËûÃÇûÓÐÌá¼°PostgreSQLÖ»ÒÀ¿¿Ë÷Òý¼ìË÷µÄ²»×ã¡£ÓÈÆäÊÇÔÚ¸üÐÂÆµ·±µÄÊý¾Ý¿âÖУ¬PostgreSQLµÄÖ»ÒÀ¿¿Ë÷Òý¼ìË÷µÄʵÏ־͸üÊÇÎÞÓá£ÎÒÉõÖÁ»á˵ÕâÒ»¸öÎÊÌâ¾ÍÓ°ÏìÁËÎÒ¾ø´ó¶àÊýµÄ¿Í»§¡£ÎÒÔÚ2011ÄêÔøÐ´¹ý¹ØÓÚÕâ¸öÎÊÌâµÄÎÄÕ¡£

2012Ä꣬PostgreSQL 9.2¶ÔÖ»ÒÀ¿¿Ë÷Òý¼ìË÷µÄ¹¦ÄܽøÐÐÁËÓÐÏÞÖ§³Ö£¨Ö»ÊÊÓÃÓڷdz£¾²Ì¬µÄÊý¾Ý£©¡£ÔÚ2014Ä꣬ÎÒÉõÖÁÔÚPostgreSQL´ó»áÉϱí´ïÁËÎÒ¶ÔÕâ¸öÎÊÌâµÄ¹ËÂÇ¡£¿ÉÊÇUber²¢Ã»Óб§Ô¹Õâ¸öÎÊÌ⣬¿´À´²éѯËٶȲ»ÊÇËûÃǵÄÎÊÌâËùÔÚ¡£ÎÒ²ÂËûÃǵIJéѯÖ÷ÒªÊÇ¿¿ÔÚ´Ó¿âÉϲéѯ£¨¼ûÏÂÎÄ£©À´ÌáÉýËÙ¶È£¬¶øÇҷdz£ÓпÉÄÜÖ÷Òª×öµÄÊÇË÷¼ü²éѯ¡£

µ½Ä¿Ç°ÎªÖ¹£¬ËûÃǵÄÓÃÀý×ܽáÆðÀ´Ëƺõ±È½ÏÊʺϼüÖµÐÍ´æ´¢¡£ÒªÖªµÀInnoDBÊǸöÏ൱ºÃÓöøÇÒÊÜ»¶Ó­µÄµ×²ã´æ´¢£¬MySQLºÍMariaDB¾ÍÊÇ×î¹ãΪÈËÖªµÄ½áºÏÁËInnoDB´æ´¢²¢ÌṩÁËһЩ·Ç³£ÓÐÏÞµÄSQLǰ¶ËµÄÊý¾Ý¿â¡£

ÑÏËàµÄ˵£¬Èç¹ûÄãÖ÷ÒªÊÇÐèÒªÒ»¸ö¼üÖµÐÍ´æ´¢²¢ÇÒż¶ûÐèÒªÔËÐÐһЩ¼òµ¥µÄSQL²éѯ£¬ÄÇMySQL»òÕßMariaDB¾ÍÊǷdz£²»´íµÄÑ¡Ôñ¡£ÎÒ²ÂËüÃÇÖÁÉÙÒª±ÈÈκÎÀàÐ͵ĸտªÊ¼ÌṩÀàSQLÓïÑÔ²éѯµÄNoSQL¼üÖµÐÍ´æ´¢ÒªºÃ¡£ÁíÍ⣬Uber¸Õ¸Õ»ùÓÚMySQLºÍInnoDB´î½¨ÁËËûÃÇ×Ô¼ºµÄ·Ö²¼Ê½Êý¾Ý¿âSchemaless¡£

¹ØÓÚË÷ÒýÖØÆ½ºâ

ÔÚÎÄÖÐÃèÊöË÷ÒýʱµÄ×îºóÒ»¾ä£¬ËüÔÚ½²ÊöBÊ÷Ë÷ÒýʱÓõ½ÁË¡°ÖØÆ½ºâ¡±Õâ¸ö´Ê£¬Ëü»¹ÒýÓÃÁËWikipediaÉÏһƪ¹ØÓÚ¡°É¾³ýÖ®ºóµÄÖØÆ½ºâ¡±ÎÄÕ¡£¿Éϧ£¬WikipediaÉϵÄÎÄÕ²¢²»ÆÕ±éÊÊÓÃÓÚÊý¾Ý¿âË÷Òý£¬ÒòΪËüÉÏÃæÃèÊöµÄËã·¨Òþº¬µÄǰÌáÊÇÿ¸ö½Úµã±ØÐë¶¼ÊǰëÂúµÄ¡£

PostgreSQLʹÓÃÁËBÊ÷µÄLehman¡¢ Yao±äÖÖ£¬ËüΪÁËÌá¸ß²¢·¢¶ÈÖ§³ÖÏ¡ÊèË÷Òý¡£Òò´Ë£¬PostgreSQLÈÔÈ»»á´ÓË÷ÒýÖÐɾ³ý¿Õ°×Ò³£¨¼û»ÃµÆÆ¬¡°Ë÷ÒýµÄÄÚ²¿Ô­Àí¡±µÚ15Ò³£©£¬µ«ÕâÖ»ÊÇÒ»¸ö´ÎÒªÎÊÌâ¶øÒÑ¡£

ÕæÕýÁîÈ˵£ÓǵÄÊÇÕâÒ»¾ä£º¡°BÊ÷µÄÒ»¸öÖØÒªÌØÐÔÊÇËüÃǻᶨÆÚ×öÖØÆ½ºâ¡­¡­¡±ÔÚÕâÀïÐèÒª³ÎÇ壬Õâ²¢²»ÊÇÿÌì¶¼»áÔËÐеÄÒ»¸öÖÜÆÚÐÔ¹ý³Ì¡£Ã¿´ÎË÷Òý¸Ä±ä£¨Ò²¿ÉÄܸüÔ㣩¶¼¿ÉÄÜ»áÒýÆðË÷ÒýÖØÆ½ºâ£¬µ«ÎÄÕÂÖмÌÐøËµ£º¡°µ±×ÓÊ÷ÒÆ¶¯µ½´ÅÅÌÆäËûλÖÃʱ£¬ÕâÖÖÖØÆ½ºâ²Ù×÷»áÍêÈ«¸Ä±äÊ÷µÄ½á¹¹¡£¡±Èç¹ûÄãÈÏΪ¡°ÖØÆ½ºâ¡±µÄ¹ý³Ì»áµ¼ÖÂÊý¾ÝÒÆ¶¯£¬ÄÇÄã¾Í´íÁË¡£

BÊ÷×îÖØÒªµÄ¹ý³ÌÊǽڵã·ÖÁÑ¡£´Ó×ÖÃæÉÏÒ²Ðí¾ÍÄÜÀí½â£¬µ±Ò»¸ö½ÚµãÖÐû°ì·¨ÔÙдÈëÒ»ÌõмǼʱ£¬Ëü¾Í»á·ÖÁÑ¡£´ÖÂÔµØËµÔÚ¾­¹ý100´Î²åÈëÖ®ºó¾Í»áÓÐÒ»´Î·ÖÁÑ¡£Òª·ÖÁѵĽڵã»áÔÙÉú³ÉÒ»¸öнڵ㣬Ȼºó´Ó×Ô¼ºÕâÀïŲһ°ëµÄ¼Ç¼¹ýÈ¥£¬ÔÙ°ÑнڵãºÍ¾ÉµÄ¡¢ÏÂÒ»¸öÒÔ¼°¸¸Ç׽ڵ㶼Á¬½ÓÆðÀ´£¬Õâ¾ÍÊÇLehman£¬YaoµÄËã·¨½ÚÊ¡ÁËÐí¶àËø²Ù×÷µÄµØ·½¡£

µ«ÔÚijЩÇé¿öÏ£¬Ð½ڵ㲢²»ÄÜÖ±½Ó±»¼Óµ½¸¸Ç×½ÚµãÀÒòΪÈç¹û¸¸Ç×½ÚµãҲǡºÃÂúÁ˶øÎÞ·¨ÔÙÌí¼ÓеÄ×Ó½Úµãʱ£¬¸¸Ç×½ÚµãÒ²»á·ÖÁÑ£¬ÉÏÊöËùÓйý³Ì¶¼»áÖØ×ö¡£

ÔÚ×î²îµÄÇé¿öÏ£¬·ÖÁѲÙ×÷»áÒ»Ö±ÏòÉÏ´«µÝµ½¸ù½Úµã£¬ËüÒ²»á·ÖÁѲ¢ÔÚËüµÄÉÏÒ»¼¶ÔÙ¼ÓÉÏÒ»¸öеĸù½Úµã¡£Ö»ÓÐÔÚÕâÖÖÇé¿öÏ£¬BÊ÷µÄÉî¶È»áÔö¼Ó¡£×¢Òâ¸ù½Úµã·ÖÁÑʱΪÁ˱£³ÖÊ÷µÄƽºâ»á½øÐÐÕû¿ÃÊ÷µÄµ÷Õû£¬µ«Õâ²¢²»Ò»¶¨»áµ¼Ö´óÁ¿µÄÊý¾ÝÒÆ¶¯¡£ÔÚ×î²îµÄÇé¿öÏ£¬Ã¿Ò»²ã»áÐÞ¸ÄÈý¸ö½Úµã£¬ÔÙ¼ÓÉϸöеĸù½Úµã¡£

ÊÂʵÉÏ£¬µ±½ñÊÀ½ç¾ø´ó¶àÊýµÄÉú²ú¿âBÊ÷Ë÷Òý¶¼²»³¬¹ý5²ã£¬Ò²¾ÍÊÇ˵×î²îµÄÇé¿ö¡ª¡ª¸ù½Úµã·ÖÁÑ¡ª¡ª¿ÉÄÜÔÚ¾­¹ýÊ®ÒڴβåÈë²Ù×÷µÄ¹ý³ÌÖвŻᷢÉú5´Î£¬¶øÇÒÒ²²»»áÕû¿ÃÊ÷¶¼ÊÜÓ°Ïì¡£×ܵÄÀ´Ëµ£¬Ë÷Òýά»¤²¢²»ÊÇÖÜÆÚÐԵģ¬Ò²²¢²»Æµ·±£¬Ëüѹ¸ù²»»áÍêÈ«¸Ä¶¯Ê÷µÄ½á¹¹£¬ÖÁÉÙÊÇ´ÅÅÌÉϵÄÊý¾Ý¡£

¹ØÓÚÎïÀí¸´ÖÆ

UberµÄÎÄÕÂÖÐÌáµ½Á˹ØÓÚPostgreSQLµÄÁíÒ»¸öÎÒ²»Ô޳ɵÄÖ÷ÒªÎÊÌ⣺ÎïÀí¸´ÖÆ¡£ÎÄÕÂÌáµ½Ë÷Òý¡°ÖØÆ½ºâ¡±ÎÊÌâµÄÔ­ÒòÊÇUberÔø¾­Åöµ½¹ýÒ»¸öPostgrSQLµÄ¸´ÖÆBUG£¬µ¼ÖÂËùÓеĴӿâÊý¾Ý¶¼Ëð»µÁË£¨¡°BUGÓ°ÏìÁËPostgreSQL 9.2µÄºÃ¼¸¸ö×Ó°æ±¾£¬ÒѾ­±»ÐÞ¸´ºÜ³¤Ê±¼äÁË¡±£©¡£

ÒòΪPostgreSQL 9.2Ö»ÔÚÄÚºËÖÐÌṩÁËÎïÀí¸´ÖÆ¹¦ÄÜ£¬ÄÇÒ»¸öÖ÷´Ó¸´ÖƵÄBUGµÄÈ·¡°»áµ¼ÖÂÊ÷µÄ´ó²¿·ÖÄÚÈݶ¼ÍêÈ«´íÎ󡱡£½âÊÍһϣ¬Èç¹ûÒ»¸ö½Úµã·ÖÁѸ´ÖƳö´í½á¹ûµ¼ÖÂËü²»ÄÜÖ¸ÏòÕýÈ·µÄ×Ó½ÚµãµÄ»°£¬ÄÇÕû¿Ã×ÓÊ÷¶¼»áʧЧ¡£ÕâÊǾø¶ÔÕýÈ·µÄ£¬¾ÍÏóÒ»¾ä¡°Èç¹ûÓÐBUG¾ÍÒªÔ㡱ÕâÑùµÄ»°Ò»ÑùÕýÈ·¡£ÒªÆÆ»µÒ»¸öÊ÷µÄ½á¹¹²¢²»ÐèÒª¸ÄºÜ¶àÊý¾Ý£ºÖ»ÒªÒ»¸ö»µÖ¸Õë¾Í¹»ÁË¡£

UberµÄÎÄÕÂÒ²Ìáµ½ÁËÎïÀí¸´ÖÆµÄһЩÆäËûÎÊÌ⣺³¬´óµÄ¸´ÖÆÁ÷Á¿£¨²¿·ÖÔ­ÒòÊǸüвÙ×÷µ¼ÖµÄд·Å´ó£©¡¢Éý¼¶µ½ÐÂPostgreSQL°æ±¾Ê±ÐèÒª¹ý³¤µÄÍ£·þʱ¼ä¡£µÚÒ»¸ö¶ÔÎÒÀ´ËµºÏÀí£¬µ«µÚ¶þ¸öÎÒ¾Íʵ¼ÊÎÞ·¨ÆÀÂÛÁË£¨µ«ÊÇÔÚPostgreSQL-hackersÓʼþ×éÀïÊÇÓÐһЩÆÀÂ۵ģ©¡£

×îºó£¬ÎÄÕÂÉù³Æ¡°PostgreSQLûÓÐÕæÕýÒâÒåÉϵĴӿâMVCCÖ§³Ö¡±¡£ÐÒÔ˵ÄÊÇ£¬ÎÄÕÂÁ¬½Óµ½ÁËPostgreSQLÎĵµÖнâÊÍÕâ¸öÎÊÌâµÄÒ³Ãæ¡£ÎÊÌâÖ÷ÒªÊÇ˵Ö÷¿âÍêÈ«²»ÖªµÀ´Ó¿âÔÚ×öʲô£¬ËùÒÔ¶ÔÓÚijЩҪ×ö´ó²Ù×÷¶øÑӳٷdz£´óµÄ´Ó¿âÀ´Ëµ£¬ÓпÉÄÜÖ÷¿â»áɾ³ý´Ó¿âÈÔδȡ×ßµÄÈÕÖ¾¡£

°´PostgreSQLÎĵµÀ´Ëµ£¬ÓÐÁ½¸ö°ì·¨½â¾öÕâ¸öÎÊÌ⣺

ΪÁËÈöÁÊÂÎñ¿ÉÒÔÓлú»áÍê³É²Ù×÷£¬ÔÊÐí¸´ÖÆÁ÷ÔÚÒ»¶¨µÄ³¬Ê±Ê±¼äÄÚÑÓ³ÙÓ¦ÓÃÊý¾Ý¡£Èç¹û³¬Ê±Ö®ºó¶ÁÊÂÎñÈÔȻûÓÐÍê³É£¬¾Í°ÑÊÂÎñɱËÀ£¬Èø´ÖÆÁ÷Ó¦ÓÃÊý¾Ý¡£

ÅäÖôӿâÏòÖ÷¿â·¢ËÍ»ØÓ¦ÏûϢ˵Ã÷×Ô¼ºµ±Ç°µÄ¸´ÖÆ×´Ì¬£¬±ÜÃâÖ÷¿âÇå³ýµôÈκδӿâÈÔÈ»ÐèÒªµÄÀúÊ·°æ±¾Êý¾Ý¡£UberµÄÎÄÕÂÖ±½ÓÅųýÁ˵ÚÒ»ÖÖ°ì·¨£¬µ«Ñ¹¸ùûÌáµÚ¶þÖÖ°ì·¨£¬»¹ÅúÆÀÁËUberµÄ¿ª·¢Õß²»Á˽âÊý¾Ý¿âµ×²ãÔ­Àí¡£

¹ØÓÚ¿ª·¢Õß

ÒýÓÃÈ«²¿Ô­ÎÄ£º¡°±ÈÈ磬һ¸ö¿ª·¢Ð´ÁËÒ»¶Î´úÂëÀ´°ÑÒ»¸öÊÕ¾Ýͨ¹ýÓʼþ·¢¸øÁíÒ»¸öÓû§¡£ÒÀ´úÂëµÄд·¨²»Í¬£¬¿ÉÄÜ»áÒþʽµØÓõ½Ò»¸öÊý¾Ý¿âÊÂÎñ£¬Ö±µ½Óʼþ³É¹¦·¢ËÍÖ®ºóÊÂÎñ²Å½áÊø¡£

µ±È»£¬ÈÃÄãµÄ´úÂëÔÚ×öһЩ²»Ïà¸ÉµÄ×èÈûʽIOʱ»¹´ò¿ªÒ»¸öµÄÊÂÎñ²¢²»ºÃ£¬µ«ÏÖʵÇé¿öÊǾø´ó²¿·Ö¹¤³ÌʦÃǶ¼²»ÊÇÊý¾Ý¿âר¼Ò£¬¿ÉÄܲ¢²»»áÒâʶµ½Õâ¸öÎÊÌâµÄ´æÔÚ£¬ÓÈÆäÊǵ±ËûÃÇʹÓÃORMµÈ¼Ü¹¹µÄʱºò£¬ÄÇЩ¿ªÆôÊÂÎñÖ®ÀàµÄµ×²ãϸ½Ú¶¼±»ÑÚ¸ÇÆðÀ´ÁË¡£

ÎÒÀí½â²¢Ö§³ÖÕâÑùµÄ˵·¨£¬¶ÔÓÚÕâ¾ä»°£º¡°´ó¶àÊý¹¤³Ìʦ¶¼²»ÊÇÊý¾Ý¿âר¼Ò¡£¡±Êµ¼ÊÉÏ£¬´ó¶àÊý¹¤³ÌʦµÄÊý¾Ý¿â֪ʶ¶¼ÉٵÿÉÁ¯¡£Æäʵ¼´Ê¹²»ÊÇÊý¾Ý¿âר¼Ò£¬Ã¿Ò»¸öҪʹÓÃSQLµÄ¹¤³Ìʦ»¹ÊÇÒªÖªµÀÊÂÎñµÄ¡£

ÎÒ¹¤×÷µÄÖ÷ÒªÄÚÈݾÍÊǸø¿ª·¢ÕßÃÇ×öSQLÅàѵ£¬¸÷ÖÖ¹æÄ£µÄ¹«Ë¾Àï¶¼×ö¹ý¡£Èç¹ûÓÐÒ»¼þÊÂÎҸҿ϶¨µÄ»°£¬ÄǾÍÊÇ´ó¼ÒµÄSQL֪ʶʵÔÚÊÇÄÑÒÔÖÃÐŵزÔÚÉÏÎĸոÕÌáµ½µÄ¡°´ò¿ªµÄÊÂÎñ¡±µÄÎÊÌâÖУ¬ÎÒ¿ÉÒԿ϶¨£¬ºÜÉÙÓпª·¢ÕßÖªµÀÖ»¶ÁÊÂÎñÊÇÕæµÄ´æÔڵ쬴ó¶àÊý¿ª·¢ÕßÖ»ÖªµÀÊÂÎñÊÇÓÃÀ´±£»¤Ð´²Ù×÷µÄ¡£ÎÒÌ«¶à´ÎÅöµ½ÕâÑùµÄÎÊÌâÁË¡£

¹ØÓڳɹ¦

ÕâÀïҪ˵µÄ×îºóÒ»¸öÎÊÌ⣺һ¸ö¹«Ë¾¹ÍµÄÈËÔ½¶à£¬ËûÃǵÄÄÜÁ¦¾Í»áÔ½Ç÷½üƽ¾ùˮƽ¡£¿äÕŵØËµ£¬Èç¹ûÄã°ÑµØÇòÉÏËùÓÐÈ˶¼¹ÍÁË£¬ÄÇÄãÇ¡ºÃ¾ÍÊÇˮƽ´ïµ½ÄǸöƽ¾ùÖµ¡£¹ÍµÄÈ˶àÖ»ÊÇÔö´óÁËÑù±¾¼¯ºÏ¶øÒÑ¡£

ÓÐÁ½¸ö°ì·¨¿ÉÒÔ±ÜÃâÕâÖÖ¿ÉÄÜ£º

Ö»¹Í×îºÃµÄÈË¡£Õâ¸ö°ì·¨µÄÄѵãÔÚÓÚµ±ÔÝʱÕÒ²»µ½Ë®Æ½¸ßÓÚÒ»°ãµÄÈËʱ£¬Ö»ºÃÄÍÐĵȴý¡£

¹Íˮƽһ°ãµÄÈËÔÙ°ÑËûÃÇÔÚ¹¤×÷ÖÐÅàÑøÆðÀ´¡£ÐÂÔ±¹¤ÒªÉÏÊֵϰ¿ÉÄÜÐèÒª±È½Ï³¤µÄÈÈÉíÆÚ£¬¶øÇÒÀÏÔ±¹¤Ò²¿ÉÄÜ»áÐèÒªÅàѵ¡£

ÕâÁ½¸ö·½·¨µÄ¹²ÓÐÎÊÌâÊǶ¼ÐèÒªºÜ³¤Ê±¼ä¡£Èç¹ûÄãµÄÒµÎñѸÃÍÔö³¤¶øÄãµÄʱ¼äµÈ²»¼°µÄ»°£¬Äã¾ÍÖ»ºÃ¹Íˮƽһ°ãµÄÈË£¬ËûÃǶÔÊý¾Ý¿â²»»áºÜÁ˽⣨2014ÄêµÄ¾­ÑéÊý¾Ý£©¡£»»¾ä»°Ëµ£¬¶ÔÓÚÒ»¸ö¿ìËÙ·¢Õ¹µÄ¹«Ë¾£¬¼¼Êõ±ÈÈ˸üÈÝÒ׸ı䡣

Ëæ×ÅÔÚ²»Í¬Ê±ÆÚµÄÒµÎñÐèÇó²»Í¬£¬³É¹¦µÄÒòËØÒ²»áÓ°ÏìÍŶӵļ¼ÊõÄÜÁ¦ÐèÇó¡£ÔÚ´´Òµ³õÆÚ£¬¹«Ë¾ÐèÒªÏֳɵġ¢¿ÉÒÔÁ¢¿ÌÉÏÊÖ²¢ÇÒ×ã¹»·½±ãʵÏÖÒµÎñÐèÇóµÄ¼¼Êõ¡£SQL¾ÍÊÇÆäÖÐÖ®Ò»£¬ÒòΪËü·Ç³£Áé»î£¨ÏëÔõôÓþÍÔõôÓã©£¬¶øÇÒÒªÕÒ¶®µãSQL֪ʶµÄÈËÒ²·Ç³£ÈÝÒס£

ºÃ£¬ÔÛÃÇ¿ª¹¤°É£¡Ðí¶à¡ª¡ªÒ²¿ÉÄÜÊÇ´ó¶àÊý¡ª¡ªµÄ¹«Ë¾¾Íµ½´ËΪֹÁË¡£¼´Ê¹ËûÃDZȽϳɹ¦ÁË£¬ÒµÎñÒ²·¢Õ¹ÁË£¬ËûÃÇ¿ÉÄÜ»¹ÊǺÜÄܽÓÊÜSQLÊý¾Ý¿âµÄ¸÷ÖÖȱµã¶ø²»Çó¸Ä±ä¡£Õâ²¢²»ÊÇÔÚ˵Uber¡£

ÓÐЩÐÒÔ˵ijõ´´¹«Ë¾×îÖջ᲻Âú×ãÓÚSQLµÄ¹¦ÄÜ¡£µ«µ½ÄÇʱ£¬ËûÃÇÒѾ­ÓÐÄÜÁ¦È¥½Ó´¥¸ü¶àµÄ£¨»òÕß˵ÀíÂÛÉÏÎÞÏ޵ģ¿£©×ÊÔ´£¬ÕâʱºòÓÐȤµÄʾͷ¢ÉúÁË£ºËûÃÇ·¢ÏÖÈç¹û°ÑÏÖÔÚÓÃ×ŵÄͨÓÃÊý¾Ý¿â»»³ÉÒ»¸öרÃÅΪ×Ô¼ºµÄÐèÇó¶ø¿ª·¢µÄϵͳµÄ»°£¬ÄǺܶàÎÊÌâ¾Í¶¼¿ÉÒÔ½â¾öÁË£¡Õâ¾ÍÊÇÒ»ÖÖеÄNoSQLÊý¾Ý¿âµ®ÉúµÄʱ¿Ì¡£ÔÚUber£¬ËûÃǽÐËüSchemaless¡£

¹ØÓÚUber¶ÔÓÚÊý¾Ý¿âµÄÑ¡ÐÍ

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒ²¢²»ÈÏΪUberºÍËûÃǵÄÎÄÕÂÖÐ˵µÄÒ»ÑùÓÃMySQLÌæ»»ÁËPostgreSQL¡£¿´ÆðÀ´ËûÃÇʵ¼ÊÉÏÊÇÓÃËûÃǵ͍Öƽâ¾ö·½°¸Ìæ»»ÁËPostgreSQL£¬¶øÇÒ½ö½öÊÇÓÃÁËMySQL/InnoDB×öµ×²ã´æ´¢¶øÒÑ¡£

¿´ÆðÀ´ÄÇÆªÎÄÕÂÖ»ÊÇÔÚ˵ΪʲôMySQL/InnoDB±ÈPostgreSQL¸üÊʺÏ×÷SchemalessµÄµ×²ã´æ´¢¡£¶ÔÓÚʹÓÃSchemalessµÄÈËÀ´Ëµ¿ÉÒÔÌýÈ¡ËûÃǵÄÒâ¼û¡£µ«²»ÐÒµÄÊÇ£¬ÎÄÕ²¢Ã»ÓÐ˵Ã÷°×ÕâÒ»µã£¬ÒòΪËüûÓÐÌáµ½ÊÇÔõÑùµÄÒµÎñ±ä»¯´ÙʹUberÒýÈëÁËSchemaless£¬ÒªÖªµÀÔÚ2013ÄêËûÃǸմÓMySQLÇ¨ÒÆµ½PostgreSQLÉÏ¡£

ºÃ¿Éϧ£¬ÏÖÔÚ¶ÁÕßÃÇÖ»ÁôÏÂÁ˸öPostgreSQLºÜÔã¸âµÄÓ¡Ïó¡­¡­

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

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

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

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

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

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

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