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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
TiDB ¼¼ÊõÄÚÄ»
 
×÷Õߣº ÉêÀù
  2666  次浏览      28
2019-12-3
 
±à¼­ÍƼö:
ÎÄÕ½éÉÜÁËTiKV µÄһЩÉè¼ÆË¼ÏëºÍ»ù±¾¸ÅÄî¡¢ÔªÐÅÏ¢µÄ´æ´¢¡¢¡¢SQL ²ãµÄһЩ¹¦ÄÜÒÔ¼°¹ØÓÚ PD µÄÐÅÏ¢µÈ£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ôpingcap£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

ÒýÑÔ

Êý¾Ý¿â¡¢²Ù×÷ϵͳºÍ±àÒëÆ÷²¢³ÆÎªÈý´óϵͳ£¬¿ÉÒÔ˵ÊÇÕû¸ö¼ÆËã»úÈí¼þµÄ»ùʯ¡£ÆäÖÐÊý¾Ý¿â¸ü¿¿½üÓ¦Óò㣬ÊǺܶàÒµÎñµÄÖ§³Å¡£ÕâÒ»ÁìÓò¾­¹ýÁ˼¸Ê®ÄêµÄ·¢Õ¹£¬²»¶ÏµÄÓÐеĽøÕ¹¡£

ºÜ¶àÈËÓùýÊý¾Ý¿â£¬µ«ÊǺÜÉÙÓÐÈËʵÏÖ¹ýÒ»¸öÊý¾Ý¿â£¬ÌرðÊÇʵÏÖÒ»¸ö·Ö²¼Ê½Êý¾Ý¿â¡£Á˽âÊý¾Ý¿âµÄʵÏÖÔ­ÀíºÍϸ½Ú£¬Ò»·½Ãæ¿ÉÒÔÌá¸ß¸öÈ˼¼Êõ£¬¶Ô¹¹½¨ÆäËûϵͳÓаïÖú£¬ÁíÒ»·½ÃæÒ²ÓÐÀûÓÚÓúÃÊý¾Ý¿â¡£

Ñо¿Ò»Ãż¼Êõ×îºÃµÄ·½·¨ÊÇÑо¿ÆäÖÐÒ»¸ö¿ªÔ´ÏîÄ¿£¬Êý¾Ý¿âÒ²²»ÀýÍâ¡£µ¥»úÊý¾Ý¿âÁìÓòÓкܶàºÜºÃµÄ¿ªÔ´ÏîÄ¿£¬ÆäÖÐ MySQL ºÍ PostgreSQL ÊÇÆäÖÐÖªÃû¶È×î¸ßµÄÁ½¸ö£¬²»ÉÙͬѧ¶¼¿´¹ýÕâÁ½¸öÏîÄ¿µÄ´úÂë¡£µ«ÊÇ·Ö²¼Ê½Êý¾Ý¿â·½Ã棬ºÃµÄ¿ªÔ´ÏîÄ¿²¢²»¶à¡£ TiDB Ŀǰ»ñµÃÁ˹㷺µÄ¹Ø×¢£¬ÌرðÊÇһЩ¼¼Êõ°®ºÃÕߣ¬Ï£ÍûÄܹ»²ÎÓëÕâ¸öÏîÄ¿¡£ÓÉÓÚ·Ö²¼Ê½Êý¾Ý¿â×ÔÉíµÄ¸´ÔÓÐÔ£¬ºÜ¶àÈ˲¢²»ÄܺܺõÄÀí½âÕû¸öÏîÄ¿£¬ËùÒÔÎÒÏ£ÍûÄÜдһЩÎÄÕ£¬×Ô¶¥ÏòÏ£¬ÓÉdzÈëÉ½²Êö TiDB µÄһЩ¼¼ÊõÔ­Àí£¬°üÀ¨Óû§¿É¼ûµÄ¼¼ÊõÒÔ¼°´óÁ¿Òþ²ØÔÚ SQL ½çÃæºóÓû§²»¿É¼ûµÄ¼¼Êõµã¡£

±£´æÊý¾Ý

Êý¾Ý¿â×î¸ù±¾µÄ¹¦ÄÜÊÇÄܰÑÊý¾Ý´æÏÂÀ´£¬ËùÒÔÎÒÃÇ´ÓÕâÀ↑ʼ¡£

±£´æÊý¾ÝµÄ·½·¨ºÜ¶à£¬×î¼òµ¥µÄ·½·¨ÊÇÖ±½ÓÔÚÄÚ´æÖн¨Ò»¸öÊý¾Ý½á¹¹£¬±£´æÓû§·¢À´µÄÊý¾Ý¡£±ÈÈçÓÃÒ»¸öÊý×飬ÿµ±ÊÕµ½Ò»ÌõÊý¾Ý¾ÍÏòÊý×éÖÐ×·¼ÓÒ»Ìõ¼Ç¼¡£Õâ¸ö·½°¸Ê®·Ö¼òµ¥£¬ÄÜÂú×ã×î»ù±¾£¬²¢ÇÒÐÔÄܿ϶¨»áºÜºÃ£¬µ«Êdzý´ËÖ®ÍâÈ´ÊÇ©¶´°Ù³ö£¬ÆäÖÐ×î´óµÄÎÊÌâÊÇÊý¾ÝÍêÈ«ÔÚÄÚ´æÖУ¬Ò»µ©Í£»ú»òÕßÊÇ·þÎñÖØÆô£¬Êý¾Ý¾Í»áÓÀ¾Ã¶ªÊ§¡£

ΪÁ˽â¾öÊý¾Ý¶ªÊ§ÎÊÌ⣬ÎÒÃÇ¿ÉÒÔ°ÑÊý¾Ý·ÅÔÚ·ÇÒ×ʧ´æ´¢½éÖÊ£¨±ÈÈçÓ²ÅÌ£©ÖС£¸Ä½øµÄ·½°¸ÊÇÔÚ´ÅÅÌÉÏ´´½¨Ò»¸öÎļþ£¬ÊÕµ½Ò»ÌõÊý¾Ý£¬¾ÍÔÚÎļþÖÐ Append Ò»ÐС£OK£¬ÎÒÃÇÏÖÔÚÓÐÁËÒ»¸öÄܳ־û¯´æ´¢Êý¾ÝµÄ·½°¸¡£µ«ÊÇ»¹²»¹»ºÃ£¬¼ÙÉèÕâ¿é´ÅÅ̳öÏÖÁË»µµÀÄØ£¿ÎÒÃÇ¿ÉÒÔ×ö RAID £¨Redundant Array of Independent Disks£©£¬Ìṩµ¥»úÈßÓà´æ´¢¡£Èç¹ûÕų̂»úÆ÷¶¼¹ÒÁËÄØ£¿±ÈÈç³öÏÖÁË»ðÔÖ£¬RAID Ò²±£²»×¡ÕâЩÊý¾Ý¡£ÎÒÃÇ»¹¿ÉÒÔ½«´æ´¢¸ÄÓÃÍøÂç´æ´¢£¬»òÕßÊÇͨ¹ýÓ²¼þ»òÕßÈí¼þ½øÐд洢¸´ÖÆ¡£µ½ÕâÀïËÆºõÎÒÃÇÒѾ­½â¾öÁËÊý¾Ý°²È«ÎÊÌ⣬¿ÉÒÔËÉÒ»¿ÚÆøÁË¡£But£¬×ö¸´Öƹý³ÌÖÐÊÇ·ñÄܱ£Ö¤¸±±¾Ö®¼äµÄÒ»ÖÂÐÔ£¿Ò²¾ÍÊÇÔÚ±£Ö¤Êý¾Ý²»¶ªµÄǰÌáÏ£¬»¹Òª±£Ö¤Êý¾Ý²»´í¡£±£Ö¤Êý¾Ý²»¶ª²»´íÖ»ÊÇÒ»Ïî×î»ù±¾µÄÒªÇ󣬻¹Óиü¶àÁîÈËÍ·ÌÛµÄÎÊÌâµÈ´ý½â¾ö£º

ÄÜ·ñÖ§³Ö¿çÊý¾ÝÖÐÐĵÄÈÝÔÖ£¿

дÈëËÙ¶ÈÊÇ·ñ¹»¿ì£¿

Êý¾Ý±£´æÏÂÀ´ºó£¬ÊÇ·ñ·½±ã¶ÁÈ¡£¿

±£´æµÄÊý¾ÝÈçºÎÐ޸ģ¿ÈçºÎÖ§³Ö²¢·¢µÄÐ޸ģ¿

ÈçºÎÔ­×ÓµØÐ޸ĶàÌõ¼Ç¼£¿

ÕâЩÎÊÌâÿһÏî¶¼·Ç³£ÄÑ£¬µ«ÊÇÒª×öÒ»¸öÓÅÐãµÄÊý¾Ý´æ´¢ÏµÍ³£¬±ØÐëÒª½â¾öÉÏÊöµÄÿһ¸öÄÑÌâ¡£ ΪÁ˽â¾öÊý¾Ý´æ´¢ÎÊÌ⣬ÎÒÃÇ¿ª·¢ÁË TiKV Õâ¸öÏîÄ¿¡£½ÓÏÂÀ´ÎÒÏò´ó¼Ò½éÉÜһϠTiKV µÄһЩÉè¼ÆË¼ÏëºÍ»ù±¾¸ÅÄî¡£

Key-Value

×÷Ϊ±£´æÊý¾ÝµÄϵͳ£¬Ê×ÏÈÒª¾ö¶¨µÄÊÇÊý¾ÝµÄ´æ´¢Ä£ÐÍ£¬Ò²¾ÍÊÇÊý¾ÝÒÔʲôÑùµÄÐÎʽ±£´æÏÂÀ´¡£TiKV µÄÑ¡ÔñÊÇ Key-Value Ä£ÐÍ£¬²¢ÇÒÌṩÓÐÐò±éÀú·½·¨¡£¼òµ¥À´½²£¬¿ÉÒÔ½« TiKV ¿´×öÒ»¸ö¾Þ´óµÄ Map£¬ÆäÖÐ Key ºÍ Value ¶¼ÊÇԭʼµÄ Byte Êý×飬ÔÚÕâ¸ö Map ÖУ¬Key °´ÕÕ Byte Êý×é×ܵÄԭʼ¶þ½øÖƱÈÌØÎ»±È½Ï˳ÐòÅÅÁС£ ´ó¼ÒÕâÀïÐèÒª¶Ô TiKV ¼ÇסÁ½µã£º

ÕâÊÇÒ»¸ö¾Þ´óµÄ Map£¬Ò²¾ÍÊÇ´æ´¢µÄÊÇ Key-Value pair

Õâ¸ö Map ÖÐµÄ Key-Value pair °´ÕÕ Key µÄ¶þ½øÖÆË³ÐòÓÐÐò£¬Ò²¾ÍÊÇÎÒÃÇ¿ÉÒÔ Seek µ½Ä³Ò»¸ö Key µÄλÖã¬È»ºó²»¶ÏµÄµ÷Óà Next ·½·¨ÒÔµÝÔöµÄ˳Ðò»ñÈ¡±ÈÕâ¸ö Key ´óµÄ Key-Value

