±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËLSM-treeÊý¾Ý¿âÒýÇæ¡¢
LSM-treeÒýÇæÒ»Ð´¶à¶ÁµÄ¹Ø¼ü¼¼Êõ¡¢ LSM-tree VS B+tree¡¢LSM-treeÒýÇæÒµÄÚ·¢Õ¹×´¿ö¡¢ÐÔÄܲâÊÔ¼°Î´À´Õ¹Íû¡£
À´×ÔÓÚ΢ÐŹ«ÖںŰ¢Àï¼¼Êõ£¬,ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
Ò» ǰÑÔ
PolarDBÊǰ¢Àï°Í°Í×ÔÑеÄÐÂÒ»´úÔÆÔÉú¹ØÏµÐÍÊý¾Ý¿â£¬ÔÚ´æ´¢¼ÆËã·ÖÀë¼Ü¹¹Ï£¬ÀûÓÃÁËÈíÓ²¼þ½áºÏµÄÓÅÊÆ£¬ÎªÓû§Ìṩ¾ß±¸¼«Öµ¯ÐÔ¡¢º£Á¿´æ´¢¡¢¸ßÐÔÄÜ¡¢µÍ³É±¾µÄÊý¾Ý¿â·þÎñ¡£X-EngineÊǰ¢Àï°Í°Í×ÔÑеÄÐÂÒ»´ú´æ´¢ÒýÇæ£¬×÷ΪAliSQLµÄºËÐÄÒýÇæÖ®Ò»Òѹ㷺ÓÃÓÚ°¢Àï°Í°Í¼¯ÍźËÐÄÒµÎñ£¬°üÀ¨½»Ò×ÀúÊ·¿â£¬¶¤¶¤ÀúÊ·¿â£¬Í¼Æ¬¿Õ¼äµÈ¡£X-Engine»ùÓÚLSM-tree¼Ü¹¹£¬ÆäºËÐÄÌØÕ÷ÊÇÊý¾ÝÒÔ×·¼Óд·½Ê½Ð´È룬¸ßѹËõµÍ³É±¾£¬ÊÊÓÃÓÚд¶à¶ÁÉÙ£¬Óеͳɱ¾ËßÇóµÄÒµÎñ³¡¾°¡£´«Í³MySQL»ùÓÚbinlog¸´ÖƵÄÖ÷±¸¼Ü¹¹ÓÐËüµÄ¾ÖÏÞÐÔ£¬°üÀ¨´æ´¢¿Õ¼äÓÐÏÞ£¬±¸·Ý»Ö¸´Âý£¬Ö÷±¸¸´ÖÆÑÓ³ÙµÈÎÊÌ⣬ΪÁ˽â¾öÓû§¶ÔÓÚÔÆÉÏRDS(X-Engine)´óÈÝÁ¿´æ´¢£¬ÒÔ¼°µ¯ÐÔÉìËõµÄËßÇó£¬PolarDBÍÆ³öÁËÀúÊ·¿â(»ùÓÚX-EngineÒýÇæµÄһд¶à¶Á)²úÆ·£¬Ö§³ÖÎïÀí¸´ÖÆ£¬Ìṩһд¶à¶ÁµÄÄÜÁ¦£¬Ä¿Ç°ÒѾÔÚ°¢ÀïÔÆ¹ÙÍøÊÛÂô¡£±¾ÎÄÖ÷Òª²ûÊöÈçºÎ»ùÓÚLSM-tree½á¹¹µÄ´æ´¢ÒýÇæÊµÏÖÊý¾Ý¿âµÄһд¶à¶ÁÄÜÁ¦¡£
¶þ LSM-treeÊý¾Ý¿âÒýÇæ
LSM-TreeÈ«³ÆÊÇLog Structured Merge Tree£¬ÊÇÒ»Öֲַ㣬ÓÐÐò£¬ÃæÏò´ÅÅÌÉè¼ÆµÄÊý¾Ý½á¹¹£¬ÆäºËÐÄ˼ÏëÊÇÀûÓôÅÅÌÅúÁ¿µÄ˳ÐòдҪ±ÈËæ»úдÐÔÄܸߵÄÌØµã£¬½«ËùÓиüвÙ×÷¶¼×ª»¯Îª×·¼Óд·½Ê½£¬ÌáÉýдÈëÍÌÍ¡£LSM-treeÀàµÄ´æ´¢ÒýÇæ×îÔçÔ´ÓÚGoogleÈý¼ÝÂí³µÖ®Ò»µÄBigTableµÄ´æ´¢ÒýÇæÒÔ¼°ËüµÄ¿ªÔ´ÊµÏÖLevelDB¡£LSM-tree´æ´¢ÒýÇæÓм¸¸öÌØµã£¬Ê×ÏÈÔöÁ¿Êý¾ÝÏñÈÕÖ¾Ò»Ñù£¬Í¨¹ý×·¼Ó·½Ê½Ð´È룬˳ÐòÂäÅÌ£»Æä´Î£¬Êý¾Ý°´ÕÕkeyÀ´½øÐÐÓÐÐò×éÖ¯£¬ÕâÑùÔÚÄÚ´æºÍ´ÅÅÌÖлáÐγÉÒ»¿Å¿ÅСµÄ¡°ÓÐÐòÊ÷¡±£»×îºó£¬¸÷¸ö¡°ÓÐÐòÊ÷¡±¿ÉÒÔ½øÐй鲢£¬½«ÄÚ´æÖеÄÔöÁ¿Êý¾ÝÇ¨ÒÆµ½´ÅÅÌÉÏ£¬´ÅÅÌÉϵĶà¸ö¡°ÓÐÐòÊ÷¡±¿ÉÒÔ½øÐй鲢£¬ÓÅ»¯Ê÷µÄÐÎ×´£¬Õû¸öLSM-treeÊÇÒ»¸öÓÐÐòµÄË÷Òý×éÖ¯½á¹¹¡£
ÔÚÔÆÔÉúÊý¾Ý¿âʱ´ú£¬Ò»Ð´¶à¶Á¼¼ÊõÒѱ»¹ã·ºÓ¦ÓÃÓÚÉú²ú»·¾³ÖУ¬Ö÷ÒªÔÆ²úÉ̶¼ÓÐÆä±ê¸Ë²úÆ·£¬µäÐÍ´ú±í°üÀ¨ÑÇÂíÑ·µÄAurora£¬°¢ÀïÔÆµÄPolarDBÒÔ¼°Î¢ÈíÔÆµÄSocrates¡£ËüµÄºËÐÄ˼ÏëÊǼÆËã´æ´¢·ÖÀ룬½«ÓÐ״̬µÄÊý¾ÝºÍÈÕÖ¾ÏÂÍÆµ½·Ö²¼Ê½´æ´¢£¬¼ÆËã½ÚµãÎÞ״̬£¬¶à¸ö¼ÆËã½Úµã¹²ÏíÒ»·ÝÊý¾Ý£¬Êý¾Ý¿â¿ÉÒԵͳɱ¾¿ìËÙÀ©Õ¹¶ÁÐÔÄÜ¡£AuroraÊÇÕâ¸öÁìÓòµÄ¿ªÉ½±Ç׿£¬ÊµÏÖÁËÒµÄÚµÚÒ»¸öһд¶à¶ÁµÄÊý¾Ý¿â£¬¼ÆËã½ÚµãScale
up£¬´æ´¢½ÚµãScale out£¬²¢½«ÈÕ־ģ¿éÏÂÍÆµ½´æ´¢²ã£¬¼ÆËã½ÚµãÖ®¼ä£¬¼ÆËãÓë´æ´¢½ÚµãÖ®¼ä´«ÊäredoÈÕÖ¾£¬¼ÆËã½Úµã»ùÓÚQuorumÐÒéд¶à¸±±¾±£Ö¤¿É¿¿ÐÔ£¬´æ´¢²ãÌṩ¶à°æ±¾Ò³·þÎñ¡£PolarDBÓëAuroraÀàËÆ£¬Ò²²ÉÓÃÁË´æ´¢¼ÆËã·ÖÀë¼Ü¹¹£¬ÓëAuroraÏà±È£¬PolarDBËü×Ô¼ºµÄÌØÉ«£¬´æ´¢»ù×ùÊÇÒ»¸öͨÓõķֲ¼Ê½Îļþϵͳ£¬´óÁ¿²ÉÓÃOS-bypassºÍzero-copy¼¼Êõ£¬´æ´¢µÄ¶à¸±±¾Ò»ÖÂÐÔÓÉParallelRaftÐÒé±£Ö¤¡£PolarDB¼ÆËã½ÚµãÓë´æ´¢½Úµãͬʱ´«ÊäÊý¾ÝÒ³ºÍredoÈÕÖ¾£¬¼ÆËã½ÚµãÓë¼ÆËã½ÚµãÖ®¼äÖ»´«µÝλµãÐÅÏ¢¡£ÓëAuroraµÄ¡°ÈÕÖ¾¼´Êý¾Ý¿â¡±ÀíÄîÒ»Ñù£¬SocratesµÄ½ÚµãÖ®¼äÖ»´«ÊäredoÈÕÖ¾£¬Ò²ÊµÏÖÁË¶à°æ±¾Ò³·þÎñ£¬ËüµÄÌØµãÊǽ«Êý¾Ý¿â´æ´¢²ãµÄ³Ö¾ÃÐÔÓë¿ÉÓÃÐÔ·Ö¿ª£¬³éÏó³öÒ»Ì×ÈÕÖ¾·þÎñ¡£Õû¸öÊý¾Ý¿â·ÖΪ3²ã£¬Ò»²ã¼ÆËã·þÎñ£¬Ò»²ãpage
server·þÎñºÍÒ»²ãÈÕÖ¾·þÎñ£¬ÕâÑùÉè¼ÆµÄºÃ´¦ÊÇ¿ÉÒÔ·Ö²ã½øÐÐÓÅ»¯£¬Ìṩ¸üÁé»îºÍϸÁ£¶ÈµÄ¿ØÖÆ¡£
ËäÈ»Aurora£¬PolarDBºÍSocratesÔÚÉè¼ÆÉϸ÷ÓÐÌØµã£¬µ«ËüÃǶ¼¹²Í¬¼ùÐÐÁË´æ´¢¼ÆËã·ÖÀë˼Ï룬Êý¾Ý¿â²ãÃæÌṩһд¶à¶ÁµÄÄÜÁ¦¡£ÉîÈëµ½´æ´¢ÒýÇæÕâÒ»²ãÀ´Ëµ£¬Õ⼸¸ö²úÆ·¶¼ÊÇ»ùÓÚB+treeµÄ´æ´¢ÒýÇæ£¬Èç¹û»ùÓÚLSM-tree´æ´¢ÒýÇæÀ´×öÄØ£¿LSM-treeÓÐËü×Ô¼ºµÄÌØµã£¬×·¼Ó˳Ðòд£¬Êý¾Ý·Ö²ã´æ´¢£¬´ÅÅÌÉÏÊý¾Ý¿éÖ»¶Á¸üÓÐÀûÓÚѹËõ¡£X-EngineÒýÇæÔÆÉϲúÆ·RDS(X-Engine)ÒѾ³ä·Ö·¢»ÓÁËLSM-tree¸ßѹËõµÍ³É±¾Ìص㣬ͬÑùµÄÊý¾ÝÁ¿£¬´æ´¢¿Õ¼äÖ»Õ¼µ½RDS(InnoDB)µÄ1/3ÉõÖÁ¸üÉÙ£¬RDS(X-Engine)´«Í³µÄÖ÷±¸¼Ü¹¹£¬ÒÀÈ»ÃæÁÙ×ÅÖ÷±¸¸´ÖÆÑӳٴ󣬱¸·Ý»Ö¸´ÂýµÈÎÊÌâ¡£»ùÓÚLSM-treeÒýÇæÊµÏÖһд¶à¶Á£¬²»½ö¼ÆËã×ÊÔ´ºÍ´æ´¢×ÊÔ´½âñ¶à¸ö½Úµã¹²ÏíÒ»·ÝÊý¾Ý»¹ÄܽøÒ»²½Ñ¹Ëõ´æ´¢³É±¾¡£
»ùÓÚLSM-treeÒýÇæÊµÏÖһд¶à¶ÁÃæÁÙ×ÅÓëB+treeÒýÇæ²»Ò»ÑùµÄ¼¼ÊõÌôÕ½£¬Ê×ÏÈÊÇ´æ´¢ÒýÇæÈÕÖ¾²»Ò»Ñù£¬LSM-treeÒýÇæÊÇË«ÈÕÖ¾Á÷£¬ÐèÒª½â¾öË«ÈÕÖ¾Á÷µÄÎïÀí¸´ÖÆÎÊÌ⣻Æä´ÎÊÇÊý¾Ý×éÖ¯·½Ê½²»Ò»Ñù£¬LSM-treeÒýÇæ²ÉÓÃ·Ö²ã´æ´¢£¬×·¼ÓдÈëÐÂÊý¾Ý£¬ÐèÒª½â¾ö¶à¸ö¼ÆËã½ÚµãÒ»ÖÂÐÔÎïÀí¿ìÕÕÒÔ¼°CompationÎÊÌâ¡£×îºó£¬×÷ΪÊý¾Ý¿âÒýÇæ£¬»¹ÐèÒª½â¾öһд¶à¶ÁģʽÏÂDDLµÄÎïÀí¸´ÖÆÎÊÌ⡣ͬʱ£¬ÎªÁ˲úÆ·»¯£¬³ä·Ö·¢»ÓB+treeÒýÇæºÍLSM-treeÒýÇæµÄ¸÷×ÔÓÅÊÆ£¬»¹ÃæÁÙ×ÅеÄÌôÕ½£¬¼´ÈçºÎÔÚÒ»¸öÊý¾Ý¿â²úÆ·ÖÐͬʱʵÏÖÁ½¸ö´æ´¢ÒýÇæ(InnoDB,X-Engine)µÄһд¶à¶Á¡£
Èý LSM-treeÒýÇæÒ»Ð´¶à¶ÁµÄ¹Ø¼ü¼¼Êõ
1 PolarDBÕûÌå¼Ü¹¹
PolarDBÖ§³ÖX-EngineÒýÇæºó£¬X-EngineÒýÇæÓëInnoDBÒýÇæÈÔÈ»¶ÀÁ¢´æÔÚ¡£Á½¸öÒýÇæ¸÷×Ô½ÓÊÕдÈëÇëÇó£¬Êý¾ÝºÍÈÕÖ¾¾ù´æ´¢ÔڵײãµÄ·Ö²¼Ê½´æ´¢ÉÏ£¬ÆäÖÐidbÎļþ±íʾµÄÊÇInnoDBµÄÊý¾ÝÎļþ£¬sstÎļþ±íʾµÄÊÇX-EngineµÄÊý¾ÝÎļþ¡£ÕâÀï×îÖ÷ÒªµÄµãÔÚÓÚInnoDBÓëXEngine¹²ÏíÒ»·ÝredoÈÕÖ¾£¬X-EngineдÈëʱ£¬½«walÈÕ־ǶÈëµ½InnoDBµÄredoÖУ¬Replica½ÚµãºÍStandby½ÚµãÔÚ½âÎöredoÈÕÖ¾ºó£¬·Ö·¢¸øInnoDBÒýÇæºÍXEngineÒýÇæ·Ö±ð»Ø·Å½øÐÐͬ²½¡£

