Ëæ×Å´óÊý¾ÝÕâ¸ö¸ÅÄîµÄÐËÆðÒÔ¼°ÕæÊµÐèÇóÔÚ¸÷¸öÐÐÒµµÄÂ䵨£¬ºÜ¶àÈ˶¼ÈÈÖÔÓÚÌÖÂÛ·Ö²¼Ê½Êý¾Ý¿â£¬½ñÌì¾ÍÕâ¸ö»°Ì⣬Ö÷Òª·ÖΪÈý²¿·Ö£ºµÚÒ»²¿·Ö½²Ò»Ï·ֲ¼Ê½Êý¾Ý¿âµÄ¹ýÈ¥ºÍÏÖ×´£¬Ï£Íû´ó¼ÒÄܶÔÕâ¸öÁìÓòÓÐÒ»¸öÈ«ÃæµÄÁ˽â;µÚ¶þ²¿·Ö½²Ò»ÏÂTiDBµÄ¼Ü¹¹ÒÔ¼°×î½üµÄһЩ½øÕ¹;×îºó½áºÏÎÒÃÇ¿ª·¢TiDB¹ý³ÌÖеÄһЩ˼¿¼½²Ò»Ï·ֲ¼Ê½Êý¾Ý¿âδÀ´¿ÉÄܵÄÇ÷ÊÆ¡£
Ò»¡¢·Ö²¼Ê½Êý¾Ý¿âµÄÀúÊ·ºÍÏÖ×´