½²ÁËÕâô¶à£¬ÓÐÈË¿ÉÄÜ»áÎÊÁË£¬ÕâÀï½²µÄ´æ´¢Ä£ÐÍºÍ SQL ÖбíÊÇʲô¹ØÏµ£¿ÔÚÕâÀïÓÐÒ»¼þÖØÒªµÄÊÂÇéҪ˵Ëı飺

ÕâÀïµÄ´æ´¢Ä£ÐÍºÍ SQL ÖÐµÄ Table Î޹أ¡ ÕâÀïµÄ´æ´¢Ä£ÐÍºÍ SQL ÖÐµÄ Table Î޹أ¡ ÕâÀïµÄ´æ´¢Ä£ÐÍºÍ SQL ÖÐµÄ Table Î޹أ¡ ÕâÀïµÄ´æ´¢Ä£ÐÍºÍ SQL ÖÐµÄ Table Î޹أ¡

ÏÖÔÚÈÃÎÒÃÇÍü¼Ç SQL ÖеÄÈκθÅÄרעÓÚÌÖÂÛÈçºÎʵÏÖ TiKV ÕâÑùÒ»¸ö¸ßÐÔÄܸ߿ɿ¿ÐԵľ޴óµÄ£¨·Ö²¼Ê½µÄ£© Map¡£

RocksDB

Èκγ־û¯µÄ´æ´¢ÒýÇæ£¬Êý¾ÝÖÕ¹éÒª±£´æÔÚ´ÅÅÌÉÏ£¬TiKV Ò²²»ÀýÍâ¡£µ«ÊÇ TiKV ûÓÐÑ¡ÔñÖ±½ÓÏò´ÅÅÌÉÏдÊý¾Ý£¬¶øÊǰÑÊý¾Ý±£´æÔÚ RocksDB ÖУ¬¾ßÌåµÄÊý¾ÝÂ䵨ÓÉ RocksDB ¸ºÔð¡£Õâ¸öÑ¡ÔñµÄÔ­ÒòÊÇ¿ª·¢Ò»¸öµ¥»ú´æ´¢ÒýÇæ¹¤×÷Á¿ºÜ´ó£¬ÌرðÊÇÒª×öÒ»¸ö¸ßÐÔÄܵĵ¥»úÒýÇæ£¬ÐèÒª×ö¸÷ÖÖϸÖµÄÓÅ»¯£¬¶ø RocksDB ÊÇÒ»¸ö·Ç³£ÓÅÐãµÄ¿ªÔ´µÄµ¥»ú´æ´¢ÒýÇæ£¬¿ÉÒÔÂú×ãÎÒÃǶԵ¥»úÒýÇæµÄ¸÷ÖÖÒªÇ󣬶øÇÒ»¹ÓÐ Facebook µÄÍŶÓÔÚ×ö³ÖÐøµÄÓÅ»¯£¬ÕâÑùÎÒÃÇֻͶÈëºÜÉٵľ«Á¦£¬¾ÍÄÜÏíÊܵ½Ò»¸öÊ®·ÖÇ¿´óÇÒÔÚ²»¶Ï½ø²½µÄµ¥»úÒýÇæ¡£µ±È»£¬ÎÒÃÇҲΪ RocksDB ¹±Ï×ÁËһЩ´úÂ룬ϣÍûÕâ¸öÏîÄ¿ÄÜÔ½×öÔ½ºÃ¡£ÕâÀï¿ÉÒÔ¼òµ¥µÄÈÏΪ RocksDB ÊÇÒ»¸öµ¥»úµÄ Key-Value Map¡£

Raft

ºÃÁË£¬ÍòÀﳤÕ÷µÚÒ»²½ÒѾ­Âõ³öÈ¥ÁË£¬ÎÒÃÇÒѾ­ÎªÊý¾ÝÕÒµ½Ò»¸ö¸ßЧ¿É¿¿µÄ±¾µØ´æ´¢·½°¸¡£Ë×»°Ëµ£¬ÍòÊ¿ªÍ·ÄÑ£¬È»ºóÖмäÄÑ£¬×îºó½áβÄÑ¡£½ÓÏÂÀ´ÎÒÃÇÃæÁÙÒ»¼þ¸üÄѵÄÊÂÇ飺ÈçºÎ±£Ö¤µ¥»úʧЧµÄÇé¿öÏ£¬Êý¾Ý²»¶ªÊ§£¬²»³ö´í£¿¼òµ¥À´Ëµ£¬ÎÒÃÇÐèÒªÏë°ì·¨°ÑÊý¾Ý¸´ÖƵ½¶ą̀»úÆ÷ÉÏ£¬ÕâÑùһ̨»úÆ÷¹ÒÁË£¬ÎÒÃÇ»¹ÓÐÆäËûµÄ»úÆ÷Éϵĸ±±¾£»¸´ÔÓÀ´Ëµ£¬ÎÒÃÇ»¹ÐèÒªÕâ¸ö¸´ÖÆ·½°¸Êǿɿ¿¡¢¸ßЧ²¢ÇÒÄÜ´¦Àí¸±±¾Ê§Ð§µÄÇé¿ö¡£ÌýÉÏÈ¥±È½ÏÄÑ£¬µ«ÊǺÃÔÚÎÒÃÇÓÐ Raft ЭÒé¡£Raft ÊÇÒ»¸öÒ»ÖÂÐÔËã·¨£¬ËüºÍ Paxos µÈ¼Û£¬µ«ÊǸü¼ÓÒ×ÓÚÀí½â¡£Raft µÄÂÛÎÄ£¬¸ÐÐËȤµÄ¿ÉÒÔ¿´Ò»Ï¡£±¾ÎÄÖ»»á¶Ô Raft ×öÒ»¸ö¼òÒªµÄ½éÉÜ£¬Ï¸½ÚÎÊÌâ¿ÉÒԲο¼ÂÛÎÄ¡£ÁíÍâÌáÒ»µã£¬Raft ÂÛÎÄÖ»ÊÇÒ»¸ö»ù±¾·½°¸£¬Ñϸñ°´ÕÕÂÛÎÄʵÏÖ£¬ÐÔÄÜ»áºÜ²î£¬ÎÒÃÇ¶Ô Raft ЭÒéµÄʵÏÖ×öÁË´óÁ¿µÄÓÅ»¯.

Raft ÊÇÒ»¸öÒ»ÖÂÐÔЭÒ飬Ìṩ¼¸¸öÖØÒªµÄ¹¦ÄÜ£º

Leader Ñ¡¾Ù

³ÉÔ±±ä¸ü

ÈÕÖ¾¸´ÖÆ

TiKV ÀûÓà Raft À´×öÊý¾Ý¸´ÖÆ£¬Ã¿¸öÊý¾Ý±ä¸ü¶¼»áÂäµØÎªÒ»Ìõ Raft ÈÕÖ¾£¬Í¨¹ý Raft µÄÈÕÖ¾¸´Öƹ¦ÄÜ£¬½«Êý¾Ý°²È«¿É¿¿µØÍ¬²½µ½ Group µÄ¶àÊý½ÚµãÖС£

µ½ÕâÀïÎÒÃÇ×ܽáһϣ¬Í¨¹ýµ¥»úµÄ RocksDB£¬ÎÒÃÇ¿ÉÒÔ½«Êý¾Ý¿ìËٵش洢ÔÚ´ÅÅÌÉÏ£»Í¨¹ý Raft£¬ÎÒÃÇ¿ÉÒÔ½«Êý¾Ý¸´ÖƵ½¶ą̀»úÆ÷ÉÏ£¬ÒÔ·Àµ¥»úʧЧ¡£Êý¾ÝµÄдÈëÊÇͨ¹ý Raft ÕâÒ»²ãµÄ½Ó¿ÚдÈ룬¶ø²»ÊÇÖ±½Óд RocksDB¡£Í¨¹ýʵÏÖ Raft£¬ÎÒÃÇÓµÓÐÁËÒ»¸ö·Ö²¼Ê½µÄ KV£¬ÏÖÔÚÔÙÒ²²»Óõ£ÐÄij̨»úÆ÷¹ÒµôÁË¡£

Region

½²µ½ÕâÀÎÒÃÇ¿ÉÒÔÌáµ½Ò»¸ö ·Ç³£ÖØÒªµÄ¸ÅÄRegion¡£Õâ¸ö¸ÅÄîÊÇÀí½âºóÐøÒ»ÏµÁлúÖÆµÄ»ù´¡£¬Çë×ÐϸÔĶÁÕâÒ»½Ú¡£

Ç°ÃæÌáµ½£¬ÎÒÃǽ« TiKV ¿´×öÒ»¸ö¾Þ´óµÄÓÐÐòµÄ KV Map£¬ÄÇôΪÁËʵÏÖ´æ´¢µÄˮƽÀ©Õ¹£¬ÎÒÃÇÐèÒª½«Êý¾Ý·ÖÉ¢ÔÚ¶ą̀»úÆ÷ÉÏ¡£ÕâÀïÌáµ½µÄÊý¾Ý·ÖÉ¢ÔÚ¶ą̀»úÆ÷ÉÏºÍ Raft µÄÊý¾Ý¸´ÖƲ»ÊÇÒ»¸ö¸ÅÄÔÚÕâÒ»½ÚÎÒÃÇÏÈÍü¼Ç Raft£¬¼ÙÉèËùÓеÄÊý¾Ý¶¼Ö»ÓÐÒ»¸ö¸±±¾£¬ÕâÑù¸üÈÝÒ×Àí½â¡£

¶ÔÓÚÒ»¸ö KV ϵͳ£¬½«Êý¾Ý·ÖÉ¢ÔÚ¶ą̀»úÆ÷ÉÏÓÐÁ½ÖֱȽϵäÐ͵ķ½°¸£ºÒ»ÖÖÊǰ´ÕÕ Key ×ö Hash£¬¸ù¾Ý Hash ֵѡÔñ¶ÔÓ¦µÄ´æ´¢½Úµã£»ÁíÒ»ÖÖÊÇ·Ö Range£¬Ä³Ò»¶ÎÁ¬ÐøµÄ Key ¶¼±£´æÔÚÒ»¸ö´æ´¢½ÚµãÉÏ¡£TiKV Ñ¡ÔñÁ˵ڶþÖÖ·½Ê½£¬½«Õû¸ö Key-Value ¿Õ¼ä·Ö³ÉºÜ¶à¶Î£¬Ã¿Ò»¶ÎÊÇһϵÁÐÁ¬ÐøµÄ Key£¬ÎÒÃǽ«Ã¿Ò»¶Î½Ð×öÒ»¸ö Region£¬²¢ÇÒÎÒÃǻᾡÁ¿±£³Öÿ¸ö Region Öб£´æµÄÊý¾Ý²»³¬¹ýÒ»¶¨µÄ´óС(Õâ¸ö´óС¿ÉÒÔÅäÖã¬Ä¿Ç°Ä¬ÈÏÊÇ 64mb)¡£Ã¿Ò»¸ö Region ¶¼¿ÉÒÔÓà StartKey µ½ EndKey ÕâÑùÒ»¸ö×ó±ÕÓÒ¿ªÇø¼äÀ´ÃèÊö¡£

×¢Ò⣬ÕâÀïµÄ Region »¹ÊÇºÍ SQL Öеıíûʲô¹ØÏµ£¡ Çë¸÷λ¼ÌÐøÍü¼Ç SQL£¬Ö»Ì¸ KV¡£ ½«Êý¾Ý»®·Ö³É Region ºó£¬ÎÒÃǽ«»á×ö Á½¼þÖØÒªµÄÊÂÇ飺