PolarDB(X-Engine)¼Ü¹¹Í¼
X-EngineÒýÇæ¼Ü¹¹
X-EngineÒýÇæ²ÉÓÃLSM-tree½á¹¹£¬Êý¾ÝÒÔ×·¼ÓдµÄ·½Ê½Ð´ÈëÄڴ棬²¢ÖÜÆÚÐÔÎﻯµ½´ÅÅÌÉÏ£¬ÄÚ´æÖÐÊý¾ÝÒÔmemtableÐÎʽ´æÔÚ£¬°üÀ¨Ò»¸ö»îÔ¾µÄactive
memtableºÍ¶à¸ö¾²Ì¬µÄimmutable¡£´ÅÅÌÉÏÊý¾Ý·Ö²ã´æ´¢£¬×ܹ²°üÀ¨3²ã£¬L0£¬L1ºÍL2£¬Ã¿Ò»²ãÊý¾Ý°´¿éÓÐÐò×éÖ¯¡£X-Engine×îС¿Õ¼ä·ÖÅ䵥λÊÇÒ»¸öextent£¬Ä¬ÈÏÊÇ2M£¬Ã¿¸öextent°üº¬Èô¸É¸öblock£¬Ä¬ÈÏÊÇ16k¡£Êý¾Ý¼Ç¼½ô´Õ´æ´¢ÔÚblockÖУ¬ÓÉÓÚ×·¼ÓÐ´ÌØµã£¬´ÅÅÌÉϵÄÊý¾Ý¿é¶¼ÊÇÖ»¶ÁµÄ£¬Òò´ËX-EngineÒýÇæ¿ÉÒÔĬÈ϶Ôblock½øÐÐѹËõ£¬ÁíÍâblockÖеļǼ»¹»á½øÐÐǰ׺±àÂ룬×ÛºÏÕâЩʹµÃX-EngineµÄ´æ´¢¿Õ¼äÏà¶ÔÓÚInnoDBÒýÇæÖ»ÓÐ1/3£¬²¿·Ö³¡¾°(±ÈÈçͼƬ¿Õ¼ä)ÉõÖÁÄÜѹËõµ½1/7¡£ÓÐÀû¾ÍÓбף¬×·¼Óд´øÀ´ÁËдÈëÓÅÊÆ£¬¶ÔÓÚÀúÊ·°æ±¾Êý¾ÝÐèҪͨ¹ýCompactionÈÎÎñÀ´½øÐлØÊÕ¡£ÓйØX-EngineµÄºËÐļ¼Êõ¿ÉÒԲο¼·¢±íÔÚSigmod19µÄÂÛÎÄ£¬¡¶X-Engine:
An Optimized Storage Engine for Large-scale E-commerce
Transaction Processing¡·

X-EngineÕûÌå¼Ü¹¹
2 ÎïÀí¸´ÖÆ¼Ü¹¹
ÎïÀí¸´ÖÆµÄºËÐÄÊÇͨ¹ýÒýÇæ×ÔÉíµÄÈÕÖ¾À´Íê³É¸´ÖÆ£¬±ÜÃâд¶îÍâµÄÈÕÖ¾´øÀ´µÄ³É±¾ºÍÐÔÄÜËðʧ¡£MySQLÔÉúµÄ¸´ÖƼܹ¹ÊÇͨ¹ýbinlogÈÕÖ¾½øÐи´ÖÆ£¬Ð´ÊÂÎñÐèҪͬʱдÒýÇæÈÕÖ¾ºÍbinlogÈÕÖ¾£¬Õâ´øÀ´µÄÎÊÌâÊÇÒ»·½Ãæµ¥¸öÊÂÎñÔڹؼüд·¾¶ÉÏÐèҪдÁ½·ÝÈÕÖ¾£¬Ð´ÐÔÄÜÊÜÖÆÓÚ¶þ½×¶ÎÌá½»ºÍbinlogµÄ´®ÐÐдÈ룬ÁíÒ»·½Ãæbinlog¸´ÖÆÊÇÂß¼¸´ÖÆ£¬¸´ÖÆÑÓ³ÙÎÊÌâҲʹµÃ¸´ÖƼܹ¹µÄ¸ß¿ÉÓã¬ÒÔ¼°Ö»¶Á¿âµÄ¶Á·þÎñÄÜÁ¦´ó´òÕÛ¿Û£¬ÓÈÆäÊÇÔÚ×öDDL²Ù×÷ʱ£¬Õâ¸öÑÓ³Ù»á½øÒ»²½·Å´ó¡£
ÔÚInnoDBÖÐÓÐredoºÍundoÁ½ÖÖÈÕÖ¾£¬undoÈÕÖ¾¿ÉÒÔÀí½âΪһÖÖÌØÊâµÄ¡°data¡±£¬ËùÒÔʵ¼ÊÉÏInnoDBµÄËùÓвÙ×÷¶¼ÄÜͨ¹ýredoÈÕÖ¾À´±£Ö¤³Ö¾ÃÐÔ¡£Òò´Ë£¬ÔÚ½øÐи´ÖÆÊ±£¬Ö»ÐèÒªÔÚÖ÷´Ó½Úµã¸´ÖÆredoÈÕÖ¾¼´¿É¡£X-EngineÒýÇæ°üº¬Á½ÖÖÈÕÖ¾£¬Ò»ÖÖÊÇwalÈÕÖ¾(WriteAheadLog)£¬ÓÃÓڼǼǰ̨µÄÊÂÎñµÄ²Ù×÷£»ÁíÒ»ÖÖÊÇSlog(StorageLog)£¬ÓÃÓڼǼLSM-treeÐÎ×´±ä»¯µÄ²Ù×÷£¬Ö÷ÒªÖ¸Compaction/FlushµÈ¡£walÈÕÖ¾±£Ö¤ÁËǰ̨ÊÂÎñµÄÔ×ÓÐԺͳ־ÃÐÔ£¬SlogÔò±£Ö¤ÁËX-EngineÄÚ²¿LSM-treeÐÎ×´±ä»¯µÄÔ×ÓÐԺͳ־ÃÐÔ£¬ÕâÁ½¸öÈÕ־ȱһ²»¿É£¬¶¼ÐèÒª¸´ÖÆÍ¬²½¡£
¹²Ïí´æ´¢ÏµÄÎïÀí¸´ÖÆ
 Primary-ReplicaÎïÀí¸´ÖÆ¼Ü¹¹
