±à¼ÍƼö: |
ÎÄÕ½éÉÜÁË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 ×Ô¼º¸ù¾Ýµ±Ç°×ÔÉí״̬À´¶¨¡£
×ܽá
±¾ÆªÎÄÕ½²µÄ¶«Î÷£¬´ó¼Ò¿ÉÄÜÆ½Ê±ºÜÉÙ»áÔÚÆäËûÎÄÕÂÖп´µ½£¬Ã¿Ò»¸öÉè¼Æ¶¼Óб³ºóµÄ¿¼Á¿£¬Ï£Íû´ó¼ÒÄÜÁ˽⵽һ¸ö·Ö²¼Ê½´æ´¢ÏµÍ³ÔÚ×öµ÷¶ÈµÄʱºò£¬ÐèÒª¿¼ÂÇÄÄЩ¶«Î÷£¬ÈçºÎ½«²ßÂÔ¡¢ÊµÏÖ½øÐнâñ¸üÁé»îµÄÖ§³Ö²ßÂÔµÄÀ©Õ¹¡£
|