ÒÔ Region Ϊµ¥Î»£¬½«Êý¾Ý·ÖÉ¢ÔÚ¼¯ÈºÖÐËùÓеĽڵãÉÏ£¬²¢ÇÒ¾¡Á¿±£Ö¤Ã¿¸ö½ÚµãÉÏ·þÎñµÄ Region ÊýÁ¿²î²»¶à

ÒÔ Region Ϊµ¥Î»×ö Raft µÄ¸´ÖƺͳÉÔ±¹ÜÀí

ÕâÁ½µã·Ç³£ÖØÒª£¬ÎÒÃÇÒ»µãÒ»µãÀ´Ëµ¡£

ÏÈ¿´µÚÒ»µã£¬Êý¾Ý°´ÕÕ Key Çзֳɺܶà Region£¬Ã¿¸ö Region µÄÊý¾ÝÖ»»á±£´æÔÚÒ»¸ö½ÚµãÉÏÃæ¡£ÎÒÃǵÄϵͳ»áÓÐÒ»¸ö×é¼þÀ´¸ºÔ𽫠Region ¾¡¿ÉÄܾùÔȵÄÉ¢²¼ÔÚ¼¯ÈºÖÐËùÓеĽڵãÉÏ£¬ÕâÑùÒ»·½ÃæÊµÏÖÁË´æ´¢ÈÝÁ¿µÄˮƽÀ©Õ¹£¨Ôö¼ÓеĽáµãºó£¬»á×Ô¶¯½«ÆäËû½ÚµãÉ쵀 Region µ÷¶È¹ýÀ´£©£¬ÁíÒ»·½ÃæÒ²ÊµÏÖÁ˸ºÔؾùºâ£¨²»»á³öÏÖij¸ö½ÚµãÓкܶàÊý¾Ý£¬ÆäËû½ÚµãÉÏûʲôÊý¾ÝµÄÇé¿ö£©¡£Í¬Ê±ÎªÁ˱£Ö¤Éϲã¿Í»§¶ËÄܹ»·ÃÎÊËùÐèÒªµÄÊý¾Ý£¬ÎÒÃǵÄϵͳÖÐÒ²»áÓÐÒ»¸ö×é¼þ¼Ç¼ Region ÔÚ½ÚµãÉÏÃæµÄ·Ö²¼Çé¿ö£¬Ò²¾ÍÊÇͨ¹ýÈÎÒâÒ»¸ö Key ¾ÍÄܲéѯµ½Õâ¸ö Key ÔÚÄĸö Region ÖУ¬ÒÔ¼°Õâ¸ö Region ĿǰÔÚÄĸö½ÚµãÉÏ¡£ÖÁÓÚÊÇÄĸö×é¼þ¸ºÔðÕâÁ½Ï×÷£¬»áÔÚºóÐø½éÉÜ¡£

¶ÔÓÚµÚ¶þµã£¬TiKV ÊÇÒÔ Region Ϊµ¥Î»×öÊý¾ÝµÄ¸´ÖÆ£¬Ò²¾ÍÊÇÒ»¸ö Region µÄÊý¾Ý»á±£´æ¶à¸ö¸±±¾£¬ÎÒÃǽ«Ã¿Ò»¸ö¸±±¾½Ð×öÒ»¸ö Replica¡£Replica Ö®¼äÊÇͨ¹ý Raft À´±£³ÖÊý¾ÝµÄÒ»Ö£¨ÖÕÓÚÌáµ½ÁË Raft£©£¬Ò»¸ö Region µÄ¶à¸ö Replica »á±£´æÔÚ²»Í¬µÄ½ÚµãÉÏ£¬¹¹³ÉÒ»¸ö Raft Group¡£ÆäÖÐÒ»¸ö Replica »á×÷ΪÕâ¸ö Group µÄ Leader£¬ÆäËûµÄ Replica ×÷Ϊ Follower¡£ËùÓеĶÁºÍд¶¼ÊÇͨ¹ý Leader ½øÐУ¬ÔÙÓÉ Leader ¸´ÖƸø Follower¡£ ´ó¼ÒÀí½âÁË Region Ö®ºó£¬Ó¦¸Ã¿ÉÒÔÀí½âÏÂÃæÕâÕÅͼ£º

ÎÒÃÇÒÔ Region Ϊµ¥Î»×öÊý¾ÝµÄ·ÖÉ¢ºÍ¸´ÖÆ£¬¾ÍÓÐÁËÒ»¸ö·Ö²¼Ê½µÄ¾ß±¸Ò»¶¨ÈÝÔÖÄÜÁ¦µÄ KeyValue ϵͳ£¬²»ÓÃÔÙµ£ÐÄÊý¾Ý´æ²»Ï£¬»òÕßÊÇ´ÅÅ̹ÊÕ϶ªÊ§Êý¾ÝµÄÎÊÌâ¡£ÕâÒѾ­ºÜ Cool£¬µ«ÊÇ»¹²»¹»ÍêÃÀ£¬ÎÒÃÇÐèÒª¸ü¶àµÄ¹¦ÄÜ¡£

MVCC

ºÜ¶àÊý¾Ý¿â¶¼»áʵÏÖ¶à°æ±¾¿ØÖÆ£¨MVCC£©£¬TiKV Ò²²»ÀýÍâ¡£ÉèÏëÕâÑùµÄ³¡¾°£¬Á½¸ö Client ͬʱȥÐÞ¸ÄÒ»¸ö Key µÄ Value£¬Èç¹ûûÓÐ MVCC£¬¾ÍÐèÒª¶ÔÊý¾ÝÉÏËø£¬ÔÚ·Ö²¼Ê½³¡¾°Ï£¬¿ÉÄÜ»á´øÀ´ÐÔÄÜÒÔ¼°ËÀËøÎÊÌâ¡£ TiKV µÄ MVCC ʵÏÖÊÇͨ¹ýÔÚ Key ºóÃæÌí¼Ó Version À´ÊµÏÖ£¬¼òµ¥À´Ëµ£¬Ã»ÓÐ MVCC ֮ǰ£¬¿ÉÒÔ°Ñ TiKV ¿´×öÕâÑùµÄ£º

Key1 -> Value
Key2 -> Value
¡­¡­
KeyN -> Value

ÓÐÁË MVCC Ö®ºó£¬TiKV µÄ Key ÅÅÁÐÊÇÕâÑùµÄ£º

Key1-Version3 -> Value
Key1-Version2 -> Value
Key1-Version1 -> Value
¡­¡­
Key2-Version4 -> Value
Key2-Version3 -> Value
Key2-Version2 -> Value
Key2-Version1 -> Value
¡­¡­
KeyN-Version2 -> Value
KeyN-Version1 -> Value
¡­¡­

×¢Ò⣬¶ÔÓÚͬһ¸ö Key µÄ¶à¸ö°æ±¾£¬ÎÒÃǰѰ汾ºÅ½Ï´óµÄ·ÅÔÚÇ°Ãæ£¬°æ±¾ºÅСµÄ·ÅÔÚºóÃæ£¨»ØÒäһϠKey-Value Ò»½ÚÎÒÃǽéÉܹýµÄ Key ÊÇÓÐÐòµÄÅÅÁУ©£¬ÕâÑùµ±Óû§Í¨¹ýÒ»¸ö Key + Version À´»ñÈ¡ Value µÄʱºò£¬¿ÉÒÔ½« Key ºÍ Version ¹¹Ôì³ö MVCC µÄ Key£¬Ò²¾ÍÊÇ Key-Version¡£È»ºó¿ÉÒÔÖ±½Ó Seek(Key-Version)£¬¶¨Î»µ½µÚÒ»¸ö´óÓÚµÈÓÚÕâ¸ö Key-Version µÄλÖá£

ÊÂÎñ

TiKV µÄÊÂÎñ²ÉÓõÄÊÇ Percolator Ä£ÐÍ£¬²¢ÇÒ×öÁË´óÁ¿µÄÓÅ»¯¡£ÊÂÎñµÄϸ½ÚÕâÀï²»ÏêÊö£¬´ó¼Ò¿ÉÒԲο¼ÂÛÎÄÒÔ¼°ÎÒÃÇµÄÆäËûÎÄÕ¡£ÕâÀïÖ»ÌáÒ»µã£¬TiKV µÄÊÂÎñ²ÉÓÃÀÖ¹ÛËø£¬ÊÂÎñµÄÖ´Ðйý³ÌÖУ¬²»»á¼ì²âдд³åÍ»£¬Ö»ÓÐÔÚÌá½»¹ý³ÌÖУ¬²Å»á×ö³åÍ»¼ì²â£¬³åÍ»µÄË«·½ÖбȽÏÔçÍê³ÉÌá½»µÄ»áдÈë³É¹¦£¬ÁíÒ»·½»á³¢ÊÔÖØÐÂÖ´ÐÐÕû¸öÊÂÎñ¡£µ±ÒµÎñµÄдÈë³åÍ»²»ÑÏÖØµÄÇé¿öÏ£¬ÕâÖÖÄ£ÐÍÐÔÄÜ»áºÜºÃ£¬±ÈÈçËæ»ú¸üбíÖÐijһÐеÄÊý¾Ý£¬²¢ÇÒ±íºÜ´ó¡£µ«ÊÇÈç¹ûÒµÎñµÄдÈë³åÍ»ÑÏÖØ£¬ÐÔÄܾͻáºÜ²î£¬¾ÙÒ»¸ö¼«¶ËµÄÀý×Ó£¬¾ÍÊǼÆÊýÆ÷£¬¶à¸ö¿Í»§¶ËͬʱÐÞ¸ÄÉÙÁ¿ÐУ¬µ¼Ö³åÍ»ÑÏÖØµÄ£¬Ôì³É´óÁ¿µÄÎÞÐ§ÖØÊÔ¡£

ÆäËû

µ½ÕâÀÎÒÃÇÒѾ­Á˽âÁË TiKV µÄ»ù±¾¸ÅÄîºÍһЩϸ½Ú£¬Àí½âÁËÕâ¸ö·Ö²¼Ê½´øÊÂÎñµÄ KV ÒýÇæµÄ·Ö²ã½á¹¹ÒÔ¼°ÈçºÎʵÏֶั±¾ÈÝ´í¡£ÏÂÒ»½Ú»á½éÉÜÈçºÎÔÚ KV µÄ´æ´¢Ä£ÐÍÖ®ÉÏ£¬¹¹½¨ SQL ²ã¡£

¹ØÏµÄ£Ð͵½ Key-Value Ä£Ð͵ÄÓ³Éä

ÔÚÕâÎÒÃǽ«¹ØÏµÄ£Ðͼòµ¥Àí½âΪ Table ºÍ SQL Óï¾ä£¬ÄÇôÎÊÌâ±äΪÈçºÎÔÚ KV ½á¹¹Éϱ£´æ Table ÒÔ¼°ÈçºÎÔÚ KV ½á¹¹ÉÏÔËÐÐ SQL Óï¾ä¡£ ¼ÙÉèÎÒÃÇÓÐÕâÑùÒ»¸ö±íµÄ¶¨Ò壺

CREATE TABLE User {
ID int,
Name varchar(20),
Role varchar(20),
Age int,
PRIMARY KEY (ID),
Key idxAge (age)
};