LSM-treeÒýÇæÒ»Ð´¶à¶ÁµÄÄÜÁ¦ÊǶÔPolarDB½øÐй¦ÄÜÔöÇ¿£¬ÌåÏÖÔڼܹ¹²ãÃæ¾ÍÊdzä·ÖÀûÓÃÒÑÓеĸ´ÖÆÁ´Â·£¬°üÀ¨Primary->Replica´«µÝÈÕÖ¾ÐÅÏ¢Á´Â·ºÍReplica->Primary´«µÝÐͬ¿ØÖÆÐÅÏ¢Á´Â·¡£InnoDBÊÂÎñÓÉÈô¸É¸ömtr(Mini-Transaction)×é³É£¬Ð´ÈëredoÈÕÖ¾µÄ×îСµ¥Î»ÊÇmtr¡£ÎÒÃÇÔÚInnodbµÄredoÈÕÖ¾ÐÂÔöÒ»ÖÖÈÕÖ¾ÀàÐÍÓÃÓÚ±íʾX-EngineÈÕÖ¾£¬½«X-EngineµÄÊÂÎñÄÚÈÝ×÷Ϊһ¸ömtrÊÂÎñдÈëµ½redoÈÕÖ¾ÖУ¬ÕâÑùInnodbµÄredoºÍX-EngineµÄwalÈÕÖ¾Äܹ²ÏíÒ»Ìõ¸´ÖÆÁ´Â·¡£ÓÉÓÚPrimaryºÍReplica¹²ÏíÒ»·ÝÈÕÖ¾ºÍÊý¾Ý£¬Dump_threadÖ»ÐèÒª´«µÝλµãÐÅÏ¢£¬ÓÉReplica¸ù¾ÝλµãÐÅϢȥ¶ÁredoÈÕÖ¾¡£Replica½âÎöÈÕÖ¾£¬¸ù¾ÝÈÕÖ¾ÀàÐÍÀ´·Ö·¢ÈÕÖ¾¸ø²»Í¬µÄ»Ø·ÅÒýÇæ£¬ÕâÖּܹ¹Ê¹µÃËùÓи´ÖÆ¿ò¼ÜÓë֮ǰµÄ¸´ÖƱ£³ÖÒ»Ö£¬Ö»ÐèÒªÐÂÔö½âÎö¡¢·Ö·¢X-EngineÈÕÖ¾Âß¼£¬ÐÂÔöX-EngineµÄ»Ø·ÅÒýÇæ£¬³ä·ÖÓëInnoDBÒýÇæ½âñî¡£
ÓÉÓÚLSM-tree×·¼ÓÐ´ÌØµã£¬ÄÚ´æmemtableÖÐÊý¾Ý»áÖÜÆÚÐÔµÄFlushµ½´ÅÅÌ£¬ÎªÁ˱£Ö¤PrimaryºÍReplica¶Áµ½Ò»ÖÂÐÔÎïÀíÊÓͼ£¬PrimaryºÍReplicaÐèҪͬ²½SwitchMemtable£¬ÐèÒªÐÂÔöÒ»ÌõSwitchMemtable¿ØÖÆÈÕÖ¾À´Ðµ÷¡£redoÈÕÖ¾³Ö¾Ã»¯ºó£¬Primaryͨ¹ýÈÕÖ¾·½Ê½½«Î»µãÐÅÏ¢Ö÷¶¯ÍÆË͸øReplica£¬ÒÔ±ãReplica¼°Ê±»Ø·Å×îеÄÈÕÖ¾£¬¼õÉÙͬ²½ÑÓ³Ù¡£¶ÔÓÚSlogÈÕÖ¾£¬¼È¿ÉÒÔ²ÉÓÃÀàËÆÓÚredoµÄÈÕÖ¾·½Ê½À´Ö÷¶¯¡°push¡±·½Ê½À´Í¬²½Î»µã£¬Ò²¿ÉÒÔ²ÉÓÃReplicaÖ÷¶¯¡°pull¡±µÄ·½Ê½À´Í¬²½¡£SLogÊǺǫ́ÈÕÖ¾£¬Ïà¶ÔÓÚǰ̨ÊÂÎñ»Ø·ÅʵʱÐÔÒªÇ󲻸ߣ¬²»±ØÒª½«redoλµãºÍSLogλµã¶¼·ÅÔÚÒ»Ìõ¸´ÖÆÁ´Â·Ôö¼Ó¸´ÔÓÐÔ£¬ËùÒÔ²ÉÓÃÁËReplicaµÄ¡°pull¡±µÄ·½Ê½À´Í¬²½SLog¡£
ÔÖ±¸¼¯Èº¼äµÄÎïÀí¸´ÖÆ

Primary-StandbyÎïÀí¸´ÖÆ¼Ü¹¹
Óë¹²Ïí¼¯Èº¸´ÖƲ»Í¬£¬ÔÖ±¸¼¯ÈºÓжÀÁ¢Ò»·Ý´æ´¢£¬Primary¡ª>StandbyÐèÒª´«µÝÍêÕûµÄredoÈÕÖ¾¡£StanbyÓëReplicaÇø±ðÔÚÓÚÈÕÖ¾À´Ô´²»Í¬£¬Replica´Ó¹²Ïí´æ´¢ÉÏ»ñÈ¡ÈÕÖ¾£¬Standy´Ó¸´ÖÆÁ´Â·»ñÈ¡ÈÕÖ¾£¬ÆäËü½âÎöºÍ»Ø·Å·¾¶ÊÇÒ»ÑùµÄ¡£ÊÇ·ñ½«SlogÈÕÖ¾×÷ΪredoÈÕÖ¾Ò»²¿·Ö´«µÝ¸øStandbyÊÇÒ»¸öÎÊÌ⣬SlogÈÕÖ¾ÓÉFlush/Compaction¶¯×÷²úÉú£¬¼Ç¼µÄÊÇLSM-treeÐÎ×´µÄÎïÀí±ä»¯¡£Èç¹ûҲͨ¹ýredoÈÕÖ¾Á´Â·Í¬²½¸øStandby£¬»á´øÀ´Ò»Ð©¸´ÔÓÐÔ£¬Ò»·½ÃæÊÇX-EngineÄÚ²¿Ð´ÈÕÖ¾µÄ·½Ê½ÐèÒª¸Ä¶¯£¬ÐèÒªÐÂÔöÐÂÔöÎļþ²Ù×÷Ïà¹ØµÄÎïÀíÈÕÖ¾À´È·±£Ö÷´ÓÎïÀí½á¹¹Ò»Ö£¬¹ÊÕϻָ´µÄÂß¼Ò²ÐèÒªÊÊÅ䣻ÁíÒ»·½Ã棬Slog×÷Ϊºǫ́ÈÎÎñµÄ²Ù×÷ÈÕÖ¾£¬Òâζן´ÖÆÁ´Â·ÉϵÄËùÓнÇÉ«¶¼ÐèҪͬ¹¹£»Èç¹û·ÅÆúͬ¹¹£¬ÄÇôStandy½Úµã¿ÉÄܻᴥ·¢Flush/CompactionÈÎÎñдÈÕÖ¾£¬ÕâÓëÎïÀí¸´ÖÆÖУ¬Ö»ÔÊÐíPrimaryдÈÕÖ¾ÊÇÏàÎ¥±³µÄ¡£Êµ¼ÊÉÏ£¬Slogͬ²½Ð´Èëµ½redo
logÖв»ÊDZØÐëµÄ£¬ÒòΪSlogÊǺǫ́ÈÕÖ¾£¬Õâ¸ö¶¯×÷²»¼°Ê±»Ø·Å²¢²»Ó°ÏìÊý¾ÝÊÓͼµÄÕýÈ·ÐÔ£¬Òò´Ë£¬¸´ÖÆÁ´Â·ÉÏÖ»°üº¬redoÈÕÖ¾(X-Engine
walÈÕÖ¾ºÍInnoDB redoÈÕÖ¾)£¬Standby×Ô¼º¿ØÖÆFlush/Compaction²úÉúSlogÈÕÖ¾£¬ÕâÑùStandbyÒ²²»±ØÓëPrimary½ÚµãÎïÀíͬ¹¹£¬Õû¸ö¼Ü¹¹ÓëÏÖÓÐÌåϵÏàÆ¥Å䣬ͬʱҲ¸ü¼ÓÁé»î¡£
3 ²¢ÐÐÎïÀí¸´ÖÆ¼ÓËÙ
X-EngineµÄÊÂÎñ°üÀ¨Á½¸ö½×¶Î£¬µÚÒ»¸ö½×¶ÎÊǶÁд½×¶Î£¬Õâ¸ö½×¶ÎÊÂÎñ²Ù×÷Êý¾Ý»á»º´æÔÚÊÂÎñÉÏÏÂÎÄÖУ¬µÚ¶þ½×¶ÎÊÇÌá½»½×¶Î£¬½«²Ù×÷Êý¾ÝдÈëµ½redoÈÕÖ¾³Ö¾Ã»¯£¬Ëæºóдµ½memtableÖй©¶Á²Ù×÷·ÃÎÊ¡£¶ÔÓÚStandby/Replica½Úµã¶øÑÔ£¬»Ø·Å¹ý³ÌÓëPrimary½ÚµãÀàËÆ£¬´ÓredoÖнâÎöµ½ÊÂÎñÈÕÖ¾£¬È»ºó½«ÊÂÎñ»Ø·Åµ½memtableÖС£ÊÂÎñÖ®¼ä²»´æÔÚ³åÍ»£¬Í¨¹ýSequence°æ±¾ºÅÀ´È·¶¨¿É¼ûÐÔ¡£²¢ÐлطŵÄÁ£¶ÈÊÇÊÂÎñ£¬ÐèÒª´¦ÀíµÄÒ»¸ö¹Ø¼üÎÊÌâ¾ÍÊǿɼûÐÔÎÊÌâ¡£ÊÂÎñ´®ÐлطÅʱ£¬Sequence°æ±¾ºÅ¶¼ÊÇÁ¬ÐøµÝÔöµÄ£¬ÊÂÎñ¿É¼ûÐÔ²»´æÔÚÎÊÌâ¡£ÔÚ²¢Ðлطų¡¾°Ï£¬ÎÒÃÇÈÔÈ»ÐèÒª±£Ðò£¬Í¨¹ýÒýÈë¡°»¬¶¯´°¿Ú¡±»úÖÆ£¬Ö»ÓÐÁ¬ÐøÒ»¶ÎûÓпն´µÄSequence²ÅÄÜÍÆ½øÈ«¾ÖµÄSequence°æ±¾ºÅ£¬Õâ¸öÈ«¾ÖSequenceÓÃÓÚ¶Á²Ù×÷»ñÈ¡¿ìÕÕ¡£