1¡¢´Óµ¥»úÊý¾Ý¿â˵Æð
¹ØÏµÐÍÊý¾Ý¿âÆðÔ´×Ô1970Äê´ú£¬Æä×î»ù±¾µÄ¹¦ÄÜÓÐÁ½¸ö£º
°ÑÊý¾Ý´æÏÂÀ´£»
Âú×ãÓû§¶ÔÊý¾ÝµÄ¼ÆËãÐèÇó¡£
µÚÒ»µãÊÇ×î»ù±¾µÄÒªÇó£¬Èç¹ûÒ»¸öÊý¾Ý¿âû°ì·¨°ÑÊý¾Ý°²È«ÍêÕû´æÏÂÀ´£¬ÄÇôºóÐøµÄÈκι¦Äܶ¼Ã»ÓÐÒâÒå¡£µ±Âú×ãµÚÒ»µãºó£¬Óû§½ô½ÓמͻáÒªÇóÄܹ»Ê¹ÓÃÊý¾Ý£¬¿ÉÄÜÊǼòµ¥µÄ²éѯ£¬±ÈÈç°´ÕÕij¸öKeyÀ´²éÕÒValue;Ò²¿ÉÄÜÊǸ´ÔӵIJéѯ£¬±ÈÈçÒª¶ÔÊý¾Ý×ö¸´ÔӵľۺϲÙ×÷¡¢Á¬±í²Ù×÷¡¢·Ö×é²Ù×÷¡£ÍùÍùµÚ¶þµãÊÇÒ»¸ö±ÈµÚÒ»µã¸üÄÑÂú×ãµÄÐèÇó¡£
ÔÚÊý¾Ý¿â·¢Õ¹ÔçÆÚ½×¶Î£¬ÕâÁ½¸öÐèÇóÆäʵ²»ÄÑÂú×㣬±ÈÈçÓкܶàÓÅÐãµÄÉÌÒµÊý¾Ý¿â²úÆ·£¬ÈçOracle/DB2¡£ÔÚ1990ÄêÖ®ºó£¬³öÏÖÁË¿ªÔ´Êý¾Ý¿âMySQLºÍPostgreSQL¡£ÕâЩÊý¾Ý¿â²»¶ÏµØÌáÉýµ¥»úʵÀýÐÔÄÜ£¬ÔÙ¼ÓÉÏ×ñÑĦ¶û¶¨ÂɵÄÓ²¼þÌáÉýËÙ¶È£¬ÍùÍùÄܹ»ºÜºÃµØÖ§³ÅÒµÎñ·¢Õ¹¡£
½ÓÏÂÀ´£¬Ëæ×Å»¥ÁªÍøµÄ²»¶ÏÆÕ¼°ÌرðÊÇÒÆ¶¯»¥ÁªÍøµÄÐËÆð£¬Êý¾Ý¹æÄ£±¬Õ¨Ê½Ôö³¤£¬¶øÓ²¼þÕâЩÄêµÄ½ø²½ËÙ¶ÈÈ´ÔÚÖð½¥¼õÂý£¬ÈËÃÇÒ²ÔÚµ£ÐÄĦ¶û¶¨ÂÉ»áʧЧ¡£ÔÚ´ËÏû±Ë³¤µÄÇé¿öÏ£¬µ¥»úÊý¾Ý¿âÔ½À´Ô½ÄÑÒÔÂú×ãÓû§ÐèÇ󣬼´Ê¹Êǽ«Êý¾Ý±£´æÏÂÀ´Õâ¸ö×î»ù±¾µÄÐèÇó¡£
2¡¢·Ö²¼Ê½Êý¾Ý¿â
ËùÒÔ2005Äê×óÓÒ£¬ÈËÃÇ¿ªÊ¼Ì½Ë÷·Ö²¼Ê½Êý¾Ý¿â£¬´øÆðÁËNoSQLÕⲨÀ˳±¡£ÕâЩÊý¾Ý¿â½â¾öµÄÊ×ÒªÎÊÌâÊǵ¥»úÉÏÎÞ·¨±£´æÈ«²¿Êý¾Ý£¬ÆäÖÐÒÔHBase/Cassadra/MongoDBΪ´ú±í¡£ÎªÁËʵÏÖÈÝÁ¿µÄˮƽÀ©Õ¹£¬ÕâЩÊý¾Ý¿âÍùÍùÒª·ÅÆúÊÂÎñ£¬»òÕßÊÇÖ»Ìṩ¼òµ¥µÄKV½Ó¿Ú¡£´æ´¢Ä£Ð͵ļò»¯Îª´æ´¢ÏµÍ³µÄ¿ª·¢´øÀ´Á˱ãÀû£¬µ«ÊǽµµÍÁ˶ÔÒµÎñµÄÖ§³Å¡£
(1)NoSQLµÄ½ø»÷
HBaseÊÇÆäÖеĵäÐÍ´ú±í¡£HBaseÊÇHadoopÉú̬ÖеÄÖØÒª²úÆ·£¬Google BigTableµÄ¿ªÔ´ÊµÏÖ£¬ËùÒÔÕâÀïÏÈ˵һÏÂBigTable¡£
BigTableÊÇGoogleÄÚ²¿Ê¹Óõķֲ¼Ê½Êý¾Ý¿â£¬¹¹½¨ÔÚGFSµÄ»ù´¡ÉÏ£¬ÃÖ²¹ÁË·Ö²¼Ê½Îļþϵͳ¶ÔÓÚС¶ÔÏóµÄ²åÈë¡¢¸üС¢Ëæ»ú¶ÁÇëÇóµÄȱÏÝ¡£HBaseÒ²°´ÕÕÕâ¸ö¼Ü¹¹ÊµÏÖ£¬µ×²ã»ùÓÚHDFS¡£HBase±¾Éí²¢²»Êµ¼Ê´æ´¢Êý¾Ý£¬³Ö¾Ã»¯µÄÈÕÖ¾ºÍSST file´æ´¢ÔÚHDFSÉÏ£¬Region Serverͨ¹ý MemTable Ìṩ¿ìËٵIJéѯ£¬Ð´Èë¶¼ÊÇÏÈдÈÕÖ¾£¬ºǫ́½øÐÐCompact£¬½«Ëæ»úдת»»ÎªË³Ðòд¡£Êý¾Ýͨ¹ý Region ÔÚÂß¼ÉϽøÐзָ¸ºÔؾùºâͨ¹ýµ÷½Ú¸÷¸öRegion Server¸ºÔðµÄRegionÇø¼äʵÏÖ£¬RegionÔÚ³ÖÐøÐ´Èëºó£¬»á½øÐзÖÁÑ£¬È»ºó±»¸ºÔؾùºâ²ßÂÔµ÷¶Èµ½¶à¸öRegion ServerÉÏ¡£
Ç°ÃæÌáµ½ÁË£¬HBase±¾Éí²¢²»´æ´¢Êý¾Ý£¬ÕâÀïµÄRegion½öÊÇÂß¼ÉϵĸÅÄÊý¾Ý»¹ÊÇÒÔÎļþµÄÐÎʽ´æ´¢ÔÚHDFSÉÏ£¬HBase²¢²»¹ØÐĸ±±¾¸öÊý¡¢Î»ÖÃÒÔ¼°Ë®Æ½À©Õ¹ÎÊÌ⣬ÕâЩ¶¼ÒÀÀµÓÚHDFSʵÏÖ¡£ºÍBigTableÒ»Ñù£¬HBaseÌṩÐм¶µÄÒ»ÖÂÐÔ£¬´ÓCAPÀíÂ۵ĽǶÈÀ´¿´£¬ËüÊÇÒ»¸öCPµÄϵͳ£¬²¢ÇÒûÓиü½øÒ»²½Ìṩ ACID µÄ¿çÐÐÊÂÎñ£¬Ò²ÊǺÜÒź¶¡£
HBaseµÄÓÅÊÆÔÚÓÚͨ¹ýÀ©Õ¹Region Server¿ÉÒÔ¼¸ºõÏßÐÔÌáÉýϵͳµÄÍÌÍ£¬¼°HDFS±¾Éí¾Í¾ßÓеÄˮƽÀ©Õ¹ÄÜÁ¦£¬ÇÒÕû¸öϵͳ³ÉÊìÎȶ¨¡£µ«HBaseÒÀÈ»ÓÐһЩ²»×ã¡£Ê×ÏÈ£¬HadoopʹÓÃJava¿ª·¢£¬GCÑÓ³ÙÊÇÒ»¸öÎÞ·¨±ÜÃâÎÊÌ⣬Õâ¶ÔϵͳµÄÑÓ³ÙÔì³ÉһЩӰÏì¡£ÁíÍ⣬ÓÉÓÚHBase±¾Éí²¢²»´æ´¢Êý¾Ý£¬ºÍHDFSÖ®¼äµÄ½»»¥»á¶àÒ»²ãÐÔÄÜËðºÄ¡£µÚÈý£¬HBaseºÍBigTableÒ»Ñù£¬²¢²»Ö§³Ö¿çÐÐÊÂÎñ£¬ËùÒÔÔÚGoogleÄÚ²¿ÓÐÍŶӿª·¢ÁËMegaStore¡¢PercolatorÕâЩ»ùÓÚBigTableµÄÊÂÎñ²ã¡£Jeff Dean³ÐÈϺܺó»ÚûÓÐÔÚBigTableÖмÓÈë¿çÐÐÊÂÎñ£¬ÕâÒ²ÊÇSpanner³öÏÖµÄÒ»¸öÔÒò¡£
(2)RDMSµÄ¾ÈÊê
³ýÁËNoSQLÖ®Í⣬RDMSϵͳҲ×öÁ˲»ÉÙŬÁ¦À´ÊÊÓ¦ÒµÎñµÄ±ä»¯£¬Ò²¾ÍÊǹØÏµÐÍÊý¾Ý¿âµÄÖмä¼þºÍ·Ö¿â·Ö±í·½°¸¡£×öÒ»¿îÖмä¼þÐèÒª¿¼ÂǺܶ࣬±ÈÈç½âÎö SQL£¬½âÎö³öShardKey£¬È»ºó¸ù¾ÝShardKey·Ö·¢ÇëÇó£¬Ôٺϲ¢½á¹û¡£ÁíÍâÔÚÖмä¼þÕâ²ã»¹ÐèҪά»¤Session¼°ÊÂÎñ״̬£¬¶øÇÒ´ó¶àÊý·½°¸²¢²»Ö§³Ö¿çshardµÄÊÂÎñ£¬Õâ¾Í²»¿É±ÜÃâµØµ¼ÖÂÁËÒµÎñʹÓÃÆðÀ´»á±È½ÏÂé·³£¬ÐèÒª×Ô¼ºÎ¬»¤ÊÂÎñ״̬¡£´ËÍ⣬»¹Óж¯Ì¬µÄÀ©ÈÝËõÈݺÍ×Ô¶¯µÄ¹ÊÕϻָ´£¬ÔÚ¼¯Èº¹æÄ£Ô½À´Ô½´óµÄÇé¿öÏ£¬ÔËάºÍDDLµÄ¸´ÔÓ¶ÈÊÇÖ¸Êý¼¶ÉÏÉý¡£
¹úÄÚ¿ª·¢ÕßÔÚÕâ¸öÁìÓòÓйýºÜ¶àµÄÖøÃûµÄÏîÄ¿£¬±ÈÈç°¢ÀïµÄCobar¡¢TDDL£¬ºóÀ´ÉçÇø»ùÓÚCobar¸Ä½øµÄMyCAT£¬360¿ªÔ´µÄAtlasµÈ£¬¶¼ÊôÓÚÕâÒ»ÀàÖмä¼þ²úÆ·¡£ÔÚÖмä¼þÕâ¸ö·½°¸ÉÏÓÐÒ»¸öÖªÃûµÄ¿ªÔ´ÏîÄ¿ÊÇYoutubeµÄVitess£¬ÕâÊÇÒ»¸ö¼¯´ó³ÉµÄÖмä¼þ²úÆ·£¬ÄÚÖÃÁËÈÈÊý¾Ý»º´æ¡¢Ë®Æ½¶¯Ì¬·ÖƬ¡¢¶Áд·ÖÀëµÈ£¬µ«ÕâÒ²Ôì³ÉÁËÕû¸öÏîÄ¿·Ç³£¸´ÔÓ¡£
ÁíÍâÒ»¸öÖµµÃÒ»ÌáµÄÊÇPostgreSQL XCÕâ¸öÏîÄ¿£¬ÆäÕûÌåµÄ¼Ü¹¹ÓеãÏñÔçÆÚ°æ±¾µÄOceanBase£¬ÓÉÒ»¸öÖÐÑë½ÚµãÀ´´¦Àíе÷·Ö²¼Ê½ÊÂÎñ£¬Êý¾Ý·ÖÉ¢ÔÚ¸÷¸ö´æ´¢½ÚµãÉÏ£¬Ó¦¸ÃÊÇĿǰPG ÉçÇø×îºÃµÄ·Ö²¼Ê½À©Õ¹·½°¸£¬²»ÉÙÈËÔÚ»ùÓÚÕâ¸öÏîÄ¿×ö×Ô¼ºµÄϵͳ¡£
3¡¢NewSQLµÄ·¢Õ¹
2012~2013ÄêGoogle Ïà¼Ì·¢±íÁËSpannerºÍF1Á½Ì×ϵͳµÄÂÛÎÄ£¬ÈÃÒµ½çµÚÒ»´Î¿´µ½Á˹ØÏµÄ£ÐͺÍNoSQLµÄÀ©Õ¹ÐÔÔÚÒ»¸ö´ó¹æÄ£Éú²úϵͳÉÏÈںϵĿÉÄÜÐÔ¡£ Spanner ͨ¹ýʹÓÃÓ²¼þÉ豸(GPSʱÖÓ+Ô×ÓÖÓ)ÇÉÃîµØ½â¾öʱÖÓͬ²½µÄÎÊÌ⣬¶øÔÚ·Ö²¼Ê½ÏµÍ³ÀʱÖÓÕýÊÇ×îÈÃÈËÍ·Í´µÄÎÊÌâ¡£SpannerµÄÇ¿´óÖ®´¦ÔÚÓÚ¼´Ê¹Á½¸öÊý¾ÝÖÐÐĸôµÃ·Ç³£Ô¶£¬Ò²Äܱ£Ö¤Í¨¹ýTrueTime API»ñÈ¡µÄʱ¼äÎó²îÔÚÒ»¸öºÜСµÄ·¶Î§ÄÚ(10ms)£¬²¢ÇÒ²»ÐèҪͨѶ¡£SpannerµÄµ×²ãÈÔÈ»»ùÓÚ·Ö²¼Ê½Îļþϵͳ£¬²»¹ýÂÛÎÄÀïҲ˵ÊÇ¿ÉÒÔδÀ´ÓÅ»¯µÄµã¡£
GoogleµÄÄÚ²¿µÄÊý¾Ý¿â´æ´¢ÒµÎñ£¬´ó¶àÊÇ3~5¸±±¾£¬ÖØÒªµÄÊý¾ÝÐèÒª7¸±±¾£¬ÇÒÕâЩ¸±±¾±é²¼È«Çò¸÷´óÖÞµÄÊý¾ÝÖÐÐÄ£¬ÓÉÓÚÆÕ±éʹÓÃÁËPaxos£¬ÑÓ³ÙÊÇ¿ÉÒÔËõ¶Ìµ½Ò»¸ö¿ÉÒÔ½ÓÊܵķ¶Î§(дÈëÑÓ³Ù100msÒÔÉÏ)£¬ÁíÍâÓÉPaxos´øÀ´µÄAuto-FailoverÄÜÁ¦£¬¸üÊÇÈÃÕû¸ö¼¯Èº¼´Ê¹Êý¾ÝÖÐÐÄ̱»¾£¬ÒµÎñ²ã¶¼ÊÇ͸Ã÷ÎÞ¸ÐÖªµÄ¡£F1Êǹ¹½¨ÔÚSpannerÖ®ÉÏ£¬¶ÔÍâÌṩÁËSQL½Ó¿Ú£¬F1ÊÇÒ»¸ö·Ö²¼Ê½MPP SQL²ã£¬Æä±¾Éí²¢²»´æ´¢Êý¾Ý£¬¶øÊǽ«¿Í»§¶ËµÄSQL·Òë³É¶ÔKVµÄ²Ù×÷£¬µ÷ÓÃSpannerÀ´Íê³ÉÇëÇó¡£
SpannerºÍF1µÄ³öÏÖ±êÖ¾×ŵÚÒ»¸öNewSQLÔÚÉú²ú»·¾³ÖÐÌṩ·þÎñ£¬½«ÏÂÃæ¼¸¸ö¹¦ÄÜÔÚÒ»Ì×ϵͳÖÐÌṩ£º
SQLÖ§³Ö
ACIDÊÂÎñ
ˮƽÀ©Õ¹
Auto Failover
¶à»ú·¿ÒìµØÈÝÔÖ
ÕýÒòΪ¾ß±¸Èç´Ë¶àµÄÓÕÈËÌØÐÔ£¬ÔÚGoogleÄÚ²¿£¬´óÁ¿µÄÒµÎñÒѾ´ÓÔÀ´µÄ BigTableÇл»µ½SpannerÖ®ÉÏ¡£ÏàÐÅÕâ¶ÔÒµ½çµÄ˼·»áÓо޴óµÄÓ°Ï죬¾ÍÏñµ±ÄêµÄHadoopÒ»Ñù£¬GoogleµÄ»ù´¡Èí¼þµÄ¼¼ÊõÇ÷ÊÆÊÇ×ßÔÚÉçÇøÇ°ÃæµÄ¡£
Spanner/F1ÂÛÎÄÒýÆðÁËÉçÇøµÄ¹ã·ºµÄ¹Ø×¢£¬ºÜ¿ì¿ªÊ¼³öÏÖÁË×·ËæÕß¡£µÚÒ»¸öÍŶÓÊÇCockroachLabs×öµÄCockroachDB¡£CockroachDBµÄÉè¼ÆºÍSpannerºÜÏñ£¬µ«ÊÇûÓÐÑ¡ÔñTrueTime API £¬¶øÊÇʹÓÃHLC(Hybrid logical clock)£¬Ò²¾ÍÊÇNTP +Â߼ʱÖÓÀ´´úÌæTrueTimeʱ¼ä´Á£¬ÁíÍâCockroachDBÑ¡ÓÃRaft×öÊý¾Ý¸´ÖÆÐÒ飬µ×²ã´æ´¢Â䵨ÔÚRocksDBÖУ¬¶ÔÍâµÄ½Ó¿ÚÑ¡ÔñÁËPGÐÒé¡£
CockroachDBµÄ¼¼ÊõÑ¡ÐͱȽϼ¤½ø£¬±ÈÈçÒÀÀµÁËHLCÀ´×öÊÂÎñ£¬Ê±¼ä´ÁµÄ¾«È·¶È²¢Ã»Óа취×öµ½10msÄÚµÄÑÓ³Ù£¬ËùÒÔCommit WaitÐèÒªÓû§×Ô¼ºÖ¸¶¨£¬ÆäÑ¡ÔñÈ¡¾öÓÚÓû§µÄNTP·þÎñʱÖÓÎó²î£¬Õâµã¶ÔÓÚÓû§À´Ëµ·Ç³£²»ÓѺᣵ±È» CockroachDBµÄÕâЩ¼¼ÊõÑ¡ÔñÒ²´øÀ´Á˺ܺõÄÒ×ÓÃÐÔ£¬ËùÓÐÂß¼¶¼ÔÚÒ»¸ö×é¼þÖУ¬²¿Êð·Ç³£¼òµ¥£¬Õâ¸öÊǷdz£´óµÄÓŵ㡣
ÁíÒ»¸ö×·ËæÕß¾ÍÊÇÎÒÃÇ×öµÄTiDB¡£Õâ¸öÏîÄ¿ÒѾ¿ª·¢ÁËÁ½Äêʱ¼ä£¬µ±È»ÔÚ¿ªÊ¼¶¯ÊÖǰÎÒÃÇÒ²×¼±¸Á˺ܳ¤Ê±¼ä¡£½ÓÏÂÀ´ÎÒ»á½éÉÜÒ»ÏÂÕâ¸öÏîÄ¿¡£
¶þ¡¢TiDBµÄ¼Ü¹¹ºÍ×î½ü½øÕ¹
TiDB±¾ÖÊÉÏÊÇÒ»¸ö¸ü¼ÓÕýͳµÄSpannerºÍF1ʵÏÖ£¬²¢²»CockroachDBÄÇÑùÑ¡Ôñ½«SQLºÍKVÈںϣ¬¶øÊÇÏñSpannerºÍF1Ò»ÑùÑ¡Ôñ·ÖÀë¡£ÏÂÃæÊÇTiDBµÄ¼Ü¹¹Í¼£º