SQL ºÍ KV ½á¹¹Ö®¼ä´æÔÚ¾Þ´óµÄÇø±ð£¬ÄÇôÈçºÎÄܹ»·½±ã¸ßЧµØ½øÐÐÓ³É䣬¾Í³ÉΪһ¸öºÜÖØÒªµÄÎÊÌâ¡£Ò»¸öºÃµÄÓ³Éä·½°¸±ØÐëÓÐÀûÓÚ¶ÔÊý¾Ý²Ù×÷µÄÐèÇó¡£ÄÇôÎÒÃÇÏÈ¿´Ò»Ï¶ÔÊý¾ÝµÄ²Ù×÷ÓÐÄÄЩÐèÇ󣬷ֱðÓÐÄÄÐ©ÌØµã¡£

¶ÔÓÚÒ»¸ö Table À´Ëµ£¬ÐèÒª´æ´¢µÄÊý¾Ý°üÀ¨Èý²¿·Ö£º

±íµÄÔªÐÅÏ¢

Table ÖÐµÄ Row

Ë÷ÒýÊý¾Ý

±íµÄÔªÐÅÏ¢ÎÒÃÇÔÝʱ²»ÌÖÂÛ£¬»áÓÐרÃŵÄÕ½ÚÀ´½éÉÜ¡£ ¶ÔÓÚ Row£¬¿ÉÒÔÑ¡ÔñÐдæ»òÕßÁд棬ÕâÁ½ÖÖ¸÷ÓÐÓÅȱµã¡£TiDB ÃæÏòµÄÊ×ҪĿ±êÊÇ OLTP ÒµÎñ£¬ÕâÀàÒµÎñÐèÒªÖ§³Ö¿ìËٵضÁÈ¡¡¢±£´æ¡¢Ð޸ġ¢É¾³ýÒ»ÐÐÊý¾Ý£¬ËùÒÔ²ÉÓÃÐдæÊDZȽϺÏÊʵġ£

¶ÔÓÚ Index£¬TiDB ²»Ö¹ÐèÒªÖ§³Ö Primary Index£¬»¹ÐèÒªÖ§³Ö Secondary Index¡£Index µÄ×÷Óõĸ¨Öú²éѯ£¬ÌáÉý²éѯÐÔÄÜ£¬ÒÔ¼°±£Ö¤Ä³Ð© Constraint¡£²éѯµÄʱºòÓÐÁ½ÖÖģʽ£¬Ò»ÖÖÊǵã²é£¬±ÈÈçͨ¹ý Primary Key »òÕß Unique Key µÄµÈÖµÌõ¼þ½øÐвéѯ£¬Èç select name from user where id=1; £¬ÕâÖÖÐèҪͨ¹ýË÷Òý¿ìËÙ¶¨Î»µ½Ä³Ò»ÐÐÊý¾Ý£»ÁíÒ»ÖÖÊÇ Range ²éѯ£¬Èç select name from user where age > 30 and age < 35;£¬Õâ¸öʱºòÐèҪͨ¹ýidxAgeË÷Òý²éѯ age ÔÚ 30 ºÍ 35 Ö®¼äµÄÄÇЩÊý¾Ý¡£Index »¹·ÖΪ Unique Index ºÍ ·Ç Unique Index£¬ÕâÁ½ÖÖ¶¼ÐèÒªÖ§³Ö¡£

·ÖÎöÍêÐèÒª´æ´¢µÄÊý¾ÝµÄÌØµã£¬ÎÒÃÇÔÙ¿´¿´¶ÔÕâЩÊý¾ÝµÄ²Ù×÷ÐèÇó£¬Ö÷Òª¿¼ÂÇ Insert/Update/Delete/Select ÕâËÄÖÖÓï¾ä¡£

¶ÔÓÚ Insert Óï¾ä£¬ÐèÒª½« Row дÈë KV£¬²¢ÇÒ½¨Á¢ºÃË÷ÒýÊý¾Ý¡£

¶ÔÓÚ Update Óï¾ä£¬ÐèÒª½« Row ¸üеÄͬʱ£¬¸üÐÂË÷ÒýÊý¾Ý£¨Èç¹ûÓбØÒª£©¡£

¶ÔÓÚ Delete Óï¾ä£¬ÐèÒªÔÚɾ³ý Row µÄͬʱ£¬½«Ë÷ÒýҲɾ³ý¡£

ÉÏÃæÈý¸öÓï¾ä´¦ÀíÆðÀ´¶¼ºÜ¼òµ¥¡£¶ÔÓÚ Select Óï¾ä£¬Çé¿ö»á¸´ÔÓһЩ¡£Ê×ÏÈÎÒÃÇÐèÒªÄܹ»¼òµ¥¿ìËٵضÁȡһÐÐÊý¾Ý£¬ËùÒÔÿ¸ö Row ÐèÒªÓÐÒ»¸ö ID £¨ÏÔʾ»òÒþʽµÄ ID£©¡£Æä´Î¿ÉÄÜ»á¶ÁÈ¡Á¬Ðø¶àÐÐÊý¾Ý£¬±ÈÈç Select * from user;¡£×îºó»¹ÓÐͨ¹ýË÷Òý¶ÁÈ¡Êý¾ÝµÄÐèÇ󣬶ÔË÷ÒýµÄʹÓÿÉÄÜÊǵã²é»òÕßÊÇ·¶Î§²éѯ¡£

´óÖµÄÐèÇóÒѾ­·ÖÎöÍêÁË£¬ÏÖÔÚÈÃÎÒÃÇ¿´¿´ÊÖÀïÓÐʲô¿ÉÒÔÓõģºÒ»¸öÈ«¾ÖÓÐÐòµÄ·Ö²¼Ê½ Key-Value ÒýÇæ¡£È«¾ÖÓÐÐòÕâÒ»µãÖØÒª£¬¿ÉÒÔ°ïÖúÎÒÃǽâ¾ö²»ÉÙÎÊÌâ¡£±ÈÈç¶ÔÓÚ¿ìËÙ»ñȡһÐÐÊý¾Ý£¬¼ÙÉèÎÒÃÇÄܹ»¹¹Ôì³öijһ¸ö»òÕßij¼¸¸ö Key£¬¶¨Î»µ½ÕâÒ»ÐУ¬ÎÒÃǾÍÄÜÀûÓà TiKV ÌṩµÄ Seek ·½·¨¿ìËÙ¶¨Î»µ½ÕâÒ»ÐÐÊý¾ÝËùÔÚλÖá£ÔÙ±ÈÈç¶ÔÓÚɨÃèÈ«±íµÄÐèÇó£¬Èç¹ûÄܹ»Ó³ÉäΪһ¸ö Key µÄ Range£¬´Ó StartKey ɨÃèµ½ EndKey£¬ÄÇô¾Í¿ÉÒÔ¼òµ¥µÄͨ¹ýÕâÖÖ·½Ê½»ñµÃÈ«±íÊý¾Ý¡£²Ù×÷ Index Êý¾ÝÒ²ÊÇÀàËÆµÄ˼·¡£½ÓÏÂÀ´ÈÃÎÒÃÇ¿´¿´ TiDB ÊÇÈçºÎ×öµÄ¡£

TiDB ¶Ôÿ¸ö±í·ÖÅäÒ»¸ö TableID£¬Ã¿Ò»¸öË÷Òý¶¼»á·ÖÅäÒ»¸ö IndexID£¬Ã¿Ò»ÐзÖÅäÒ»¸ö RowID£¨Èç¹û±íÓÐÕûÊýÐ굀 Primary Key£¬ÄÇô»áÓà Primary Key µÄÖµµ±×ö RowID£©£¬ÆäÖÐ TableID ÔÚÕû¸ö¼¯ÈºÄÚΨһ£¬IndexID/RowID ÔÚ±íÄÚΨһ£¬ÕâЩ ID ¶¼ÊÇ int64 ÀàÐÍ¡£

ÿÐÐÊý¾Ý°´ÕÕÈçϹæÔò½øÐбàÂë³É Key-Value pair£º

Key: tablePrefix{tableID}_recordPrefixSep{rowID}
Value: [col1, col2, col3, col4]

ÆäÖÐ Key µÄ tablePrefix/recordPrefixSep ¶¼ÊÇÌØ¶¨µÄ×Ö·û´®³£Á¿£¬ÓÃÓÚÔÚ KV ¿Õ¼äÄÚÇø·ÖÆäËûÊý¾Ý¡£

¶ÔÓÚ Index Êý¾Ý£¬»á°´ÕÕÈçϹæÔò±àÂë³É Key-Value pair£º

Key: tablePrefix{tableID}_indexPrefixSep {indexID}_indexedColumnsValue
Value: rowID

Index Êý¾Ý»¹ÐèÒª¿¼ÂÇ Unique Index ºÍ·Ç Unique Index Á½ÖÖÇé¿ö£¬¶ÔÓÚ Unique Index£¬¿ÉÒÔ°´ÕÕÉÏÊö±àÂë¹æÔò¡£µ«ÊǶÔÓÚ·Ç Unique Index£¬Í¨¹ýÕâÖÖ±àÂë²¢²»Äܹ¹Ôì³öΨһµÄ Key£¬ÒòΪͬһ¸ö Index µÄ tablePrefix{tableID}_indexPrefixSep{indexID} ¶¼Ò»Ñù£¬¿ÉÄÜÓжàÐÐÊý¾ÝµÄ ColumnsValue ÊÇÒ»ÑùµÄ£¬ËùÒÔ¶ÔÓÚ·Ç Unique Index µÄ±àÂë×öÁËÒ»µãµ÷Õû£º

Key: tablePrefix{tableID}_indexPrefixSep {indexID}_indexedColumnsValue_rowID
Value: null

ÕâÑùÄܹ»¶ÔË÷ÒýÖеÄÿÐÐÊý¾Ý¹¹Ôì³öΨһµÄ Key¡£ ×¢ÒâÉÏÊö±àÂë¹æÔòÖÐµÄ Key ÀïÃæµÄ¸÷ÖÖ xxPrefix ¶¼ÊÇ×Ö·û´®³£Á¿£¬×÷Óö¼ÊÇÇø·ÖÃüÃû¿Õ¼ä£¬ÒÔÃⲻͬÀàÐ͵ÄÊý¾ÝÖ®¼äÏ໥³åÍ»£¬¶¨ÒåÈçÏ£º

var(
tablePrefix = []byte{'t'}
recordPrefixSep = []byte("_r")
indexPrefixSep = []byte("_i")
)