²¢Ðи´ÖÆ¿ò¼Ü
һд¶à¶Á¼Ü¹¹Ï£¬ÎªÁ˱£Ö¤Í¬Ò»Êý¾Ý¿âʵÀýµÄPrimary¡¢Replica¡¢StandbyÈý¸ö½ÇÉ«µÄÄÚ´æ¾µÏñÍêȫһÖ£¬ÐÂÔöÁËÒ»ÖÖSwitchMemtableLog£¬¸ÃLog
RecordÔÚRWµÄswitch_memtable¹ý³ÌÖвúÉú£¬Òò´ËRO¡¢Standby²»ÔÙÖ÷¶¯´¥·¢switch_memtable²Ù×÷£¬¶øÊÇͨ¹ý´ÓRWÉÏͬ²½SwitchMemtableLog½øÐÐswitch_memtable¡£SwitchMemtable²Ù×÷ÊÇÒ»¸öÈ«¾ÖµÄÆÁÕϵ㣬ÒÔ·ÀÖ¹µ±Ç°¿ÉдmemtableÔÚ²åÈë¹ý³ÌÖÐswitch´Ó¶øµ¼ÖÂÊý¾Ý´íÂÒ¡£ÁíÍ⣬¶ÔÓÚ2PCÊÂÎñ£¬²¢·¢¿ØÖÆÒ²ÐèÒª×öÊÊÅä¡£Ò»¸ö2PCÊÂÎñ³ýÁËÊý¾Ý±¾ÉíµÄÈÕÖ¾£¬»¹°üÀ¨BeginPrepare¡¢EndPrepare¡¢Commit¡¢RollbackËÄÀàÈÕÖ¾£¬Ð´Èë¹ý³ÌÖб£Ö¤BeginPrepareºÍEndPrepareдÈëµ½Ò»¸öWriteBatchÖв¢Ë³ÐòÂäÅÌ£¬Òò´Ë¿ÉÒÔ±£Ö¤Í¬Ò»¸öÊÂÎñµÄPrepareÈÕÖ¾¶¼»á±»½âÎöµ½Ò»¸öReplayTaskÖС£ÔÚ²¢ÐлطŹý³ÌÖУ¬ÓÉÓÚÎÞ·¨±£Ö¤Commit»òRollbackÈÕÖ¾Ò»¶¨ºóÓÚPrepareÈÕÖ¾±»»Ø·Å£¬Òò´ËÈç¹ûCommit¡¢RollbackÈÕÖ¾ÏÈÓÚPrepareÈÕÖ¾±»»Ø·Å£¬ÄÇôÔÚÈ«¾ÖµÄrecovered_transaction_mapÖвåÈëÒ»¸ökey¶ÔxidµÄ¿ÕÊÂÎñ£¬¶ÔÓ¦µÄÊÂÎñ״̬ΪCommit»òRollback£»ËæºóPrepareÈÕÖ¾Íê³É»Ø·Åʱ£¬Èç¹û·¢ÏÖrecovered_transaction_mapÖÐÒѾ´æÔÚ¶ÔÓ¦µÄÊÂÎñ£¬ÄÇô¿ÉÒÔ¸ù¾ÝÊÂÎñµÄ״̬À´¾ö¶¨Ö±½ÓÌá½»ÊÂÎñ»¹ÊǶªÆúÊÂÎñ¡£
¶ÔÓÚB+TreeµÄÎïÀí¸´ÖÆ£¬LSM-treeµÄÎïÀí¸´ÖÆ²¢²»ÊÇÕæÕýµÄ¡°ÎïÀí¡±¸´ÖÆ¡£ÒòΪB+Tree´«µÝµÄredoµÄÄÚÈÝÊÇÊý¾ÝÒ³ÃæµÄÐ޸쬶øLSM-tree´«µÝµÄredoÄÚÈÝÊÇKeyValueÖµ¡£Õâ´øÀ´µÄ½á¹ûÊÇ£¬B+treeÎïÀí¸´ÖÆ¿ÉÒÔ»ùÓÚÊý¾ÝÒ³Á£¶È×ö²¢·¢»Ø·Å£¬¶øLSM-treeµÄÎïÀí¸´ÖÆÊÇ»ùÓÚÊÂÎñÁ£¶ÈµÄ²¢·¢»Ø·Å¡£B+tree²¢·¢»Ø·ÅÓÐËü×ÔÉíµÄ¸´ÔÓÐÔ£¬±ÈÈçÐèÒª½â¾öϵͳҳ»Ø·ÅÓëÆÕͨÊý¾ÝÒ³»Ø·ÅÏȺó˳ÐòÎÊÌ⣬²¢ÇÒ»¹ÐèÒª½â¾öͬһ¸ömtrÖжà¸öÊý¾ÝÒ³²¢·¢»Ø·Å¿ÉÄܵ¼ÖµÄÎïÀíÊÓͼ²»Ò»ÖÂÎÊÌâ¡£LSM-treeÐèÒª½â¾ö¶à¸ö½ÚµãÔÚͬÑùλÖÃSwitchMemtable£¬ÒÔ¼°2PCÊÂÎñ»Ø·ÅµÈÎÊÌâ¡£
4 MVCC(¶à°æ±¾²¢·¢¿ØÖÆ)
ÎïÀí¸´ÖÆ¼¼Êõ½â¾öÁËÊý¾Ýͬ²½µÄÎÊÌ⣬Ϊ´æ´¢¼ÆËã·ÖÀë´òÏÂÁË»ù´¡¡£ÎªÁËʵÏÖµ¯ÐÔ£¬¶¯Ì¬Éý½µÅ䣬Ôöɾֻ¶Á½ÚµãµÄÄÜÁ¦£¬ÐèÒªÖ»¶Á½Úµã¾ß±¸Ò»ÖÂÐÔ¶ÁµÄÄÜÁ¦£¬ÁíÍâRW½ÚµãºÍRO½Úµã¹²ÏíÒ»·ÝÊý¾Ý£¬ÀúÊ·°æ±¾»ØÊÕÒ²ÊDZØÐèÒª¿¼ÂǵÄÎÊÌâ¡£
Ò»ÖÂÐÔ¶Á
X-EngineÌṩ¿ìÕÕ¶ÁµÄÄÜÁ¦£¬Í¨¹ý¶à°æ±¾»úÖÆÀ´ÊµÏÖ¶Áд²»»¥³âЧ¹û¡£´ÓÉÏÊöµÄX-Engine¼Ü¹¹Í¼¿ÉÒÔ¿´µ½£¬X-EngineµÄÊý¾Ýʵ¼ÊÉϰüÀ¨ÁËÄÚ´æºÍ´ÅÅÌÁ½²¿·Ö£¬²»Í¬ÓÚInnoDBÒýÇæÄÚ´æÖÐpageÊÇ´ÅÅÌÉÏpageµÄ»º´æ£¬X-EngineÖÐÄÚ´æÊý¾ÝÓë´ÅÅÌÊý¾ÝÍêÈ«Òì¹¹£¬Ò»·Ý¡°¿ìÕÕ¡±ÐèÒª¶ÔÓ¦µÄÊÇÄÚ´æ+´ÅÅÌÊý¾Ý¡£X-Engine²ÉÓÃ×·¼Óд·½Ê½£¬ÐÂÊý¾Ý½øÀ´»á²úÉúеÄmemtable£¬ºǫ́ÈÎÎñ×öflush/compactionÈÎÎñÒ²»á²úÉúеÄextent¡£ÄÇôÈçºÎ»ñȡһÖÂÐÔÊÓÍ¼ÄØ£¿X-EngineÄÚ²¿Êµ¼ÊÉÏÊÇͨ¹ýMetaSnapshot+SnapshotÀ´¹ÜÀí£¬Ê×ÏÈÿ¸öMetaSnapshot¶ÔÓ¦Ò»×émemtableºÍL0£¬L1,
L2µÄextents£¬ÕâÑùÔÚÎïÀíÉÏÈ·¶¨ÁËÊý¾Ý·¶Î§£¬È»ºóͨ¹ýSnapshotÀ´´¦ÀíÐм¶°æ±¾µÄ¿É¼ûÐÔ£¬ÕâÀïµÄSnapshotʵ¼ÊÉϾÍÊÇÒ»¸öÊÂÎñÌá½»ÐòÁкÅSequence¡£²»Í¬ÓÚInnoDBÊÂÎñ±àºÅ²ÉÓÿªÊ¼Ðò£¬ÐèҪͨ¹ý»îÔ¾ÊÂÎñÊÓͼÀ´ÅжϼǼµÄ¿É¼ûÐÔ£»X-EngineÊÂÎñ²ÉÓÃÌá½»Ðò£¬Ã¿Ìõ¼Ç¼ÓÐÒ»¸öΨһµÝÔöÐòÁкÅSequence£¬ÅжÏÐм¶°æ±¾µÄ¿É¼ûÐÔÖ»ÐèÒª±È½ÏSequence¼´¿É¡£ÔÚһд¶à¶ÁµÄģʽÏ£¬Replica½ÚµãÓëPrimary½Úµã¹²ÏíÒ»·Ý´ÅÅÌÊý¾Ý£¬¶ø´ÅÅÌÊý¾ÝÊÇÓÐÄÚ´æÖÐÊý¾Ý¶¨ÆÚdump³öÀ´µÄ£¬Òò´ËÐèÒª±£Ö¤PrimaryºÍReplica½ÚµãÓÐÏàͬµÄÇÐmemtableλµã£¬´Ó¶ø±£Ö¤Êý¾ÝÊÓͼµÄÒ»ÖÂÐÔ¡£
һд¶à¶ÁϵÄCompaction
ÔÚһд¶à¶Á³¡¾°Ï£¬Replica¿ÉÒÔͨ¹ýÀàËÆÓÚPrimaryµÄ¿ìÕÕ»úÖÆÀ´ÊµÏÖ¿ìÕÕ¶Á£¬ÐèÒª´¦ÀíµÄÎÊÌâÊÇÀúÊ·°æ±¾»ØÊÕÎÊÌâ¡£ÀúÊ·°æ±¾µÄ»ØÊÕ£¬ÒÀÀµÓÚCompactionÈÎÎñÀ´Íê³É£¬ÕâÀïµÄ»ØÊÕ°üÀ¨Á½²¿·Ö£¬Ò»²¿·ÖMetaSnapshotµÄ»ØÊÕ£¬Ö÷ҪȷÈÏÄÄЩmemtableºÍextents¿ÉÒÔ±»ÎïÀí»ØÊÕµô£¬ÁíÒ»²¿·ÖÊÇÐм¶¶à°æ±¾»ØÊÕ£¬ÕâÀïÖ÷ÒªÊÇÈ·ÈÏÄÄЩÀúÊ·°æ±¾ÐпÉÒÔ±»»ØÊÕµô¡£¶ÔÓÚMetaSnapshotµÄ»ØÊÕ£¬Primary»áÊÕ¼¯ËùÓÐReplica½ÚµãÉϵÄ×îС²»ÔÙʹÓõÄMetaSnapshot°æ±¾ºÅ£¬X-EngineÒýÇæµÄÿ¸öË÷Òý¶¼ÊÇÒ»¸öLSM-tree£¬Òò´Ë»ã±¨MetaSnaphot°æ±¾ºÅÊÇË÷ÒýÁ£¶ÈµÄ¡£PrimaryÊÕ¼¯ÍêMetaSnapshot°æ±¾ºÅ£¬¼ÆËã×îС¿ÉÒÔ»ØÊÕµÄMetaSnapshot½øÐÐ×ÊÔ´»ØÊÕ²Ù×÷£¬»ØÊÕ²Ù×÷ÒÔSlogÈÕÖ¾µÄ·½Ê½Í¬²½¸øReplica½Úµã¡£Replica½ÚµãÔڻطÅÈÕÖ¾½øÐÐ×ÊÔ´»ØÊÕʱ£¬ÐèÒª½«ÄÚ´æºÍ´ÅÅÌ×ÊÔ´·Ö¿ª£¬ÄÚ´æ×ÊÔ´ÔÚ¸÷¸ö½ÚµãÊǶÀÁ¢µÄ£¬´ÅÅÌ×ÊÔ´Êǹ²ÏíµÄ£¬Òò´ËReplica½ÚµãµÄÄÚ´æ×ÊÔ´¿ÉÒÔ¶ÀÁ¢ÊÍ·Å£¬¶ø´ÅÅÌ×ÊÔ´ÔòͳһÓÉPrimary½ÚµãÀ´ÊÍ·Å¡£¶ÔÓÚÐм¶¶à°æ±¾µÄ»ØÊÕ£¬Í¬ÑùÐèÒªÓÉPrimary½ÚµãÊÕ¼¯ËùÓÐReplica½Úµã×îСÐòÁкÅSequence£¬ÓÉPrimary½Úµãͨ¹ýCompactionÈÎÎñÀ´Ïû³ý¡£Õâ¿é»ã±¨Á´Â·¸´ÓÃPolarDBµÄACKÁ´Â·£¬Ö»ÊÇÐÂÔöÁËX-EngineµÄ»ã±¨ÐÅÏ¢¡£
5 DDLµÄÎïÀí¸´ÖÆÈçºÎʵÏÖ
ÎïÀí¸´ÖÆÏà¶ÔÓÚÂß¼¸´ÖÆÒ»¸ö¹Ø¼üÓÅÊÆÔÚÓÚDDL£¬¶ÔÓÚDDL¶øÑÔ£¬Âß¼¸´ÖÆ¿ÉÒÔ¼òµ¥Àí½âΪ¸´ÖÆSQLÓï¾ä£¬DDLÔÚ´Ó¿âÉÏ»áÖØÐÂÔÙÖ´ÐÐÒ»±é¡£Âß¼¸´ÖƶÔÓڱȽÏÖØµÄDDL²Ù×÷£¬±ÈÈçAlter
tableÓ°Ïì·Ç³£´ó£¬Ò»¸öAlter±ä¸ü²Ù×÷ÔÚÖ÷¿âÖ´ÐÐÐèÒª°ëСʱ£¬ÄÇô¸´ÖƵ½´Ó¿âÒ²ÐèÒªÔÙÖ´ÐаëСʱ£¬ÄÇôÖ÷´ÓÑÓ³Ù×î´ó¿ÉÄܾͻáÊÇ1¸öСʱ£¬Õâ¸öÑÓ³Ù¶ÔÖ»¶Á¿âÌṩ¶Á·þÎñ²úÉúÑÏÖØÓ°Ïì¡£
Server²ã¸´ÖÆ
DDL²Ù×÷Í¬Ê±Éæ¼°µ½Server²ãºÍÒýÇæ²ã£¬°üÀ¨×ֵ䣬»º´æÒÔ¼°Êý¾Ý¡£×î»ù´¡µÄDDL²Ù×÷£¬±ÈÈç
Create/Drop²Ù×÷£¬ÔÚһд¶à¶Á¼Ü¹¹Ï£¬Òª¿¼ÂÇÊý¾ÝÓëÊý¾Ý×ֵ䣬Êý¾ÝÓë×ֵ仺´æÒ»ÖÂÐÔµÈÎÊÌ⡣һд¶à¶ÁµÄ»ù´¡ÊÇÎïÀí¸´ÖÆ£¬ÎïÀí¸´ÖÆÈÕÖ¾Ö»ÔÚÒýÇæ²ãÁ÷¶¯£¬²»Éæ¼°µ½Server²ã£¬Òò´ËÐèÒªÐÂÔöÈÕÖ¾À´½â¾öDDL²Ù×÷µ¼ÖµIJ»Ò»ÖÂÎÊÌâ¡£ÎÒÃÇÐÂÔöÁËmetaÐÅÏ¢±ä¸üµÄÈÕÖ¾£¬²¢×÷ΪredoÈÕÖ¾µÄÒ»²¿·Öͬ²½¸ø´Ó½Úµã£¬Õâ¸ömetaÐÅÏ¢±ä¸üÈÕÖ¾Ö÷Òª°üÀ¨Á½²¿·ÖÄÚÈÝ£¬Ò»¸öÊÇ×Öµäͬ²½£¬Ö÷ÒªÊÇͬ²½MDLËø£¬È·±£Primary/Replica½Úµã×ÖµäÒ»Ö£»ÁíÒ»¸öÊÇ×ֵ仺´æÍ¬²½£¬ReplicaÉϵÄÄÚ´æÊǶÀÁ¢µÄ£¬Server²ã»º´æµÄ×ÖµäÐÅÏ¢Ò²ÐèÒª¸üУ¬Òò´ËÒªÐÂÔöÈÕÖ¾À´´¦Àí£¬±ÈÈçDrop
Table/Drop db/Upate function/Upate precedureµÈ²Ù×÷¡£ÁíÍ⣬»¹ÐèҪͬ²½Ê§Ð§ReplicaµÄQueryCache£¬±ÜÃâʹÓôíÎóµÄ²éѯ»º´æ¡£
ÒýÇæ²ã¸´ÖÆ
X-EngineÒýÇæÓëInnoDBÒýÇæÒ»ÑùÊÇË÷Òý×éÖ¯±í£¬ÔÚX-EngineÄÚ²¿£¬Ã¿¸öË÷Òý¶¼ÊÇÒ»¸öLSM-tree½á¹¹£¬ÄÚ²¿³ÆÎªSubtable£¬ËùÓÐдÈë¶¼ÊÇÔÚSubtableÖнøÐУ¬SubtableµÄÉúÃüÖÜÆÚÓëDDL²Ù×÷½ôÃÜÏà¹Ø¡£Óû§·¢Æð½¨±í¶¯×÷»á²úÉúSubtable£¬Õâ¸öÊÇÎïÀíLSM-tree½á¹¹µÄÔØÌ壬Ȼºó²ÅÄÜÓкóÐøµÄDML²Ù×÷£»Í¬ÑùµÄ£¬Óû§·¢Æðɾ±í¶¯×÷ºó£¬ËùÓÐÕâ¸öSubtableµÄDML²Ù×÷¶¼Ó¦¸ÃÖ´ÐÐÍê±Ï¡£Create/Drop
Table²Ù×÷Éæ¼°µ½Ë÷Òý½á¹¹µÄ²úÉúºÍÏûÍö£¬»áͬʱ²úÉúredo¿ØÖÆÈÕÖ¾ºÍSLogÈÕÖ¾£¬ÔڻطÅʱ£¬ÐèÒª½â¾öredo¿ØÖÆÈÕÖ¾ºÍSLogÈÕÖ¾»Ø·ÅµÄʱÐòÎÊÌâ¡£ÕâÀïÎÒÃǽ«¶ÔÓ¦SubtableµÄredoÈÕÖ¾µÄLSNλµã³Ö¾Ã»¯µ½SLogÖУ¬×÷Ϊһ¸öͬ²½Î»µã£¬Replica»Ø·Åʱ£¬Á½¸ö»Ø·ÅÁ´Â·×öе÷¼´¿É£¬redoÈÕÖ¾¼Ç¼µÄÊÇǰ̨²Ù×÷£¬Slog¼Ç¼µÄÊǺǫ́²Ù×÷£¬Òò´ËÁ½¸öÁ´Â·×öÐͬʱ£¬ÐèÒª¾¡Á¿±ÜÃâredo¸´ÖÆÁ´Â·µÈ´ýSlog¸´ÖÆÁ´Â·¡£±ÈÈ磬¶ÔÓÚCreate²Ù×÷£¬»Ø·ÅSlogʱ£¬ÐèÒªµÈ´ý¶ÔÓ¦µÄredoÈÕÖ¾µÄLSNλµã»Ø·ÅÍê±Ï²ÅÍÆ½ø£»¶ÔÓÚDROP²Ù×÷£¬»Ø·ÅSLogÒ²ÐèÒªÐͬµÈ´ý£¬±ÜÃâ»Ø·Åǰ̨ÊÂÎñÕÒ²»µ½Subtable¡£
OnlineDDL¸´ÖƼ¼Êõ
¶ÔÓÚAlter Table²Ù×÷£¬X-EngineʵÏÖÁËÒ»Ì×OnlineDDL»úÖÆ£¬ÏêϸʵÏÖÔÀí¿ÉÒԲο¼ÄÚºËÔ±¨¡£ÔÚһд¶à¶Á¼Ü¹¹Ï£¬X-EngineÒýÇæÔÚ´¦ÀíÕâÀàAlter²Ù×÷ʱ²ÉÓÃÁËÎïÀí¸´ÖÆ£¬Êµ¼ÊÉ϶ÔÓÚReplica¶øÑÔ£¬ÓÉÓÚÊÇͬһ·ÝÊý¾Ý£¬²¢²»ÐèÒªÖØÐÂÉú³ÉÎïÀíextent£¬Ö»ÐèҪͬ²½ÔªÐÅÏ¢¼´¿É¡£¶ÔÓÚStandby½Úµã£¬ÐèҪͨ¹ýÎïÀíextent¸´ÖÆÀ´ÖØÐ¹¹½¨Ë÷Òý¡£DDL¸´ÖÆÊ±£¬Êµ¼ÊÉϰüº¬ÁË»ùÏߺÍÔöÁ¿²¿·Ö¡£DDL¸´ÖƳä·ÖÀûÓÃÁËX-EngineµÄ·Ö²ã´æ´¢ÒÔ¼°LSM-tree½á¹¹×·¼ÓÐ´ÌØµã£¬ÔÚ»ñÈ¡¿ìÕÕºó£¬ÀûÓÿìÕÕÖ±½Ó¹¹½¨L2×÷Ϊ»ùÏßÊý¾Ý£¬Õⲿ·ÖÊý¾ÝÒÔextent¿é¸´ÖÆÐÎʽ£¬Í¨¹ýredoͨµÀ´«µÝ¸øStandby£¬¶øÔöÁ¿Êý¾ÝÔòÓëÆÕͨµÄDMLÊÂÎñÒ»Ñù£¬ËùÒÔÕû¸ö²Ù×÷¶¼ÊÇͨ¹ýÎïÀí¸´ÖÆ½øÐУ¬´ó´óÌá¸ßÁ˸´ÖÆÐ§ÂÊ¡£ÕâÀïÐèÒªÏÞÖÆµÄ½ö½öÊÇÔÚAlter²Ù×÷¹ý³ÌÖУ¬½ûÖ¹×öµ½L2µÄcompaction¼´¿É¡£Õû¸öOnlineDDL¹ý³ÌÓëInnoDBµÄOnlineDDLÁ÷³ÌÀàËÆ£¬Ò²ÊǰüÀ¨3¸ö½×¶Î£¬prepare½×¶Î£¬build½×¶ÎºÍcommit½×¶Î£¬ÆäÖÐprepare½×¶ÎÐèÒª»ñÈ¡¿ìÕÕ£¬commit½×¶ÎÔªÊý¾ÝÉúЧ£¬ÐèҪͨ¹ýMDLËøÀ´È·±£×ÖµäÒ»Ö¡£Óë»ùÓÚB+treeµÄOnlineDDL¸´ÖÆÏà±È£¬»ùÏß²¿·Ö£¬B+treeË÷Òý¸´ÖƵÄÊÇÎïÀíÒ³£¬¶øLSM-tree¸´ÖƵÄÊÇÎïÀíextent£»ÔöÁ¿²¿·ÖB+treeË÷ÒýÊÇͨ¹ý¼ÇÔöÁ¿ÈÕÖ¾£¬»Ø·ÅÔöÁ¿ÈÕÖ¾µ½Êý¾ÝҳдredoÈÕÖ¾½øÐÐͬ²½£¬LSM-treeÔòÊÇͨ¹ýDMLǰ̨²Ù×÷дredoµÄ·½Ê½Í¬²½¡£