ÕâÑù·Ö²ãµÄ˼ÏëÒ²ÊǹᴩÕû¸öTiDBÏîĿʼÖյ쬶ÔÓÚ²âÊÔ£¬¹ö¶¯Éý¼¶ÒÔ¼°¸÷²ãµÄ¸´ÔÓ¶È¿ØÖÆ»á±È½ÏÓÐÓÅÊÆ£¬ÁíÍâTiDBÑ¡ÔñÁËMySQLÐÒéºÍÓï·¨µÄ¼æÈÝ£¬MySQLÉçÇøµÄORM¿ò¼Ü¡¢ÔËά¹¤¾ß£¬Ö±½Ó¿ÉÒÔÓ¦ÓÃÔÚTiDBÉÏ£¬ÁíÍâºÍ SpannerÒ»Ñù£¬TiDBÊÇÒ»¸öÎÞ״̬µÄMPP SQL Layer£¬Õû¸öϵͳµÄµ×²ãÊÇÒÀÀµ TiKV À´Ìṩ·Ö²¼Ê½´æ´¢ºÍ·Ö²¼Ê½ÊÂÎñµÄÖ§³Ö£¬TiKVµÄ·Ö²¼Ê½ÊÂÎñÄ£ÐͲÉÓõÄÊÇGoogle PercolatorµÄÄ£ÐÍ£¬µ«ÊÇÔÚ´ËÖ®ÉÏ×öÁ˺ܶàÓÅ»¯£¬PercolatorµÄÓŵãÊÇÈ¥ÖÐÐÄ»¯³Ì¶È·Ç³£¸ß£¬Õû¸ö¼ÌÐø²»ÐèÒªÒ»¸ö¶ÀÁ¢µÄÊÂÎñ¹ÜÀíÄ£¿é£¬ÊÂÎñÌύ״̬ÕâЩÐÅÏ¢ÆäʵÊǾùÔÈ·ÖÉ¢ÔÚϵͳµÄ¸÷¸ökeyµÄmetaÖУ¬Õû¸öÄ£ÐÍΨһÒÀÀµµÄÊÇÒ»¸öÊÚʱ·þÎñÆ÷£¬ÔÚÎÒÃǵÄϵͳÉÏ£¬¼«ÏÞÇé¿öÕâ¸öÊÚʱ·þÎñÆ÷ÿÃëÄÜ·ÖÅä 400wÒÔÉϸöµ¥µ÷µÝÔöµÄʱ¼ä´Á£¬´ó¶àÊýÇé¿ö»ù±¾¹»ÓÃÁË(±Ï¾¹ÓÐGoogleÁ¿¼¶µÄ³¡¾°²¢²»¶à¼û)£¬Í¬Ê±ÔÚTiKVÖУ¬Õâ¸öÊÚʱ·þÎñ±¾ÉíÊǸ߿ÉÓõģ¬Ò²²»´æÔÚµ¥µã¹ÊÕϵÄÎÊÌâ¡£