ÁíÍâÇë´ó¼Ò×¢Ò⣬ÉÏÊö·½°¸ÖУ¬ÎÞÂÛÊÇ Row »¹ÊÇ Index µÄ Key ±àÂë·½°¸£¬Ò»¸ö Table ÄÚ²¿ËùÓÐµÄ Row ¶¼ÓÐÏàͬµÄǰ׺£¬Ò»¸ö Index µÄÊý¾ÝÒ²¶¼ÓÐÏàͬµÄǰ׺¡£ÕâÑù¾ßÌåÏàͬµÄǰ׺µÄÊý¾Ý£¬ÔÚ TiKV µÄ Key ¿Õ¼äÄÚ£¬ÊÇÅÅÁÐÔÚÒ»Æð¡£Í¬Ê±Ö»ÒªÎÒÃÇСÐĵØÉè¼Æºó׺²¿·ÖµÄ±àÂë·½°¸£¬±£Ö¤±àÂëǰºÍ±àÂëºóµÄ±È½Ï¹ØÏµ²»±ä£¬ÄÇô¾Í¿ÉÒÔ½« Row »òÕß Index Êý¾ÝÓÐÐòµØ±£´æÔÚ TiKV ÖС£ÕâÖÖ±£Ö¤±àÂëǰºÍ±àÂëºóµÄ±È½Ï¹ØÏµ²»±ä µÄ·½°¸ÎÒÃdzÆÎª Memcomparable£¬¶ÔÓÚÈκÎÀàÐ͵ÄÖµ£¬Á½¸ö¶ÔÏó±àÂëǰµÄԭʼÀàÐͱȽϽá¹û£¬ºÍ±àÂë³É byte Êý×éºó£¨×¢Ò⣬TiKV ÖÐµÄ Key ºÍ Value ¶¼ÊÇԭʼµÄ byte Êý×飩µÄ±È½Ï½á¹û±£³ÖÒ»Ö¡£¾ßÌåµÄ±àÂë·½°¸²Î¼û TiDB µÄ codec °ü¡£²ÉÓÃÕâÖÖ±àÂëºó£¬Ò»¸ö±íµÄËùÓÐ Row Êý¾Ý¾Í»á°´ÕÕ RowID µÄ˳ÐòÅÅÁÐÔÚ TiKV µÄ Key ¿Õ¼äÖУ¬Ä³Ò»¸ö Index µÄÊý¾ÝÒ²»á°´ÕÕ Index µÄ ColumnValue ˳ÐòÅÅÁÐÔÚ Key ¿Õ¼äÄÚ¡£

ÏÖÔÚÎÒÃǽáºÏ¿ªÊ¼Ìáµ½µÄÐèÇóÒÔ¼° TiDB µÄÓ³Éä·½°¸À´¿´Ò»Ï£¬Õâ¸ö·½°¸ÊÇ·ñÄÜÂú×ãÐèÇó¡£Ê×ÏÈÎÒÃÇͨ¹ýÕâ¸öÓ³Éä·½°¸£¬½« Row ºÍ Index Êý¾Ý¶¼×ª»»Îª Key-Value Êý¾Ý£¬ÇÒÿһÐС¢Ã¿Ò»ÌõË÷ÒýÊý¾Ý¶¼ÊÇÓÐΨһµÄ Key¡£Æä´Î£¬ÕâÖÖÓ³Éä·½°¸¶ÔÓÚµã²é¡¢·¶Î§²éѯ¶¼ºÜÓѺã¬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ׵ع¹Ôì³öijÐС¢Ä³ÌõË÷ÒýËù¶ÔÓ¦µÄ Key£¬»òÕßÊÇijһ¿éÏàÁÚµÄÐС¢ÏàÁÚµÄË÷ÒýÖµËù¶ÔÓ¦µÄ Key ·¶Î§¡£×îºó£¬ÔÚ±£Ö¤±íÖеÄһЩ Constraint µÄʱºò£¬¿ÉÒÔͨ¹ý¹¹Ôì²¢¼ì²éij¸ö Key ÊÇ·ñ´æÔÚÀ´ÅжÏÊÇ·ñÄܹ»Âú×ãÏàÓ¦µÄ Constraint¡£

ÖÁ´ËÎÒÃÇÒѾ­ÁÄÍêÁËÈçºÎ½« Table Ó³Éäµ½ KV ÉÏÃæ£¬ÕâÀïÔپٸö¼òµ¥µÄÀý×Ó£¬±ãÓÚ´ó¼ÒÀí½â£¬»¹ÊÇÒÔÉÏÃæµÄ±í½á¹¹ÎªÀý¡£¼ÙÉè±íÖÐÓÐ 3 ÐÐÊý¾Ý£º

1, "TiDB", "SQL Layer", 10
2, "TiKV", "KV Engine", 20
3, "PD", "Manager", 30

ÄÇôÊ×ÏÈÿÐÐÊý¾Ý¶¼»áÓ³ÉäΪһ¸ö Key-Value pair£¬×¢ÒâÕâ¸ö±íÓÐÒ»¸ö Int ÀàÐ굀 Primary Key£¬ËùÒÔ RowID µÄÖµ¼´ÎªÕâ¸ö Primary Key µÄÖµ¡£¼ÙÉèÕâ¸ö±íµÄ Table ID Ϊ 10£¬Æä Row µÄÊý¾ÝΪ£º

t10_r1 --> ["TiDB", "SQL Layer", 10]
t10_r2 --> ["TiKV", "KV Engine", 20]
t10_r3 --> ["PD", "Manager", 30]

³ýÁË Primary Key Ö®Í⣬Õâ¸ö±í»¹ÓÐÒ»¸ö Index£¬¼ÙÉèÕâ¸ö Index µÄ ID Ϊ 1£¬ÔòÆäÊý¾ÝΪ£º

t10_i1_10_1 --> null
t10_i1_20_2 --> null
t10_i1_30_3 --> null

´ó¼Ò¿ÉÒÔ½áºÏÉÏÃæµÄ±àÂë¹æÔòÀ´Àí½âÕâ¸öÀý×Ó£¬Ï£Íû´ó¼ÒÄÜÀí½âÎÒÃÇΪʲôѡÔñÁËÕâ¸öÓ³Éä·½°¸£¬ÕâÑù×öµÄÄ¿µÄÊÇʲô¡£

ÔªÐÅÏ¢¹ÜÀí

ÉϽڽéÉÜÁ˱íÖеÄÊý¾ÝºÍË÷ÒýÊÇÈçºÎÓ³ÉäΪ KV£¬±¾½Ú½éÉÜÒ»ÏÂÔªÐÅÏ¢µÄ´æ´¢¡£Database/Table ¶¼ÓÐÔªÐÅÏ¢£¬Ò²¾ÍÊÇÆä¶¨ÒåÒÔ¼°¸÷ÏîÊôÐÔ£¬ÕâЩÐÅÏ¢Ò²ÐèÒª³Ö¾Ã»¯£¬ÎÒÃÇÒ²½«ÕâЩÐÅÏ¢´æ´¢ÔÚ TiKV ÖС£Ã¿¸ö Database/Table ¶¼±»·ÖÅäÁËÒ»¸öΨһµÄ ID£¬Õâ¸ö ID ×÷ΪΨһ±êʶ£¬²¢ÇÒÔÚ±àÂëΪ Key-Value ʱ£¬Õâ¸ö ID ¶¼»á±àÂëµ½ Key ÖУ¬ÔÙ¼ÓÉÏ m_ ǰ׺¡£ÕâÑù¿ÉÒÔ¹¹Ôì³öÒ»¸ö Key£¬Value Öд洢µÄÊÇÐòÁл¯ºóµÄÔªÐÅÏ¢¡£ ³ý´ËÖ®Í⣬»¹ÓÐÒ»¸öרÃÅµÄ Key-Value ´æ´¢µ±Ç° Schema ÐÅÏ¢µÄ°æ±¾¡£TiDB ʹÓà Google F1 µÄ Online Schema ±ä¸üËã·¨£¬ÓÐÒ»¸öºǫ́Ïß³ÌÔÚ²»¶ÏµÄ¼ì²é TiKV ÉÏÃæ´æ´¢µÄ Schema °æ±¾ÊÇ·ñ·¢Éú±ä»¯£¬²¢ÇÒ±£Ö¤ÔÚÒ»¶¨Ê±¼äÄÚÒ»¶¨Äܹ»»ñÈ¡°æ±¾µÄ±ä»¯£¨Èç¹ûȷʵ·¢ÉúÁ˱仯£©¡£

SQL on KV ¼Ü¹¹

TiDB µÄÕûÌå¼Ü¹¹ÈçÏÂͼËùʾ

TiKV Cluster Ö÷Òª×÷ÓÃÊÇ×÷Ϊ KV ÒýÇæ´æ´¢Êý¾Ý£¬ÉÏÃæÒѾ­½éÉܹýÁËϸ½Ú£¬ÕâÀï²»ÔÙ·óÊö¡£±¾´ÎÖ÷Òª½éÉÜ SQL ²ã£¬Ò²¾ÍÊÇ TiDB Servers ÕâÒ»²ã£¬ÕâÒ»²ãµÄ½Úµã¶¼ÊÇÎÞ״̬µÄ½Úµã£¬±¾Éí²¢²»´æ´¢Êý¾Ý£¬½ÚµãÖ®¼äÍêÈ«¶ÔµÈ¡£TiDB Server ÕâÒ»²ã×îÖØÒªµÄ¹¤×÷ÊÇ´¦ÀíÓû§ÇëÇó£¬Ö´ÐÐ SQL ÔËËãÂß¼­£¬½ÓÏÂÀ´ÎÒÃÇ×öһЩ¼òµ¥µÄ½éÉÜ¡£

SQL ÔËËã

Àí½âÁË SQL µ½ KV µÄÓ³Éä·½°¸Ö®ºó£¬ÎÒÃÇ¿ÉÒÔÀí½â¹ØÏµÊý¾ÝÊÇÈçºÎ±£´æµÄ£¬½ÓÏÂÀ´ÎÒÃÇÒªÀí½âÈçºÎʹÓÃÕâЩÊý¾ÝÀ´Âú×ãÓû§µÄ²éѯÐèÇó£¬Ò²¾ÍÊÇÒ»¸ö²éѯÓï¾äÊÇÈçºÎ²Ù×÷µ×²ã´æ´¢µÄÊý¾Ý¡£ ÄÜÏëµ½µÄ×î¼òµ¥µÄ·½°¸¾ÍÊÇͨ¹ýÉÏÒ»½ÚËùÊöµÄÓ³Éä·½°¸£¬½« SQL ²éѯӳÉäΪ¶Ô KV µÄ²éѯ£¬ÔÙͨ¹ý KV ½Ó¿Ú»ñÈ¡¶ÔÓ¦µÄÊý¾Ý£¬×îºóÖ´Ðи÷ÖÖ¼ÆËã¡£ ±ÈÈç Select count(*) from user where name="TiDB"; ÕâÑùÒ»¸öÓï¾ä£¬ÎÒÃÇÐèÒª¶ÁÈ¡±íÖÐËùÓеÄÊý¾Ý£¬È»ºó¼ì²é Name ×Ö¶ÎÊÇ·ñÊÇ TiDB£¬Èç¹ûÊǵϰ£¬Ôò·µ»ØÕâÒ»ÐС£ÕâÑùÒ»¸ö²Ù×÷Á÷³Ìת»»Îª KV ²Ù×÷Á÷³Ì£º

¹¹Ôì³ö Key Range£ºÒ»¸ö±íÖÐËùÓÐµÄ RowID ¶¼ÔÚ [0, MaxInt64) Õâ¸ö·¶Î§ÄÚ£¬ÄÇôÎÒÃÇÓà 0 ºÍ MaxInt64 ¸ù¾Ý Row µÄ Key ±àÂë¹æÔò£¬¾ÍÄܹ¹Ôì³öÒ»¸ö [StartKey, EndKey) µÄ×ó±ÕÓÒ¿ªÇø¼ä

ɨÃè Key Range£º¸ù¾ÝÉÏÃæ¹¹Ôì³öµÄ Key Range£¬¶ÁÈ¡ TiKV ÖеÄÊý¾Ý