OnlineDDL¸´ÖÆ
6 Ë«ÒýÇæ¼¼Êõ
CheckpointλµãÍÆ½ø
ͨ¹ýwal-in-redo¼¼Êõ£¬ÎÒÃǽ«X-EngineµÄwalÈÕ־ǶÈëµ½ÁËInnoDBµÄredoÖУ¬Ê×ÏÈÒª´¦ÀíµÄÒ»¸öÎÊÌâ¾ÍÊÇredoÈÕÖ¾µÄ»ØÊÕÎÊÌâ¡£ÈÕÖ¾»ØÊÕÊ×ÏÈÉæ¼°µ½Ò»¸öλµãÎÊÌ⣬ÈںϽøredoÈÕÖ¾ºó£¬X-EngineÄÚ²¿½«RecoveryPoint¶¨ÒåΪ<lsn,
Sequence>£¬lsn±íʾredoÈÕÖ¾µÄλµã£¬SequenceΪ¶ÔÓ¦µÄX-EngineµÄÊÂÎñµÄ°æ±¾ºÅ¡£RedoÈÕÖ¾»ØÊÕÓëCheckpoint(¼ì²éµã)Ç¿Ïà¹Ø£¬È·±£Checkpointλµã¼°Ê±ÍƽøÊÇÐèÒª¿¼ÂǵÄÎÊÌ⣬·ñÔòredoÈÕÖ¾µÄ¶Ñ»ýÒ»·½ÃæÓ°Ïì´ÅÅ̿ռ䣬ÁíÒ»·½ÃæÒ²Ó°Ïì»Ö¸´ËÙ¶È¡£ÕâÀïÓÐÒ»¸ö»ù±¾µÄÔÔòÊÇ£¬Checkpoint=min(innodb-ckpt-lsn,
xengine-ckpt-lsn)£¬xengine-ckpt-lsn¾ÍÊÇÀ´Ô´ÓÚX-EngineµÄRecoveryPoint£¬È·±£ÈκÎÒýÇæÓÐÄÚ´æÊý¾ÝûÓÐÂäÅÌʱ£¬¶ÔÓ¦µÄredoÈÕÖ¾²»Äܱ»ÇåÀí¡£ÎªÁ˱ÜÃâX-EngineµÄcheckpointÍÆ½øÓ°ÏìÕûÌåλµãÍÆ½ø£¬ÄÚ²¿»áÈ·±£xengine-ckpt-lsnÓëÈ«¾ÖµÄredo-lsn±£³ÖÒ»¶¨µÄ·§Öµ£¬³¬¹ý·§ÖµÔò»áÇ¿ÖÆ½«memtableÂäÅÌ£¬Íƽø¼ì²éµã¡£
Êý¾Ý×ÖµäÓëDDL
X-Engine×÷Ϊһ¸öÊý¾Ý¿âÒýÇæÓÐ×Ô¼º¶ÀÁ¢µÄ×ֵ䣬InnoDBÒ²ÓÐ×Ô¼ºµÄ×ֵ䣬Á½·Ý×ÖµäÔÚÒ»¸öϵͳÀïÃæ¿Ï¶¨»á´æÔÚÎÊÌ⡣ΪÁ˽â¾öÎÊÌ⣬ÕâÀïÓÐÁ½ÖÖ˼·£¬Ò»ÊÇX-EngineÈÔÈ»±£Áô×Ô¼ºµÄÊý¾Ý×ֵ䣬ÔÚ×öDDLʱ£¬Í¨¹ý2PCÊÂÎñÀ´±£Ö¤Ò»ÖÂÐÔ£¬Õâ´øÀ´µÄÎÊÌâÊÇÐèÒªÓÐе÷Õß¡£Ò»°ãÇé¿öÏ£¬MySQLµÄе÷ÕßÊÇbinlogÈÕÖ¾£¬ÔÚbinlog¹Ø±ÕʱÊÇtclogÈÕÖ¾¡£ÏÔÈ»£¬´Ó¹¦ÄܺÍÐÔÄܽǶȣ¬ÎÒÃǶ¼²»»áÇ¿ÒÀÀµbinlogÈÕÖ¾¡£ÎÒÃDzÉÓÃÁËÁíÍâÒ»ÖÖ˼·£¬X-Engine²»ÔÙÓÃ×ÔÉíÒýÇæ´æ´¢ÔªÊý¾Ý£¬ËùÓÐÔªÊý¾Ý¾ùͨ¹ýInnoDBÒýÇæ³Ö¾Ã»¯£¬X-EngineÔªÊý¾Ýʵ¼ÊÉÏÊÇInnoDB×ÖµäµÄÒ»·Ý»º´æ£¬ÄÇôÔÚ×öDDL±ä¸üʱ£¬ÔªÊý¾Ý²¿·Öʵ¼ÊÉÏֻɿ¼°InnoDBÒýÇæ£¬Í¨¹ýÊÂÎñÄܱ£Ö¤DDLµÄÔ×ÓÐÔ¡£
ͨ¹ýÔªÊý¾Ý¹éÒ»»¯ÎÒÃǽâ¾öÁËÔªÊý¾ÝµÄÔ×ÓÐÔÎÊÌ⣬µ«X-EngineÊý¾ÝºÍInnoDBÔªÊý¾ÝÈçºÎ±£Ö¤Ò»ÖÂÒ²ÊǸöÎÊÌâ¡£±ÈÈçÒ»¸öDDL²Ù×÷£¬alter
table xxx engine = xengine£¬Õâ¸öDDLÊǽ«innodb±íתΪxengine±í£¬ÓÉÓÚ±í½á¹¹±ä¸üÊÇInnodb×ÖµäÐ޸ģ¬Êý¾ÝÊÇÔÚÐÞ¸ÄX-Engine£¬ÊÇÒ»¸ö¿çÒýÇæÊÂÎñ£¬¿çÒýÇæÊÂÎñÐèҪͨ¹ýе÷Õß±£Ö¤Ò»ÖÂÐÔ¡£ÎªÁ˱ÜÃâÒýÈëbinlog×÷Ϊе÷ÕßÒÀÀµ£¬tclog×÷Ϊе÷ÕßûÓо¹ý´ó¹æÄ£Éú²ú»·¾³ÑéÖ¤£¬ÎÒÃÇÑ¡ÔñÁËÁíÍâÒ»ÖÖ´¦Àí·½Ê½£¬¾ßÌåÀ´Ëµ£¬ÔÚÉæ¼°¿çÒýÇæÊÂÎñʱ£¬ÓÅÏÈÌá½»X-EngineÊÂÎñ£¬È»ºóÔÙÌá½»InnoDBÊÂÎñ¡£¶ÔÓÚDDLÀ´Ëµ£¬¾ÍÊÇ¡°ÏÈÊý¾Ý£¬ºóÔªÊý¾Ý¡±£¬ÔªÊý¾ÝÌá½»ÁË£¬²ÅÕæÕý±íʾÕâ¸öDDLÍê³É¡£Èç¹ûÖÐ;ʧ°Ü£¬Ôò½áºÏ¡°ÑÓ³Ùɾ³ý¡±µÄ»úÖÆ£¬À´±£Ö¤À¬»øÊý¾ÝÄܱ»×îÖÕÇåÀíµô£¬Í¨¹ýÒ»¸öºǫ́ÈÎÎñÀ´ÖÜÆÚÐԵĶԱÈX-EngineÊý¾ÝÓëInnoDBµÄ×ֵ䣬ÒÔInnoDB×ÖµäΪ׼£¬½áºÏX-EngineÄÚ´æÔªÐÅÏ¢£¬È·ÈÏÕⲿ·ÖÊý¾ÝÊÇ·ñÓÐÓá£
CrashRecovery
X-EngineÓëInnoDBÒýÇæÒ»ÑùÊÇMySQLµÄÒ»¸ö²å¼þ£¬X-Enigne×÷Ϊһ¸ö¿ÉÑ¡µÄ²å¼þ£¬Æô¶¯Ë³ÐòÔÚInnodbÖ®ºó¡£Ã¿¸öÒýÇæÔÚ»Ö¸´½×¶Î¶¼ÐèҪͨ¹ýredoÈÕÖ¾À´½«Êý¾Ý¿â»Ö¸´µ½å´»úǰ״̬¡£ÔÚË«ÒýÇæÐÎ̬Ï£¬ËùÓÐredo¶¼ÔÚInnoDBÖУ¬ÄÇÒâζ×ÅÎÞÂÛÊÇInnoDBÒýÇæ»¹ÊÇX-EngineÒýÇæÔÚ¶ÁÈ¡ÈÕÖ¾»Ö¸´Ê±£¬¶¼ÐèҪɨÃèÕû¸öredoÈÕÖ¾£¬Ï൱ÓÚÕû¸ö»Ö¸´½×¶ÎɨÃèÁËÁ½±éredo£¬Õâ¿ÉÄÜʹµÃÕû¸öå´»ú»Ö¸´¹ý³Ì·Ç³£³¤£¬½µµÍÁËϵͳµÄ¿ÉÓÃÐÔ¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃǽ«X-EngineµÄ»Ö¸´½×¶Îϸ·Ö£¬²¢ÇÒµ÷ÕûÒýÇæµÄÆô¶¯Ë³Ðò£¬ÔÚInnoDBÆô¶¯Ç°£¬ÏÈÍê³ÉX-EngineµÄ³õʼ»¯ÒÔ¼°SlogµÈ»Ö¸´¹ý³Ì£¬´¦ÓÚ»Ö¸´redoµÄ״̬¡£ÔÚInnoDBÆô¶¯Ê±£¬¸ù¾ÝÀàÐͽ«ÈÕÖ¾·Ö·¢X-EngineÒýÇæ£¬Õû¸öÁ÷³ÌÓëÕý³£Í¬²½redoÈÕÖ¾µÄ¹ý³ÌÒ»Ö¡£µ±redoÈÕÖ¾·Ö·¢Íê±Ï£¬Ï൱ÓÚInnoDBÒýÇæºÍX-EngineÒýÇæ×ÔÉíµÄå´»ú»Ö¸´¹ý³ÌÒѾÍê³É£¬È»ºó×ßÕý³£XA-RecoveryºÍPost-Recovery½×¶Î¼´¿É£¬Õâ¸öÁ÷³ÌÓë֮ǰ±£³ÖÒ»Ö¡£
HA
PolarDBÖ§³ÖË«ÒýÇæºó£¬Õû¸öÉý½µ¼¶Á÷³ÌÖж¼»áǶÌ×ÓÐX-EngineÒýÇæµÄÂß¼£¬±ÈÈçÔÚStandbyÉý¼¶ÎªRWǰ£¬ÐèҪȷ±£X-EngineµÄ»Ø·ÅÁ÷Ë®ÏßÍê³É£¬²¢½«Î´¾öµÄÊÂÎñ±£´æÆðÀ´£¬ÒÔ±ãºóÐøÍ¨¹ýXA_Recovery¼ÌÐøÍÆ½ø¡£RW½µ¼¶ÎªStandbyµÄʱºòÐèÒªµÈ´ýX-EngineдÁ÷Ë®Ï߻طţ¬Í¬Ê±Èç¹û»¹²ÐÁôÓÐδ¾öÊÂÎñ£¬ÐèÒªÔÚÇл»¹ý³ÌÖн«Õⲿ·Öδ¾öÊÂÎñ±éÀú³öÀ´´æÈëRecovered_transactions_¼¯ºÏ¹©ºóÐø²¢·¢»Ø·ÅʹÓá£
ËÄ LSM-tree VS B+tree
ÉϽÚÎÒÃÇÏêϸÃèÊöÁË»ùÓÚLSM-tree¼Ü¹¹µÄ´æ´¢ÒýÇæ£¬ÊµÏÖһд¶à¶ÁËùÐèÒªµÄ¹Ø¼ü¼¼Êõ£¬²¢½áºÏPolarDBË«ÒýÇæ½éÉÜÁËһЩ¹¤³ÌʵÏÖ¡£ÏÖÔÚÎÒÃÇÌø³öÀ´¿´¿´»ùÓÚB+treeºÍ»ùÓÚLSM-treeÁ½ÖÖÊý¾Ý×éÖ¯½á¹¹ÔÚʵÏÖ¼¼ÊõÉϵĶԱȡ£Ê×ÏÈÒª»Øµ½Ò»¸ö»ù±¾µã£¬B+treeÊÇԵظüУ¬¶øLSM-treeÊÇ×·¼Óд£¬Õâ´øÀ´µÄÇø±ð¾ÍÊÇB+treeµÄÊý¾ÝÊÓͼÔÚÄÚ´æºÍÍâ´æÒ»¸ö»º´æÓ³Éä¹ØÏµ£¬¶øLSM-treeÊÇÒ»¸öµþ¼ÓµÄ¹ØÏµ¡£Òò¶øÐèÒªÃæ¶ÔµÄ¼¼ÊõÎÊÌâÒ²²»Í¬£¬B+treeÐèҪˢÔ࣬ÐèÒªÓÐdouble-write(ÔÚPolarFSÖ§³Ö16kÔ×Óдºó£¬Ïû³ýÁËÕâ¸öÏÞÖÆ)£»LSM-treeÐèÒªCompactionÀ´»ØÊÕÀúÊ·°æ±¾¡£ÔÚһд¶à¶ÁµÄģʽÏÂÃæÁÙµÄÎÊÌâÒ²²»Ò»Ñù£¬±ÈÈ磬B+treeÒýÇæ¸´ÖÆÊǵ¥redoÈÕÖ¾Á÷£¬LSM-treeÒýÇæÊÇË«ÈÕÖ¾Á÷£»B+treeÔÚ´¦Àí²¢ÐлطÅʱ£¬¿ÉÒÔ×öµ½¸üϸÁ£¶ÈµÄÒ³¼¶²¢·¢£¬µ«ÊÇÐèÒª´¦ÀíSMO(SplitMergeOperation)ÎÊÌ⣬±ÜÃâ¶Á½Úµã¶Áµ½¡°¹ýÈ¥Ò³¡±»òÊÇ¡°Î´À´Ò³¡±¡£¶øLSM-treeÊÇÊÂÎñ¼¶±ðµÄ²¢·¢£¬ÎªÁ˱£Ö¤RWºÍRO½Úµã¡°ÄÚ´æ+´ÅÅÌ¡±µÄÒ»ÖÂÐÔÊÓͼ£¬ÐèÒªRWºÍROÔÚÏàͬµÄλµã×öSwitch
Memtable¡£Ï±íÒÔInnoDBÒýÇæºÍX-EngineÒýÇæÎªÀý£¬ÁгöÁËһЩ¹Ø¼üµÄÇø±ðµã¡£