ÉÏÃæÊÇTiKVµÄ¼Ü¹¹Í¼¡£TiKVºÍCockroachDBÒ»ÑùÒ²ÊÇÑ¡ÔñÁËRaft×÷ΪÕû¸öÊý¾Ý¿âµÄ»ù´¡£¬²»Ò»ÑùµÄÊÇ£¬TiKVÕûÌå²ÉÓÃRustÓïÑÔ¿ª·¢£¬×÷Ϊһ¸öûÓÐGCºÍ RuntimeµÄÓïÑÔ£¬ÔÚÐÔÄÜÉÏ¿ÉÒÔÍÚ¾òµÄDZÁ¦»á¸ü´ó¡£²»Í¬TiKVʵÀýÉϵĶà¸ö¸±±¾Ò»Æð¹¹³ÉÁËÒ»¸öRaft Group£¬PD¸ºÔð¶Ô¸±±¾µÄλÖýøÐе÷¶È£¬Í¨¹ýÅäÖõ÷¶È²ßÂÔ£¬¿ÉÒÔ±£Ö¤Ò»¸öRaft GroupµÄ¶à¸ö¸±±¾²»»á±£´æÔÚͬһ̨»úÆ÷/»ú¼Ü/»ú·¿ÖС£
³ýÁ˺ËÐĵÄTiDB¡¢TiKVÖ®Í⣬ÎÒÃÇ»¹ÌṩÁ˲»ÉÙÒ×ÓõŤ¾ß£¬±ãÓÚÓû§×öÊý¾ÝÇ¨ÒÆºÍ±¸·Ý¡£±ÈÈçÎÒÃÇÌṩµÄSyncer£¬²»µ«Äܽ«µ¥¸öMySQLʵÀýÖеÄÊý¾Ýͬ²½µ½TiDB£¬»¹Äܽ«¶à¸öMySQLʵÀýÖеÄÊý¾Ý»ã×ܵ½Ò»¸öTiDB¼¯ÈºÖУ¬ÉõÖÁÊǽ«ÒѾ·Ö¿â·Ö±íµÄÊý¾ÝÔٺϿâºÏ±í¡£ÕâÑùÊý¾ÝµÄͬ²½·½Ê½¸ü¼ÓÁé»îºÃÓá£
TiDBĿǰ¼´½«·¢²¼RC3°æ±¾£¬Ô¤¼ÆÁùÔ·ÝÄܹ»·¢²¼GA°æ±¾¡£ÔÚ¼´½«µ½À´µÄ RC3°æ±¾ÖУ¬¶ÔMySQL¼æÈÝÐÔ¡¢SQLÓÅ»¯Æ÷¡¢ÏµÍ³Îȶ¨ÐÔ¡¢ÐÔÄÜ×öÁË´óÁ¿µÄ¹¤×÷¡£¶ÔÓÚOLTP³¡¾°£¬ÖصãÓÅ»¯Ð´ÈëÐÔÄÜ¡£ÁíÍâÌṩÁËȨÏÞ¹ÜÀí¹¦ÄÜ£¬Óû§¿ÉÒÔ°´ÕÕMySQLµÄȨÏÞ¹ÜÀí·½Ê½¿ØÖÆÊý¾Ý·ÃÎÊȨÏÞ¡£¶ÔÓÚOLAP³¡¾°£¬Ò²¶ÔÓÅ»¯Æ÷×öÁË´óÁ¿µÄ¹¤×÷£¬°üÀ¨¸ü¶àÓï¾äµÄÓÅ»¯¡¢Ö§³ÖSortMergeJoinËã×Ó¡¢IndexLookupJoinËã×Ó¡£ÁíÍâ¶ÔÄÚ´æÊ¹ÓÃÒ²×öÁË´óÁ¿µÄÓÅ»¯£¬Ò»Ð©³¡¾°Ï£¬ÄÚ´æÊ¹ÓÃϽµ75%¡£
³ýÁËTiDB±¾ÉíµÄÓÅ»¯Ö®Í⣬ÎÒÃÇ»¹ÔÚ×öÒ»¸öÐµĹ¤³Ì£¬Ãû×Ö½ÐTiSpark¡£¼òµ¥À´½²£¬¾ÍÊÇÈÃSpark¸üºÃµØ½ÓÈëTiDB¡£ÏÖÔÚÆäʵSparkÒѾ¿ÉÒÔͨ¹ýJDBC½Ó¿Ú¶ÁÈ¡TiDBÖеÄÊý¾Ý£¬µ«ÊÇÕâÀïÓÐÁ½¸öÎÊÌ⣺1. Ö»ÄÜͨ¹ýµ¥¸öTiDB½Úµã¶ÁÈ¡Êý¾ÝÇÒÊý¾ÝÐèÒª´ÓTiKVÖо¹ý TiDB ÖÐת¡£2. ²»ÄܺÍSparkµÄÓÅ»¯Æ÷Ïà½áºÏ£¬ÎÒÃÇÆÚÍûÄܺÍSparkµÄÓÅ»¯Æ÷ÕûºÏ£¬½«Filter¡¢¾ÛºÏÄÜͨ¹ýTiKVµÄ·Ö²¼Ê½¼ÆËãÄÜÁ¦ÌáËÙ¡£Õâ¸öÏîÄ¿ÒѾ¿ªÊ¼¿ª·¢£¬Ô¤¼Æ½üÆÚ¿ªÔ´£¬ÎåÔ·ݾÍÄÜÓеÚÒ»¸ö°æ±¾¡£
Èý¡¢·Ö²¼Ê½Êý¾Ý¿âµÄδÀ´Ç÷ÊÆ
¹ØÓÚδÀ´£¬ÎÒ¾õµÃδÀ´µÄÊý¾Ý¿â»áÓм¸¸öÇ÷ÊÆ£¬Ò²ÊÇTiDBÏîĿ׷ÇóµÄÄ¿±ê£º
1¡¢Êý¾Ý¿â»áËæ×ÅÒµÎñÔÆ»¯£¬Î´À´Ò»ÇеÄÒµÎñ¶¼»áÅÜÔÚÔÆ¶Ë£¬²»¹ÜÊÇ˽ÓÐÔÆ»òÕß¹«ÓÐÔÆ£¬ÔËάÍŶӽӴ¥µÄ¿ÉÄÜÔÙÒ²²»ÊÇÕæÊµµÄÎïÀí»ú£¬¶øÊÇÒ»¸ö¸ö¸ôÀëµÄÈÝÆ÷»òÕß¡¸¼ÆËã×ÊÔ´¡¹£¬Õâ¶ÔÊý¾Ý¿âÒ²ÊÇÒ»¸öÌôÕ½£¬ÒòΪÊý¾Ý¿âÌìÉú¾ÍÊÇÓÐ״̬µÄ£¬Êý¾Ý×ÜÊÇÒª´æ´¢ÔÚÎïÀíµÄ´ÅÅÌÉÏ£¬¶øÊý¾ÝÒÆ¶¯µÄ´ú¼Û±ÈÒÆ¶¯ÈÝÆ÷µÄ´ú¼Û¿ÉÄÜ´óºÜ¶à¡£
2¡¢¶à×â»§¼¼Êõ»á³ÉΪ±êÅ䣬һ¸ö´óÊý¾Ý¿â³ÐÔØÒ»ÇеÄÒµÎñ£¬Êý¾ÝÔڵײã´òͨ£¬Éϲãͨ¹ýȨÏÞ£¬ÈÝÆ÷µÈ¼¼Êõ½øÐиôÀ룬µ«ÊÇÊý¾ÝµÄ´òͨºÍÀ©Õ¹»á±äµÃÒì³£¼òµ¥£¬½áºÏµÚÒ»µãÌáµ½µÄÔÆ»¯£¬ÒµÎñ²ã¿ÉÒÔÔÙÒ²²»ÓùØÐÄÎïÀí»úµÄÈÝÁ¿ºÍÍØÆË£¬Ö»ÐèÒªÈÏΪµ×²ãÊÇÒ»¸öÎÞÇî´óµÄÊý¾Ý¿âƽ̨¼´¿É£¬²»ÓÃÔÙµ£Ðĵ¥»úÈÝÁ¿ºÍ¸ºÔؾùºâµÈÎÊÌâ¡£
3¡¢OLAPºÍOLTPÒµÎñ»áÈںϣ¬Óû§½«Êý¾Ý´æ´¢½øÈ¥ºó£¬ÐèÒª±È½Ï·½±ã¸ßЧµÄ·½Ê½·ÃÎÊÕâ¿éÊý¾Ý£¬µ«ÊÇOLTPºÍOLAPÔÚSQLÓÅ»¯Æ÷/Ö´ÐÐÆ÷Õâ²ãµÄʵÏÖÒ»¶¨ÊÇǧ²îÍò±ðµÄ¡£ÒÔÍùµÄʵÏÖÖУ¬Óû§ÍùÍùÊÇͨ¹ýETL¹¤¾ß½«Êý¾Ý´ÓOLTPÊý¾Ý¿âͬ²½µ½OLAPÊý¾Ý¿â£¬ÕâÒ»·½ÃæÔì³ÉÁË×ÊÔ´µÄÀË·Ñ£¬ÁíÒ»·½ÃæÒ²½µµÍÁËOLAPµÄʵʱÐÔ¡£¶ÔÓÚÓû§¶øÑÔ£¬Èç¹ûÄÜʹÓÃͬһÌ×±ê×¼µÄÓï·¨ºÍ¹æÔòÀ´½øÐÐÊý¾ÝµÄ¶ÁдºÍ·ÖÎö£¬»áÓиüºÃµÄÌåÑé¡£
4¡¢ÔÚδÀ´·Ö²¼Ê½Êý¾Ý¿âϵͳÉÏ£¬Ö÷´ÓÈÕ־ͬ²½ÕâÑùÂäºóµÄ±¸·Ý·½Ê½»á±»Multi-Paxos / RaftÕâÑù¸üÇ¿µÄ·Ö²¼Ê½Ò»ÖÂÐÔËã·¨Ìæ´ú£¬È˹¤µÄÊý¾Ý¿âÔËάÔÚ¹ÜÀí´ó¹æÄ£Êý¾Ý¿â¼¯ÈºÊ±ÊDz»¿ÉÄܵģ¬ËùÓеĹÊÕϻָ´ºÍ¸ß¿ÉÓö¼½«ÊǸ߶È×Ô¶¯»¯µÄ¡£
|