¹ýÂËÊý¾Ý£º¶ÔÓÚ¶Áµ½µÄÿһÐÐÊý¾Ý£¬¼ÆËã name="TiDB" Õâ¸ö±í´ïʽ£¬Èç¹ûÎªÕæ£¬ÔòÏòÉÏ·µ»ØÕâÒ»ÐУ¬·ñÔò¶ªÆúÕâÒ»ÐÐÊý¾Ý

¼ÆËã Count£º¶Ô·ûºÏÒªÇóµÄÿһÐУ¬ÀۼƵ½ Count ÖµÉÏÃæ Õâ¸ö·½°¸¿Ï¶¨ÊÇ¿ÉÒÔ Work µÄ£¬µ«ÊDz¢²»ÄÜ Work µÄºÜºÃ£¬Ô­ÒòÊÇÏÔ¶øÒ×¼ûµÄ£º

ÔÚɨÃèÊý¾ÝµÄʱºò£¬Ã¿Ò»Ðж¼ÒªÍ¨¹ý KV ²Ù×÷ͬ TiKV ÖжÁÈ¡³öÀ´£¬ÖÁÉÙÓÐÒ»´Î RPC ¿ªÏú£¬Èç¹ûÐèҪɨÃèµÄÊý¾ÝºÜ¶à£¬ÄÇôÕâ¸ö¿ªÏú»á·Ç³£´ó

²¢²»ÊÇËùÓеÄÐж¼ÓÐÓã¬Èç¹û²»Âú×ãÌõ¼þ£¬Æäʵ¿ÉÒÔ²»¶ÁÈ¡³öÀ´

·ûºÏÒªÇóµÄÐеÄÖµ²¢Ã»ÓÐʲôÒâÒ壬ʵ¼ÊÉÏÕâÀïÖ»ÐèÒªÓм¸ÐÐÊý¾ÝÕâ¸öÐÅÏ¢¾ÍÐÐ

·Ö²¼Ê½ SQL ÔËËã

ÈçºÎ±ÜÃâÉÏÊöȱÏÝÒ²ÊÇÏÔ¶øÒ×¼ûµÄ£¬Ê×ÏÈÎÒÃÇÐèÒª½«¼ÆË㾡Á¿¿¿½ü´æ´¢½Úµã£¬ÒÔ±ÜÃâ´óÁ¿µÄ RPC µ÷Óá£Æä´Î£¬ÎÒÃÇÐèÒª½« Filter Ò²ÏÂÍÆµ½´æ´¢½Úµã½øÐмÆË㣬ÕâÑùÖ»ÐèÒª·µ»ØÓÐЧµÄÐУ¬±ÜÃâÎÞÒâÒåµÄÍøÂç´«Êä¡£×îºó£¬ÎÒÃÇ¿ÉÒÔ½«¾ÛºÏº¯Êý¡¢GroupBy Ò²ÏÂÍÆµ½´æ´¢½Úµã£¬½øÐÐÔ¤¾ÛºÏ£¬Ã¿¸ö½ÚµãÖ»ÐèÒª·µ»ØÒ»¸ö Count Öµ¼´¿É£¬ÔÙÓÉ tidb-server ½« Count Öµ Sum ÆðÀ´¡£ ÕâÀïÓÐÒ»¸öÊý¾ÝÖð²ã·µ»ØµÄʾÒâͼ£º

SQL ²ã¼Ü¹¹

ÉÏÃæ¼¸½Ú¼òÒª½éÉÜÁË SQL ²ãµÄһЩ¹¦ÄÜ£¬Ï£Íû´ó¼Ò¶Ô SQL Óï¾äµÄ´¦ÀíÓÐÒ»¸ö»ù±¾µÄÁ˽⡣ʵ¼ÊÉÏ TiDB µÄ SQL ²ãÒª¸´ÔӵĶ࣬ģ¿éÒÔ¼°²ã´Î·Ç³£¶à£¬ÏÂÃæÕâ¸öͼÁгöÁËÖØÒªµÄÄ£¿éÒÔ¼°µ÷ÓùØÏµ£º

Óû§µÄ SQL ÇëÇó»áÖ±½Ó»òÕßͨ¹ý Load Balancer ·¢Ë͵½ tidb-server£¬tidb-server »á½âÎö MySQL Protocol Packet£¬»ñÈ¡ÇëÇóÄÚÈÝ£¬È»ºó×öÓï·¨½âÎö¡¢²éѯ¼Æ»®Öƶ¨ºÍÓÅ»¯¡¢Ö´Ðвéѯ¼Æ»®»ñÈ¡ºÍ´¦ÀíÊý¾Ý¡£Êý¾ÝÈ«²¿´æ´¢ÔÚ TiKV ¼¯ÈºÖУ¬ËùÒÔÔÚÕâ¸ö¹ý³ÌÖÐ tidb-server ÐèÒªºÍ tikv-server ½»»¥£¬»ñÈ¡Êý¾Ý¡£×îºó tidb-server ÐèÒª½«²éѯ½á¹û·µ»Ø¸øÓû§¡£

С½á

µ½ÕâÀÎÒÃÇÒѾ­´Ó SQL µÄ½Ç¶ÈÁ˽âÁËÊý¾ÝÊÇÈçºÎ´æ´¢£¬ÈçºÎÓÃÓÚ¼ÆËã¡£SQL ²ã¸üÏêϸµÄ½éÉÜ»áÔÚ½ñºóµÄÎÄÕÂÖиø³ö£¬±ÈÈçÓÅ»¯Æ÷µÄ¹¤×÷Ô­Àí£¬·Ö²¼Ê½Ö´Ðпò¼ÜµÄϸ½Ú¡£ ÏÂһƪÎÄÕÂÎÒÃǽ«»á½éÉÜһЩ¹ØÓÚ PD µÄÐÅÏ¢£¬Õⲿ·Ö»á±È½ÏÓÐÒâ˼£¬ÀïÃæµÄºÜ¶à¶«Î÷ÊÇÔÚʹÓà TiDB ¹ý³ÌÖп´²»µ½£¬µ«ÊǶÔÕûÌ弯ȺÓַdz£ÖØÒª¡£Ö÷Òª»áÉæ¼°µ½¼¯ÈºµÄ¹ÜÀíºÍµ÷¶È¡£

ΪʲôҪ½øÐе÷¶È

ÏÈ»ØÒäÒ»ÏÂÉÏÃæ´æ´¢Ìáµ½µÄһЩÐÅÏ¢£¬TiKV ¼¯ÈºÊÇ TiDB Êý¾Ý¿âµÄ·Ö²¼Ê½ KV ´æ´¢ÒýÇæ£¬Êý¾ÝÒÔ Region Ϊµ¥Î»½øÐи´Öƺ͹ÜÀí£¬Ã¿¸ö Region »áÓжà¸ö Replica£¨¸±±¾£©£¬ÕâЩ Replica »á·Ö²¼ÔÚ²»Í¬µÄ TiKV ½ÚµãÉÏ£¬ÆäÖÐ Leader ¸ºÔð¶Á/д£¬Follower ¸ºÔðͬ²½ Leader ·¢À´µÄ raft log¡£Á˽âÁËÕâЩÐÅÏ¢ºó£¬Çë˼¿¼ÏÂÃæÕâЩÎÊÌ⣺

ÈçºÎ±£Ö¤Í¬Ò»¸ö Region µÄ¶à¸ö Replica ·Ö²¼ÔÚ²»Í¬µÄ½ÚµãÉÏ£¿¸ü½øÒ»²½£¬Èç¹ûÔÚһ̨»úÆ÷ÉÏÆô¶¯¶à¸ö TiKV ʵÀý£¬»áÓÐʲôÎÊÌ⣿

TiKV ¼¯Èº½øÐпç»ú·¿²¿ÊðÓÃÓÚÈÝÔÖµÄʱºò£¬ÈçºÎ±£Ö¤Ò»¸ö»ú·¿µôÏߣ¬²»»á¶ªÊ§ Raft Group µÄ¶à¸ö Replica£¿

Ìí¼ÓÒ»¸ö½Úµã½øÈë TiKV ¼¯ÈºÖ®ºó£¬ÈçºÎ½«¼¯ÈºÖÐÆäËû½ÚµãÉϵÄÊý¾Ý°á¹ýÀ´?

µ±Ò»¸ö½ÚµãµôÏßʱ£¬»á³öÏÖʲôÎÊÌ⣿Õû¸ö¼¯ÈºÐèÒª×öʲôÊÂÇ飿Èç¹û½ÚµãÖ»ÊǶÌÔݵôÏߣ¨ÖØÆô·þÎñ£©£¬ÄÇôÈçºÎ´¦Àí£¿Èç¹û½ÚµãÊdz¤Ê±¼äµôÏߣ¨´ÅÅ̹ÊÕÏ£¬Êý¾ÝÈ«²¿¶ªÊ§£©£¬ÐèÒªÈçºÎ´¦Àí£¿

¼ÙÉ輯ȺÐèҪÿ¸ö Raft Group ÓÐ N ¸ö¸±±¾£¬ÄÇô¶ÔÓÚµ¥¸ö Raft Group À´Ëµ£¬Replica ÊýÁ¿¿ÉÄܻ᲻¹»¶à£¨ÀýÈç½ÚµãµôÏߣ¬Ê§È¥¸±±¾£©£¬Ò²¿ÉÄÜ»á¹ýÓڶࣨÀýÈçµôÏߵĽڵãÓֻظ´Õý³££¬×Ô¶¯¼ÓÈ뼯Ⱥ£©¡£ÄÇôÈçºÎµ÷½Ú Replica ¸öÊý£¿

¶Á/д¶¼ÊÇͨ¹ý Leader ½øÐУ¬Èç¹û Leader Ö»¼¯ÖÐÔÚÉÙÁ¿½ÚµãÉÏ£¬»á¶Ô¼¯ÈºÓÐʲôӰÏ죿

²¢²»ÊÇËùÓÐµÄ Region ¶¼±»Æµ·±µÄ·ÃÎÊ£¬¿ÉÄÜ·ÃÎÊÈȵãÖ»ÔÚÉÙÊý¼¸¸ö Region£¬Õâ¸öʱºòÎÒÃÇÐèÒª×öʲô£¿

¼¯ÈºÔÚ×ö¸ºÔؾùºâµÄʱºò£¬ÍùÍùÐèÒª°áǨÊý¾Ý£¬ÕâÖÖÊý¾ÝµÄÇ¨ÒÆ»á²»»áÕ¼ÓôóÁ¿µÄÍøÂç´ø¿í¡¢´ÅÅÌ IO ÒÔ¼° CPU£¿½ø¶øÓ°ÏìÔÚÏß·þÎñ£¿