Îå LSM-treeÒýÇæÒµÄÚ·¢Õ¹×´¿ö
ĿǰҵÄÚLSM-treeÀàÐÍÒýÇæ±È½ÏÈȵÄÊÇRocksdb£¬ËüµÄÖ÷ÒªÓ¦Óó¡¾°ÊÇ×÷Ϊһ¸öKeyValueÒýÇæÊ¹Óá£Facebook½«RocksdbÒýÇæÒýÈëµ½ÁËËûÃǵÄMySQL8.0·ÖÖ§£¬ÀàËÆÓÚX-EngineÖ®ÓÚAliSQL£¬Ö÷Òª·þÎñÓÚËûÃǵÄÓû§Êý¾Ý¿âUDBÒµÎñ£¬´æ´¢Óû§Êý¾ÝºÍÏûÏ¢Êý¾Ý£¬²ÉÓõÄÈÔÈ»ÊÇ»ùÓÚbinlogµÄÖ÷±¸¸´Öƽṹ£¬Ä¿Ç°Ã»Óп´µ½ÓÐ×ö´æ´¢¼ÆËã·ÖÀ룬ÒÔ¼°Ò»Ð´¶à¶ÁµÄÊÂÇé¡£ÁíÍ⣬githubÉÏÓÐÒ»¸örocksdb-cloudÏîÄ¿£¬½«rocksdb×÷Ϊµ××ù£¬¼ÜÔÚAWSµÈÔÆ·þÎñÉÏÌṩNoSQL½Ó¿Ú·þÎñ£¬Ï൱ÓÚ×öÁË´æ´¢¼ÆËã·ÖÀ룬µ«²¢²»Ö§³ÖÎïÀí¸´ÖÆºÍһд¶à¶Á¡£ÔÚÊý¾Ý¿âÁìÓò£¬°¢Àï°Í°ÍµÄOceanbaseºÍ¹È¸èµÄSpannerµÄµ×²ã´æ´¢ÒýÇæ¶¼ÊÇ»ùÓÚLSM-tree½á¹¹£¬ÕâÏÔʾÁËLSM-tree×÷ΪÊý¾Ý¿âÒýÇæµÄ¿ÉÐÐÐÔ£¬ÕâÁ½¸öÊý¾Ý¿â¶¼ÊÇ»ùÓÚShare-NothingµÄ¼Ü¹¹¡£»ùÓÚShare-StorageµÄÊý¾Ý¿â£¬µ½Ä¿Ç°ÎªÖ¹»¹Ã»ÓгÉÊìµÄ²úÆ·£¬PolarDB(X-Engine)ÊÇÒµÄÚµÚÒ»¸ö»ùÓÚLSM-tree½á¹¹µÄʵÏÖµÄһд¶à¶Á·½°¸£¬¶ÔÓÚºóÀ´ÕßÓÐºÜºÃµÄ½è¼øÒâÒ壬LSM-treeÕâÖֽṹÌìÈ»½«ÄÚ´æºÍ´ÅÅÌ´æ´¢·ÖÀ룬ÎÒÃdzä·ÖÀûÓÃÁË´ÅÅÌ´æ´¢Ö»¶ÁµÄÌØµã£¬Í¨¹ýѹËõ½«Æä³É±¾ÓÅÊÆ·¢»Ó³öÀ´£¬½áºÏһд¶à¶ÁµÄÄÜÁ¦£¬½«³É±¾ÓÅÊÆ·¢»Óµ½¼«Ö¡£
Áù ÐÔÄܲâÊÔ
»ùÓÚX-EngineÒýÇæÊµÏÖһд¶à¶ÁÄÜÁ¦ºó£¬ÎÒÃDzÉÓûù×¼²âÊÔ¹¤¾ßsysbench¶ÔÐÔÄÜ×öÁËÃþµ×£¬Ö÷Òª¶Ô±ÈÁËRDS(X-Engine)£¬PolarDB(X-Engine)ÒÔ¼°PolarDB(InnoDB)µÄÐÔÄÜ¡£
1 ²âÊÔ»·¾³
²âÊÔµÄclientºÍÊý¾Ý¿âserver¾ù´Ó°¢ÀïÔÆ¹ÙÍø¹ºÂò¡£client²ÉÓÃecs£¬¹æ¸ñÊÇecs.c7.8xlarge(32core,64G)£¬²âÊÔsysbench°æ±¾ÊÇsysbench-1.0.20£¬²âÊÔµÄÊý¾Ý¿âserver°üÀ¨RDS(X-Engine)£¬PolarDB(X-Engine)£¬PolarDB(InnoDB)¾ù²ÉÓÃ8core32G¹æ¸ñ£¬ÅäÖÃÎļþ²ÉÓÃÏßÉÏĬÈϵÄÅäÖᣲâÊÔ³¡¾°¸²¸ÇÁËÈ«ÄÚ´æÌ¬ºÍIO-boundµÄ¼¸ÖÖµäÐ͵Äworkload¡£²âÊÔ±íÊýÄ¿ÊÇ250ÕÅ±í£¬È«ÄÚ´æÌ¬µ¥±íÐÐÊýΪ25000ÐУ¬IO-boundµÄ±íÐÐÊýΪ300ÍòÐС£
2 ²âÊÔ½á¹û
RDS VS PolarDB