ÕâЩÎÊÌâµ¥¶ÀÄóö¿ÉÄܶ¼ÄÜÕÒµ½¼òµ¥µÄ½â¾ö·½°¸£¬µ«ÊÇ»ìÔÓÔÚÒ»Æð£¬¾Í²»Ì«ºÃ½â¾ö¡£ÓеÄÎÊÌâÃ²ËÆÖ»ÐèÒª¿¼Âǵ¥¸ö Raft Group ÄÚ²¿µÄÇé¿ö£¬±ÈÈç¸ù¾Ý¸±±¾ÊýÁ¿ÊÇ·ñ×ã¹»¶àÀ´¾ö¶¨ÊÇ·ñÐèÒªÌí¼Ó¸±±¾¡£µ«ÊÇʵ¼ÊÉÏÕâ¸ö¸±±¾Ìí¼ÓÔÚÄÄÀÊÇÐèÒª¿¼ÂÇÈ«¾ÖµÄÐÅÏ¢¡£Õû¸öϵͳҲÊÇÔÚ¶¯Ì¬±ä»¯£¬Region ·ÖÁÑ¡¢½Úµã¼ÓÈë¡¢½ÚµãʧЧ¡¢·ÃÎÊÈȵã±ä»¯µÈÇé¿ö»á²»¶Ï·¢Éú£¬Õû¸öµ÷¶ÈϵͳҲÐèÒªÔÚ¶¯Ì¬Öв»¶ÏÏò×îÓÅ״̬ǰ½ø£¬Èç¹ûûÓÐÒ»¸öÕÆÎÕÈ«¾ÖÐÅÏ¢£¬¿ÉÒÔ¶ÔÈ«¾Ö½øÐе÷¶È£¬²¢ÇÒ¿ÉÒÔÅäÖõÄ×é¼þ£¬¾ÍºÜÄÑÂú×ãÕâЩÐèÇó¡£Òò´ËÎÒÃÇÐèÒªÒ»¸öÖÐÐĽڵ㣬À´¶ÔϵͳµÄÕûÌå×´¿ö½øÐаѿغ͵÷Õû£¬ËùÒÔÓÐÁË PD Õâ¸öÄ£¿é¡£

µ÷¶ÈµÄÐèÇó

ÉÏÃæÂÞÁÐÁËÒ»´ó¶ÑÎÊÌ⣬ÎÒÃÇÏȽøÐзÖÀàºÍÕûÀí¡£×ÜÌåÀ´¿´£¬ÎÊÌâÓÐÁ½´óÀࣺ

×÷Ϊһ¸ö·Ö²¼Ê½¸ß¿ÉÓô洢ϵͳ£¬±ØÐëÂú×ãµÄÐèÇ󣬰üÀ¨ËÄÖÖ£º

¸±±¾ÊýÁ¿²»ÄܶàÒ²²»ÄÜÉÙ

¸±±¾ÐèÒª·Ö²¼ÔÚ²»Í¬µÄ»úÆ÷ÉÏ

мӽڵãºó£¬¿ÉÒÔ½«ÆäËû½ÚµãÉϵĸ±±¾Ç¨ÒƹýÀ´

½ÚµãÏÂÏߺó£¬ÐèÒª½«¸Ã½ÚµãµÄÊý¾ÝÇ¨ÒÆ×ß

×÷Ϊһ¸öÁ¼ºÃµÄ·Ö²¼Ê½ÏµÍ³£¬ÐèÒªÓÅ»¯µÄµØ·½£¬°üÀ¨£º

ά³ÖÕû¸ö¼¯ÈºµÄ Leader ·Ö²¼¾ùÔÈ

ά³Öÿ¸ö½ÚµãµÄ´¢´æÈÝÁ¿¾ùÔÈ

ά³Ö·ÃÎÊÈȵã·Ö²¼¾ùÔÈ

¿ØÖÆ Balance µÄËÙ¶È£¬±ÜÃâÓ°ÏìÔÚÏß·þÎñ

¹ÜÀí½Úµã״̬£¬°üÀ¨ÊÖ¶¯ÉÏÏß/ÏÂÏ߽ڵ㣬ÒÔ¼°×Ô¶¯ÏÂÏßʧЧ½Úµã

Âú×ãµÚÒ»ÀàÐèÇóºó£¬Õû¸öϵͳ½«¾ß±¸¶à¸±±¾ÈÝ´í¡¢¶¯Ì¬À©ÈÝ/ËõÈÝ¡¢ÈÝÈ̽ڵãµôÏßÒÔ¼°×Ô¶¯´íÎó»Ö¸´µÄ¹¦ÄÜ¡£Âú×ãµÚ¶þÀàÐèÇóºó£¬¿ÉÒÔʹµÃÕûÌåϵͳµÄ¸ºÔظü¼Ó¾ùÔÈ¡¢ÇÒ¿ÉÒÔ·½±ãµÄ¹ÜÀí¡£

ΪÁËÂú×ãÕâЩÐèÇó£¬Ê×ÏÈÎÒÃÇÐèÒªÊÕ¼¯×ã¹»µÄÐÅÏ¢£¬±ÈÈçÿ¸ö½ÚµãµÄ״̬¡¢Ã¿¸ö Raft Group µÄÐÅÏ¢¡¢ÒµÎñ·ÃÎʲÙ×÷µÄͳ¼ÆµÈ£»Æä´ÎÐèÒªÉèÖÃһЩ²ßÂÔ£¬PD ¸ù¾ÝÕâЩÐÅÏ¢ÒÔ¼°µ÷¶ÈµÄ²ßÂÔ£¬Öƶ¨³ö¾¡Á¿Âú×ãÇ°ÃæËùÊöÐèÇóµÄµ÷¶È¼Æ»®£»×îºóÐèҪһЩ»ù±¾µÄ²Ù×÷£¬À´Íê³Éµ÷¶È¼Æ»®¡£

µ÷¶ÈµÄ»ù±¾²Ù×÷

ÎÒÃÇÏÈÀ´½éÉÜ×î¼òµ¥µÄÒ»µã£¬Ò²¾ÍÊǵ÷¶ÈµÄ»ù±¾²Ù×÷£¬Ò²¾ÍÊÇΪÁËÂú×ãµ÷¶ÈµÄ²ßÂÔ£¬ÎÒÃÇÓÐÄÄЩ¹¦ÄÜ¿ÉÒÔÓá£ÕâÊÇÕû¸öµ÷¶ÈµÄ»ù´¡£¬Á˽âÁËÊÖÀïÓÐʲôÑùµÄ´¸×Ó£¬²ÅÖªµÀÓÃʲôÑùµÄ×ËÊÆÈ¥ÔÒ¶¤×Ó¡£

ÉÏÊöµ÷¶ÈÐèÇó¿´ËƸ´ÔÓ£¬µ«ÊÇÕûÀíÏÂÀ´×îÖÕÂ䵨µÄÎÞ·ÇÊÇÏÂÃæÈý¼þÊ£º

Ôö¼ÓÒ»¸ö Replica

ɾ³ýÒ»¸ö Replica

½« Leader ½ÇÉ«ÔÚÒ»¸ö Raft Group µÄ²»Í¬ Replica Ö®¼ä transfer

¸ÕºÃ Raft ЭÒéÄܹ»Âú×ãÕâÈýÖÖÐèÇó£¬Í¨¹ý AddReplica¡¢RemoveReplica¡¢TransferLeader ÕâÈý¸öÃüÁ¿ÉÒÔÖ§³ÅÉÏÊöÈýÖÖ»ù±¾²Ù×÷¡£

ÐÅÏ¢ÊÕ¼¯

µ÷¶ÈÒÀÀµÓÚÕû¸ö¼¯ÈºÐÅÏ¢µÄÊÕ¼¯£¬¼òµ¥À´Ëµ£¬ÎÒÃÇÐèÒªÖªµÀÿ¸ö TiKV ½ÚµãµÄ״̬ÒÔ¼°Ã¿¸ö Region µÄ״̬¡£TiKV ¼¯Èº»áÏò PD »ã±¨Á½ÀàÏûÏ¢£º

ÿ¸ö TiKV ½Úµã»á¶¨ÆÚÏò PD »ã±¨½ÚµãµÄÕûÌåÐÅÏ¢

TiKV ½Úµã£¨Store£©Óë PD Ö®¼ä´æÔÚÐÄÌø°ü£¬Ò»·½Ãæ PD ͨ¹ýÐÄÌø°ü¼ì²âÿ¸ö Store ÊÇ·ñ´æ»î£¬ÒÔ¼°ÊÇ·ñÓÐмÓÈëµÄ Store£»ÁíÒ»·½Ã棬ÐÄÌø°üÖÐÒ²»áЯ´øÕâ¸ö Store µÄ״̬ÐÅÏ¢£¬Ö÷Òª°üÀ¨£º

×Ü´ÅÅÌÈÝÁ¿

¿ÉÓôÅÅÌÈÝÁ¿

³ÐÔØµÄ Region ÊýÁ¿

Êý¾ÝдÈëËÙ¶È

·¢ËÍ/½ÓÊÜµÄ Snapshot ÊýÁ¿£¨Replica Ö®¼ä¿ÉÄÜ»áͨ¹ý Snapshot ͬ²½Êý¾Ý£©

ÊÇ·ñ¹ýÔØ

±êÇ©ÐÅÏ¢£¨±êÇ©ÊǾ߱¸²ã¼¶¹ØÏµµÄһϵÁÐ Tag£©

ÿ¸ö Raft Group µÄ Leader »á¶¨ÆÚÏò PD »ã±¨ÐÅÏ¢

ÿ¸ö Raft Group µÄ Leader ºÍ PD Ö®¼ä´æÔÚÐÄÌø°ü£¬ÓÃÓڻ㱨Õâ¸ö Region µÄ״̬£¬Ö÷Òª°üÀ¨ÏÂÃæ¼¸µãÐÅÏ¢£º

Leader µÄλÖÃ

Followers µÄλÖÃ

µôÏß Replica µÄ¸öÊý

Êý¾ÝдÈë/¶ÁÈ¡µÄËÙ¶È

PD ²»¶ÏµÄͨ¹ýÕâÁ½ÀàÐÄÌøÏûÏ¢ÊÕ¼¯Õû¸ö¼¯ÈºµÄÐÅÏ¢£¬ÔÙÒÔÕâЩÐÅÏ¢×÷Ϊ¾ö²ßµÄÒÀ¾Ý¡£³ý´ËÖ®Í⣬PD »¹¿ÉÒÔͨ¹ý¹ÜÀí½Ó¿Ú½ÓÊܶîÍâµÄÐÅÏ¢£¬ÓÃÀ´×ö¸ü׼ȷµÄ¾ö²ß¡£±ÈÈ統ij¸ö Store µÄÐÄÌø°üÖжϵÄʱºò£¬PD ²¢²»ÄÜÅжÏÕâ¸ö½ÚµãÊÇÁÙʱʧЧ»¹ÊÇÓÀ¾ÃʧЧ£¬Ö»Äܾ­¹ýÒ»¶Îʱ¼äµÄµÈ´ý£¨Ä¬ÈÏÊÇ 30 ·ÖÖÓ£©£¬Èç¹ûһֱûÓÐÐÄÌø°ü£¬¾ÍÈÏΪÊÇ Store ÒѾ­ÏÂÏߣ¬ÔÙ¾ö¶¨ÐèÒª½«Õâ¸ö Store ÉÏÃæµÄ Region ¶¼µ÷¶È×ß¡£µ«ÊÇÓеÄʱºò£¬ÊÇÔËάÈËÔ±Ö÷¶¯½«Ä³Ì¨»úÆ÷ÏÂÏߣ¬Õâ¸öʱºò£¬¿ÉÒÔͨ¹ý PD µÄ¹ÜÀí½Ó¿Ú֪ͨ PD ¸Ã Store ²»¿ÉÓã¬PD ¾Í¿ÉÒÔÂíÉÏÅжÏÐèÒª½«Õâ¸ö Store ÉÏÃæµÄ Region ¶¼µ÷¶È×ß¡£

µ÷¶ÈµÄ²ßÂÔ

PD ÊÕ¼¯ÁËÕâЩÐÅÏ¢ºó£¬»¹ÐèҪһЩ²ßÂÔÀ´Öƶ¨¾ßÌåµÄµ÷¶È¼Æ»®¡£

Ò»¸ö Region µÄ Replica ÊýÁ¿ÕýÈ·

µ± PD ͨ¹ýij¸ö Region Leader µÄÐÄÌø°ü·¢ÏÖÕâ¸ö Region µÄ Replica ÊýÁ¿²»Âú×ãÒªÇóʱ£¬ÐèҪͨ¹ý Add/Remove Replica ²Ù×÷µ÷Õû Replica ÊýÁ¿¡£³öÏÖÕâÖÖÇé¿öµÄ¿ÉÄÜÔ­ÒòÊÇ£º

ij¸ö½ÚµãµôÏߣ¬ÉÏÃæµÄÊý¾ÝÈ«²¿¶ªÊ§£¬µ¼ÖÂһЩ Region µÄ Replica ÊýÁ¿²»×ã

ij¸öµôÏß½ÚµãÓÖ»Ö¸´·þÎñ£¬×Ô¶¯½ÓÈ뼯Ⱥ£¬ÕâÑù֮ǰÒѾ­²¹×ãÁË Replica µÄ Region µÄ Replica ÊýÁ¿¶à¹ý£¬ÐèҪɾ³ýij¸ö Replica

¹ÜÀíÔ±µ÷ÕûÁ˸±±¾²ßÂÔ£¬ÐÞ¸ÄÁË max-replicas µÄÅäÖÃ

Ò»¸ö Raft Group ÖеĶà¸ö Replica ²»ÔÚͬһ¸öλÖÃ

×¢ÒâµÚ¶þµã£¬¡ºÒ»¸ö Raft Group ÖеĶà¸ö Replica ²»ÔÚͬһ¸öλÖợ¬ÕâÀïÓõÄÊÇ¡ºÍ¬Ò»¸öλÖá»¶ø²»ÊÇ¡ºÍ¬Ò»¸ö½Úµã¡»¡£ÔÚÒ»°ãÇé¿öÏ£¬PD Ö»»á±£Ö¤¶à¸ö Replica ²»ÂäÔÚÒ»¸ö½ÚµãÉÏ£¬ÒÔ±ÜÃâµ¥¸ö½ÚµãʧЧµ¼Ö¶à¸ö Replica ¶ªÊ§¡£ÔÚʵ¼Ê²¿ÊðÖУ¬»¹¿ÉÄܳöÏÖÏÂÃæÕâЩÐèÇó£º

¶à¸ö½Úµã²¿ÊðÔÚͬһ̨ÎïÀí»úÆ÷ÉÏ

TiKV ½Úµã·Ö²¼ÔÚ¶à¸ö»ú¼ÜÉÏ£¬Ï£Íûµ¥¸ö»ú¼Üµôµçʱ£¬Ò²Äܱ£Ö¤ÏµÍ³¿ÉÓÃÐÔ

TiKV ½Úµã·Ö²¼ÔÚ¶à¸ö IDC ÖУ¬Ï£Íûµ¥¸ö»ú·¿µôµçʱ£¬Ò²Äܱ£Ö¤ÏµÍ³¿ÉÓÃ

ÕâЩÐèÇó±¾ÖÊÉ϶¼ÊÇijһ¸ö½Úµã¾ß±¸¹²Í¬µÄλÖÃÊôÐÔ£¬¹¹³ÉÒ»¸ö×îСµÄÈÝ´íµ¥Ôª£¬ÎÒÃÇÏ£ÍûÕâ¸öµ¥ÔªÄÚ²¿²»»á´æÔÚÒ»¸ö Region µÄ¶à¸ö Replica¡£Õâ¸öʱºò£¬¿ÉÒÔ¸ø½ÚµãÅäÖà lables ²¢ÇÒͨ¹ýÔÚ PD ÉÏÅäÖà location-labels À´Ö¸Ã÷ÄÄЩ lable ÊÇλÖñêʶ£¬ÐèÒªÔÚ Replica ·ÖÅäµÄʱºò¾¡Á¿±£Ö¤²»»áÓÐÒ»¸ö Region µÄ¶à¸ö Replica ËùÔÚ½áµãÓÐÏàͬµÄλÖñêʶ¡£

¸±±¾ÔÚ Store Ö®¼äµÄ·Ö²¼¾ùÔÈ·ÖÅä

Ç°ÃæËµ¹ý£¬Ã¿¸ö¸±±¾Öд洢µÄÊý¾ÝÈÝÁ¿ÉÏÏÞÊǹ̶¨µÄ£¬ËùÒÔÎÒÃÇά³Öÿ¸ö½ÚµãÉÏÃæ£¬¸±±¾ÊýÁ¿µÄ¾ùºâ£¬»áʹµÃ×ÜÌåµÄ¸ºÔظü¾ùºâ¡£

Leader ÊýÁ¿ÔÚ Store Ö®¼ä¾ùÔÈ·ÖÅä

Raft ЭÒéÒª¶ÁÈ¡ºÍдÈ붼ͨ¹ý Leader ½øÐУ¬ËùÒÔ¼ÆËãµÄ¸ºÔØÖ÷ÒªÔÚ Leader ÉÏÃæ£¬PD »á¾¡¿ÉÄܽ« Leader ÔÚ½Úµã¼ä·ÖÉ¢¿ª¡£

·ÃÎÊÈȵãÊýÁ¿ÔÚ Store Ö®¼ä¾ùÔÈ·ÖÅä

ÿ¸ö Store ÒÔ¼° Region Leader ÔÚÉϱ¨ÐÅϢʱЯ´øÁ˵±Ç°·ÃÎʸºÔصÄÐÅÏ¢£¬±ÈÈç Key µÄ¶ÁÈ¡/дÈëËÙ¶È¡£PD »á¼ì²â³ö·ÃÎÊÈȵ㣬ÇÒ½«ÆäÔÚ½ÚµãÖ®¼ä·ÖÉ¢¿ª¡£

¸÷¸ö Store µÄ´æ´¢¿Õ¼äÕ¼ÓôóÖÂÏàµÈ

ÿ¸ö Store Æô¶¯µÄʱºò¶¼»áÖ¸¶¨Ò»¸ö Capacity ²ÎÊý£¬±íÃ÷Õâ¸ö Store µÄ´æ´¢¿Õ¼äÉÏÏÞ£¬PD ÔÚ×öµ÷¶ÈµÄʱºò£¬»á¿¼ÂǽڵãµÄ´æ´¢¿Õ¼äÊ£ÓàÁ¿¡£

¿ØÖƵ÷¶ÈËÙ¶È£¬±ÜÃâÓ°ÏìÔÚÏß·þÎñ

µ÷¶È²Ù×÷ÐèÒªºÄ·Ñ CPU¡¢ÄÚ´æ¡¢´ÅÅÌ IO ÒÔ¼°ÍøÂç´ø¿í£¬ÎÒÃÇÐèÒª±ÜÃâ¶ÔÏßÉÏ·þÎñÔì³ÉÌ«´óÓ°Ïì¡£PD »á¶Ôµ±Ç°ÕýÔÚ½øÐеIJÙ×÷ÊýÁ¿½øÐпØÖÆ£¬Ä¬ÈϵÄËÙ¶È¿ØÖÆÊDZȽϱ£Êصģ¬Èç¹ûÏ£Íû¼Ó¿ìµ÷¶È(±ÈÈçÒѾ­Í£·þÎñÉý¼¶£¬Ôö¼Óнڵ㣬ϣÍû¾¡¿ìµ÷¶È)£¬ÄÇô¿ÉÒÔͨ¹ý pd-ctl ÊÖ¶¯¼Ó¿ìµ÷¶ÈËÙ¶È¡£

Ö§³ÖÊÖ¶¯ÏÂÏß½Úµã

µ±Í¨¹ý pd-ctl ÊÖ¶¯ÏÂÏß½Úµãºó£¬PD »áÔÚÒ»¶¨µÄËÙÂÊ¿ØÖÆÏ£¬½«½ÚµãÉϵÄÊý¾Ýµ÷¶È×ß¡£µ±µ÷¶ÈÍê³Éºó£¬¾Í»á½«Õâ¸ö½ÚµãÖÃΪÏÂÏß״̬¡£

µ÷¶ÈµÄʵÏÖ

Á˽âÁËÉÏÃæÕâЩÐÅÏ¢ºó£¬½ÓÏÂÀ´ÎÒÃÇ¿´Ò»ÏÂÕû¸öµ÷¶ÈµÄÁ÷³Ì¡£

PD ²»¶ÏµÄͨ¹ý Store »òÕß Leader µÄÐÄÌø°üÊÕ¼¯ÐÅÏ¢£¬»ñµÃÕû¸ö¼¯ÈºµÄÏêϸÊý¾Ý£¬²¢ÇÒ¸ù¾ÝÕâЩÐÅÏ¢ÒÔ¼°µ÷¶È²ßÂÔÉú³Éµ÷¶È²Ù×÷ÐòÁУ¬Ã¿´ÎÊÕµ½ Region Leader ·¢À´µÄÐÄÌø°üʱ£¬PD ¶¼»á¼ì²éÊÇ·ñÓжÔÕâ¸ö Region ´ý½øÐеIJÙ×÷£¬Í¨¹ýÐÄÌø°üµÄ»Ø¸´ÏûÏ¢£¬½«ÐèÒª½øÐеIJÙ×÷·µ»Ø¸ø Region Leader£¬²¢ÔÚºóÃæµÄÐÄÌø°üÖмà²âÖ´Ðнá¹û¡£×¢ÒâÕâÀïµÄ²Ù×÷Ö»ÊǸø Region Leader µÄ½¨Ò飬²¢²»±£Ö¤Ò»¶¨Äܵõ½Ö´ÐУ¬¾ßÌåÊÇ·ñ»áÖ´ÐÐÒÔ¼°Ê²Ã´Ê±ºòÖ´ÐУ¬ÓÉ Region Leader ×Ô¼º¸ù¾Ýµ±Ç°×ÔÉí״̬À´¶¨¡£

×ܽá

±¾ÆªÎÄÕ½²µÄ¶«Î÷£¬´ó¼Ò¿ÉÄÜÆ½Ê±ºÜÉÙ»áÔÚÆäËûÎÄÕÂÖп´µ½£¬Ã¿Ò»¸öÉè¼Æ¶¼Óб³ºóµÄ¿¼Á¿£¬Ï£Íû´ó¼ÒÄÜÁ˽⵽һ¸ö·Ö²¼Ê½´æ´¢ÏµÍ³ÔÚ×öµ÷¶ÈµÄʱºò£¬ÐèÒª¿¼ÂÇÄÄЩ¶«Î÷£¬ÈçºÎ½«²ßÂÔ¡¢ÊµÏÖ½øÐнâñ¸üÁé»îµÄÖ§³Ö²ßÂÔµÄÀ©Õ¹¡£

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

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

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

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