ÉÏÃæ×óͼÊÇС±íÈ«Äڴ泡¾°£¬ÓÒͼÊÇ´ó±íio-bound³¡¾°¡£PolarDB(X-Engine)Ïà±ÈRDS(X-Engine)Ö÷ÒªÊÇдÈë·¾¶·¢ÉúÁ˱仯£¬×îºËÐĵÄÇø±ðÊÇRDSÖ÷±¸¼Ü¹¹ÒÀÀµbinlog×ö¸´ÖÆ£¬¶øPolarDBÐÎֻ̬ÐèÒªredoÈÕÖ¾¼´¿É¡£PolarDBÐÎ̬µÄдÏà¹ØworkloadµÄÐÔÄÜÏà±ÈRDSÐÎ̬£¬ÎÞÂÛÔÚÈ«ÄÚ´æÌ¬£¬»¹ÊÇIO-bound³¡¾°£¬¶¼ÓкܴóµÄÐÔÄÜÌáÉý¡£
B+tree VS LSM-tree

ÉÏͼÊÇС±íÈ«Äڴ泡¾°£¬ÏÂͼÊÇ´ó±íio-bound³¡¾°¡£PolarDBÐÎ̬Ï£¬X-EngineÒýÇæÏà¶ÔÓÚInnoDBÒýÇæ»¹Óвî¾à£¬Õâ¸ö²î¾àÖ÷ÒªÀ´Ô´ÓÚrange²éѯ£¬ÁíÍâ¸üг¡¾°µ¼ÖÂµÄ¶à°æ±¾£¬Ò²»áµ¼Ö¸üÐÂʱÐèÒª×örange²éѯ£¬ÕâЩÒòËØµ¼ÖÂÁ˶ÁдÏà¹ØµÄworkload£¬InnoDBÒýÇæ±ÈX-Engine±íÏÖ¸üÓÅÐ㡣ͬʱÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÔÚIO-bound³¡¾°£¬X-EngineÒýÇæÐ´Èë¸üÓÐÓÅÊÆ¡£
Æß δÀ´Õ¹Íû
PolarDB(X-Engine)½â¾ö·½°¸ºÜºÃ½â¾öÁËÓû§µÄ¹éµµ´æ´¢ÎÊÌ⣬µ«Ä¿Ç°À´¿´»¹²»¹»³¹µ×¡£µÚÒ»£¬¼¼ÊõÉÏËäÈ»PolarDBÖ§³ÖÁËË«ÒýÇæ£¬µ«ÎÒÃÇ»¹Ã»Óгä·Ö½«Á½¸öÒýÇæ½áºÏÆðÀ´¡£Ò»¸ö¿ÉÐеÄ˼·ÊÇÔÚÏ߹鵵һÌ廯£¬Óû§µÄÔÚÏßÊý¾Ý²ÉÓÃĬÈϵÄÒýÇæInnoDB£¬Í¨¹ýÉ趨һ¶¨µÄ¹æÔò£¬PolarDBÄÚ²¿×Ô¶¯½«²¿·ÖÀúÊ·Êý¾Ý½øÐй鵵²¢×ª»»ÎªX-EngineÒýÇæ´æ´¢£¬Õû¸ö¹ý³Ì¶ÔÓû§Í¸Ã÷¡£µÚ¶þ£¬Ä¿Ç°µÄ´æ´¢¶¼ÂäÔÚPolarDBµÄ¸ßÐÔÄÜ´æ´¢PolarStoreÉÏ£¬ÎªÁ˽øÒ»²½½µµÍ³É±¾£¬X-EngineÒýÇæ¿ÉÒÔ½«²¿·ÖÀäÊý¾Ý´æ´¢ÔÚOSSÉÏ£¬Õâ¸ö¶ÔÓÚ·Ö²ã´æ´¢ÊǷdz£ÓѺúÍ×ÔÈ»µÄ¡£Êµ¼ÊÉÏ£¬»ùÓÚLSM-treeµÄ´æ´¢ÒýÇæÓкÜÇ¿µÄ¿ÉËÜÐÔ£¬ÎÒÃÇĿǰµÄ¹¤×÷Ö»Êdzä·Ö·¢»ÓÁË´æ´¢ÓÅÊÆ£¬Î´À´»¹¿ÉÒÔ¶ÔÄÚ´æÖÐÊý¾Ý½á¹¹½øÐнøÒ»²½Ì½Ë÷£¬±ÈÈç×öÄÚ´æÊý¾Ý¿âµÈ¶¼ÊÇ¿ÉÒÔ̽Ë÷µÄ·½Ïò¡£
|