±à¼ÍƼö: |
±¾´Î½²ÊöÁ˼òÒª½éÉÜNewSQL£»
ÈçºÎ½¨Á¢Ò»¸öNewSQLÊý¾Ý¿â£»
ÒÔ¼°roadmap£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú,
±¾ÎÄÀ´×Ôcsdn£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼¡¢ÍƼö¡£ |
|
ΪʲôÎÒÃÇÐèÒªÒ»¸öеÄÊý¾Ý¿â£¿
ÔÚÕýʽ¿ªÊ¼Ç°£¬ÎÒÏÈÎÊÒ»¸öÎÊÌ⣺ÄãÃÇÊìϤÊý¾Ý¿âÂð£¿
ÁíÍ⣬ÓÐËÖªµÀMySQLÂð£¿
ÄÇô£¬ÏÖÓÐÊý¾Ý¿â´æÔÚÄÄЩÎÊÌâÄØ£¿
ÏñMySQL¡¢Oracle¡¢PostgreSQLÕâÑùµÄ¹ØÏµÊý¾Ý¿â£¬ËüÃǵÄÎÊÌâÊǺÜÄÑÀ©Õ¹¡£¾¡¹ÜÎÒÃÇÓÐ·ÖÆ¬¼¼Êõ£¬»¹ÓÐyoutube/vitessºÍMySQL proxyµÈ,µ«ËüÃǶ¼²»Ö§³Ö·Ö²¼Ê½ÊÂÎñÒÔ¼°cross-node joinÁ¬½Ó¡£
ÏñHBase¡¢MongoDBÒÔ¼°RedisÕâÑùµÄNoSQLÊý¾Ý¿â£ºËüÃÇ¿ÉÀ©Õ¹£¬µ«²»Ö§³ÖSQL£¬Í¬Ê±Ò²ÉáÆúÁËÊÂÎñµÄÒ»ÖÂÐÔ¡£
Òò´Ë£¬ÐÂÒ»´úÊý¾Ý¿â½«»áÊÇÔõÑùµÄ£¿ÔÚÎÒ¿´À´£¬ÆäÖ÷ÒªÌØÕ÷Ó¦¸ÃÊÇ£º
Ö§³ÖSQL£»
¾ßÓпÉÀ©Õ¹ÐÔ£»
Ö§³ÖÊÂÎñÖ´ÐÐËÄÒªËØ/ACID Transaction£»
¸ß¿ÉÓá£
Ê×ÏÈ£¬Ëü±ØÐëÖ§³ÖSQL£¬ÒòΪÕâÊýÊ®ÄêÀ´ÎÒÃÇÒ»Ö±ÔÚʹÓÃSQL£¬¶øÇÒÐí¶àÓ¦ÓóÌÐò¶¼Ê¹ÓÃSQL£¬¹Ê¶ø²»ÄÜÇáÒ×½«ÆäÉáÆú¡£
µÚ¶þ£¬±ØÐëÓÐÁ¼ºÃµÄÀ©Õ¹ÐÔ£¬Ò²¾ÍÊÇ˵ֻÐèͨ¹ý½ÓÈë¸ü¶àµÄ»úÆ÷¾Í¿ÉÒÔÀ©Õ¹ÆäÈÝÁ¿»òʹ֮ʵÏÖ¸ºÔؾùºâ¡£
µÚÈý£¬±ØÐëÖ§³ÖÊÂÎñµÄACIDÊôÐÔ£¬ÕâÒ»µãҲǡǡÊǹØÏµÊý¾Ý¿âµÄÖ÷ÒªÌØÕ÷Ö®Ò»¡£ÓÐÁËÇ¿´óµÄÒ»ÖÂÐÔ×÷±£ÕÏ£¬¿ª·¢Õß±ã¿ÉÒÔÓý϶̵ĴúÂë±àд³öÕýÈ·µÄ³ÌÐò¡£
×îºó£¬¼´Ê¹ÊÇÔÚ¼ÆËã»úÏÝÈë¹ÊÕÏ£¬ÉõÖÁÊÇÕû¸öÊý¾ÝÖÐÐÄ̱»¾µÄÇé¿öÏ£¬ËüÒ²Ó¦¸ÃÄܹ»±£³ÖÆä½Ï¸ßµÄ¿ÉÓÃÐÔ¡£Í¬Ê±£¬Ëü»¹Ó¦µ±¿ÉÒÔ×Ô¶¯ÐÞ¸´¡£
×ÜÖ®£¬ÐÂÒ»´úÊý¾Ý¿âÓ¦¸Ã¼ÈÓкܺõĿÉÀ©Õ¹ÐÔ£¬ÓÖÄܱ£Áô¹ØÏµÊý¾Ý¿âµÄÖ÷ÒªÌØÕ÷¡£
NewSQLÊÇʲô?
Äã¿ÉÄÜ»áºÃÆæ£¬ÕâÑùµÄÊý¾Ý¿âÕæµÄ´æÔÚÂð£¿ËüÌýÆðÀ´ËƺõÌ«¹ýÍêÃÀºÍÀíÏ뻯ÁË¡£Õâ¸öÎÊÌâµÄ´ð°¸Êǿ϶¨µÄ£¬ÕâÑùµÄÊý¾Ý¿âµÄÈ·´æÔÚ£¬Ëü¾ÍÊÇNewSQL¡£ÄÇʲôÊÇNewSQLÊý¾Ý¿â£¿ÏÈÀ´¿´Ò»¿´Î¬»ù°Ù¿Æ¸ø³öµÄ½âÊÍ£º
NewSQLÊÇÖ¸ÕâÑùÒ»ÀàÐÂʽµÄ¹ØÏµÐÍÊý¾Ý¿â¹ÜÀíϵͳ£¬ËüÕë¶ÔOLTPʵÏÖ¶Á-д¹¤×÷¸ºÔØ£¬×·ÇóÌṩºÍNoSQLϵͳÏàͬµÄÀ©Õ¹ÐÔÄÜ£¬ÇÒÈÔÈ»±£³Ö´«Í³Êý¾Ý¿âÖ§³ÖµÄACIDÌØÐÔ¡£
´ÓÉÏÊö¶¨ÒåÀ´¿´£¬ÎÒÃDz»ÄÑ·¢ÏÖNewSQLµÄÀ©Õ¹ÐÔÓëNoSQLÏ൱£¬²¢Í¬Ê±±£ÁôÁËACIDÌØÐÔ¡£¶øÕâǡǡÊÇÎÒÃÇÐèÒªµÄ¡£
½¨Á¢Ò»¸öNewSQLÊý¾Ý¿â
½ñÌìÎÒ½«Ïò´ó¼ÒչʾÈçºÎ½¨Á¢Ò»¸öÕâÑùµÄÊý¾Ý¿â¡£ÎÒÃÇÊܵ½È«Çò×î´óÊý¾Ý¿âGoogle Spanner ºÍ F1 µÄÆô·¢£¬½«Æä·ÖΪÁ½¸ö²ã¼¶£º
KV²ã£ºÕâÒ»²ãÊôÓÚµ×²ã´æ´¢ÏµÍ³£¬¸ºÔðÌṩ¿çÊý¾ÝÖÐÐĵÄͬ²½ÒÔ¼°Ç¿Ò»ÖÂÐÔÊÂÎñ¡£
SQL²ã£ºÕâÒ»²ãʹÄܹ»Âú×ãÎÒÃǶԴ«Í³SQLÊý¾Ý¿â¿ÉÓÃÐÔÒÔ¼°¹¦ÄÜÐÔµÄÖ§³Ö¡£
½¨Á¢NewSQLÊý¾Ý¿â
Õâ¾ÍÊÇÎÒÃÇÔÚPingCAPËù´ÓÊµĹ¤×÷£¬µ±È»ÊÇ¿ªÔ´µÄ¡£ÆäÖУ¬ÎÒÃǵÄÊý¾Ý¿â·ÖΪÁ½²ã£¬¼´KV²ãºÍSQL²ã¡£¾ÍKV²ãÀ´¿´£¬ÎÒÃÇÓÐTiKV£»¶ÔÓÚSQL²ã£¬ÔòÓÐTiDB¡£¶øÎÒ½«ÔÚÉÔºó½éÉÜÆäÖеĹؼü¼¼Êõ¡£ÕâÀïµÄTiÊÇTitanium£¨îÑ£©µÄËõд£¬ÎÒÃǶ¼ÖªµÀîÑ×÷ΪһÖÖ¿¹¸¯Ê´ÐԵĻ¯Ñ§ÔªËØ£¬±»¹ã·ºÓ¦ÓÃÓڸ߶˿Ƽ¼µ±ÖС£
TiKVµÄÌØÐÔ
ÒìµØ±¸·Ý£ºÎÒÃÇÀûÓÃRaftÀ´Ö§³ÖÒìµØ±¸·Ý¡£RaftÊÇÒ»ÖÖÒ»ÖÂÐÔËã·¨£¬ËüÔÚÈÝ´íÐÔºÍÐÔÄÜ·½ÃæÏ൱ÓÚPaxosËã·¨¡£ÎÒÃǵÄʵÏֲο¼Ó¦Óù㷺µÄetcd£¬ËüÒѾͨ¹ýÁ˹㷺²âÊÔ²¢¾ßÓнϸߵÄÎȶ¨ÐÔ¡£
ˮƽÀ©Õ¹ÐÔ£ºÓÉÓÚRaftÖ§³Ö membership ±ä¸ü£¬ÎÒÃÇÀûÓÃÆäÕâÒ»ÌØÐÔÀ´ÊµÏÖˮƽÀ©Õ¹¡£
Ò»ÖÂÐԵķֲ¼Ê½ÊÂÎñ£ºÕâÖÖÊÂÎñÄ£Ð͵Ĵ´½¨ÊÇÊܵ½ÁË Google Percolator£¨À´×Ôһƪ2006·¢±íµÄÂÛÎÄ£©µÄÆô·¢£¬Ö÷ÒªÊÇÒ»¸öÓÅ»¯µÄÁ½½×¶ÎÌá½»ÐÒé¡£¸ÃÄ£ÐͽèÖúÒ»¸öʱ¼ä´Á·ÖÅäÆ÷À´¸ø¸÷ÏîÊÂÎñ·ÖÅäµ¥µ÷µÝÔöµÄʱ¼ä´Á£¬Òò´Ë¿É¼ì²âµ½³åÍ»¡£
д¦ÀíÆ÷Ö§³Ö£ºÓë HBase ÀàËÆ£¬ÎÒÃÇÔËÓÃд¦ÀíÆ÷¼Ü¹¹Ö´ÐзþÎñÆ÷´úÂëÀ´½øÐзֲ¼Ê½¼ÆËã¡£
×·Çó¸ü¸ßµÄÐÔÄܺ͸üµÍµÄÑÓ³Ù£¬Óñà³ÌÓïÑÔ Rust ½øÐÐÁ˱àд¡£ÄãÃǵ±ÖÐÓÐËÖªµÀ Rust Â𣿺ܲ»´í¡£ÄãÃÇÓ¦¸Ã³¢ÊÔһϣ¬ËüÕæµÄÏ൱ÓÐȤ¡£
TiKV¼Ü¹¹

´ÓÉÏͼÖпÉÒÔ¿´³ö£¬Ëü¾¹ýÁ˸߶ȷֲ㡣
´Óµ×²ãÍùÉÏ¿´¡£µ×²ãÊÇRocksDB£¬ËüÊÇÒ»¸ö³Ö¾ÃµÄÄÚǶʽKV´æ´¢ÒýÇæ¡£RocksDBµÄ×î³õÉè¼ÆÖØµãÔÚÓÚÆä¼«¸ßµÄÐÔÄÜ£¬¿ÉÒÔÇáËɶԶÁ·Å´ó¡¢Ð´·Å´óÒÔ¼°¿Õ¼ä·Å´ó½øÐÐÓÅ»¯¡£
ÉÏÃæÒ»²ãÊÇRaft KV£¬ÕâÒ»²ãÓÃÀ´ÊµÏÖ·Ö²¼Ê½¡£
ÔÙÍùÉÏÊÇMVCC£¬¼´¶à°æ±¾²¢·¢¿ØÖÆ£¨Multi-version concurrency control£©¡£ÎÒÏàÐÅÄãÃǵ±ÖкܶàÈ˶Դ˶¼ºÜÊìϤ¡£TiKVÊÇÒ»¸ö¶à°æ±¾Êý¾Ý¿â£¬¶øMVCCÔòÖ§³ÖÎÒÃǵÄÎÞËø¶ÁÒÔ¼°ÊÂÎñµÄACIDÊôÐÔ¡£
½ÓÏÂÀ´µÄÊÂÎñ£¨Transaction£©²ã£¬ÎÒ֮ǰÒѾ½éÉܹýÁË¡£
È»ºóÊÇKV API£¬ÕâÊÇÒ»×é³ÌÐò½Ó¿Ú£¬ËüÔÊÐí¿ª·¢Õß¶ÔÊý¾ÝµÄÊäÈëºÍÊä³ö¡£
ͬÑù£¬Ð´¦ÀíÆ÷£¨Coprocesser£©ÔÚÇ°ÃæÒ²Ìá¹ýÁË¡£
×îºóÊÇPlacement Driver£¬ÕâÊÇÒ»¸öÓÈÎªÖØÒªµÄ²¿·Ö£¬ÒòΪËü¿ÉÐÖú½øÐÐÒìµØ±¸·Ý£¬Ë®Æ½À©Õ¹ÒÔ¼°Ò»ÖÂÐԵķֲ¼Ê½ÊÂÎñ¡£ÉÔºóÎÒ½«¶ÔÆäϸ½Ú½øÐнøÒ»²½²¹³ä¡£
TiKV Èí¼þÕ»

ÈÃÎÒÃÇÀ´¿´Ò»ÏÂÈí¼þÕ»¡£Ê×ÏÈ£¬ÎÒÃǻᷢÏÖ¿Í»§¶ËÓëTiKVÏàÁ¬¡£Í¬Ê±ÎÒÃÇ»¹ÄÜ¿´¼û¼¸¸öNode¡£¶øÔÚÿ¸öNodeµ±Öж¼ÓÐStore£¬Ã¿Ò»¸öÎïÀí´ÅÅÌ´æÒ»¸östore¡£ÔÚÿ¸ö Store µ±ÖУ¬ÎÒÃÇÓÖ»®³öÐí¶àRegion¡£¶øRegionÊÇÊý¾ÝÇ¨ÒÆµÄ»ù±¾µ¥Î»£¬²¢ÇÒ¾ÓÉRaft±¸·Ý¡£Ã¿¸öRegion¶¼±»Í¬²½µ½¶à¸ö½Úµã¡£Ò»¸ö Raft group ÓÉÒ»¸ö Region µÄÊý¸ö±¸·Ý×é³É¡£ÈçÄãËù¼û£¬Ã¿¸ö Region ÔÚÈý¸ö²»Í¬µÄ½ÚµãÉÏÓÐÈý¸ö±¸·Ý¡£
Çý¶¯³ÌÐòÅäÖÃ
PD£¬ÓÖ³Æ placement driver£¬ÕâÒ»Ãû³ÆÀ´Ô´×ÔSpannerµÄÔÎÄ¡£ËüÊǼ¯Èº¹ÜÀíÆ÷£¬ÌṩÁ˸ü¯ÈºµÄÉϵÛÊӽǡ£ËüÓÉÁ½¸ö²¿·Ö¹¹³É£ºrebalancerºÍtimestamp allocator¡£PD¶ÔRegion¸±±¾½øÐÐÖÜÆÚÐÔ¼ì²â£¬Æ½ºâ¸ºÔØ£¬²¢×Ô¶¯´¦ÀíÊý¾ÝÇ¨ÒÆ¡£µ±Ëü¼ì²âµ½¸ºÔعý¸ßʱ£¬½«»áÖØÐÂÆ½ºâÊý¾Ý¡£
TiDB
ÒÔTiKVΪ»ù´¡µÄNewSQL£ºËü½«TiKVת±ä³ÉÁËÒ»¸öNewSQLÊý¾Ý¿â¡£
Òì²½schema¸Ä±ä£ºÄã¿ÉÒÔÔÚ²»Í£Ö¹Ò²²»Ó°ÏìÕýÔÚ½øÐеIJÙ×÷µÄǰÌáÏ£¬Ìí¼ÓеÄÁÐÒÔ¼°Ë÷Òý¡£±¾ÖÊÉÏ¿´£¬ËüÊÇÒ»¸ö¶à½×¶ÎÐÒé¡£
ÓëMySQLÐÒ鼿ÈÝ£ºTiDB·þÎñÆ÷×ñ´ÓMySQLÐÒ飬²¢ÇÒ×ñÑÆäSQLÓï·¨¡£»»¾ä»°Ëµ¾ÍÊÇÔÚ´ó¶àÇé¿öÏ£¬ÄãÄܹ»ÔÚ²»¸ü¸ÄÈκÎÒ»ÐдúÂëµÄͬʱ£¬Í¨¹ýÓÃTiDBÌæ»»MySQLÀ´ÔöÇ¿ÄãµÄÓ¦Óá£TiDBÊÊÓÃÓÚMySQLÓ¦Óú͹ÜÀí¹¤¾ß£¬±ÈphpMyAdmin¡¢NavicatÒÔ¼°WordPress¡£Í¬Ê±£¬ºÜ¶àORMÒ²¿ÉÒÔÔÚTiDBÉϺܺõŤ×÷£¬ÀýÈçHibernate¡¢GORM¡¢ActiveRecord¡¢SQLAlchemyµÈ¡£
TiDBµÄ¼Ü¹¹
ÈÃÎÒÃÇÀ´¿´Ò»ÏÂTiDBµÄ¼Ü¹¹£º

MySQL¿Í»§¶Ë£º¶¥²ãÊÇÒ»×éMySQL¿Í»§¶Ë£¬ÕâЩ¿Í»§¶ËÏòÏÂÒ»²ã·¢ËÍÇëÇó¡£ÔÚÕâÀïÄãÈÔÈ»¿ÉÒÔʹÓÃÄãËùÊìϤµÄMySQLÇý¶¯³ÌÐò¡£
¸ºÔØÆ½ºâÆ÷£ºÕâÒ»²ãÊôÓÚ¿ÉÑ¡²ã£¬ÀýÈçHAProxy ÒÔ¼° LVS¡£
TiDB·þÎñÆ÷£ºËüÊÇÎÞ״̬µÄ£¬Ò»¸ö¿Í»§¶Ë¿ÉÒÔͬÈκÎÒ»¸öTiDB·þÎñÆ÷ÏàÁ¬½Ó¡£ÔÚTiDB·þÎñÆ÷ÄÚ²¿£¬×î¶¥²ãÌṩMySQLÐÒéÖ§³Ö£»ÏÂÒ»²ãÊÇSQL Plan²ã£¬ÍùÍù±»ÓÃÒÔ½«MySQLÇëÇóת»»³ÉTiDB SQL Plan£»µ×²ãÔòÊÇKV APIÒÔ¼°·Ö²¼Ê½SQL API¡£Èç¹û½Ïµ×²ãµÄ´æ´¢ÒýÇæÖ§³Öд¦ÀíÆ÷£¬TiDB SQL²ã½«»áʹÓñÈKV API¸üΪ¸ßЧµÄDistSQL API¡£TiDBÖ§³Ö²å¼þʽ´æ´¢ÒýÇæ£¬ÔçÆÚÖ§³ÖHBase¡£Í¬Ê±×÷ΪÊÔÑéÐÔ´æ´¢ÒýÇæ£¬ÎÒÃÇ»¹Ö§³ÖCockroachDB¡£µ«ÎÒÃÇÍÆ¼öTiKVΪĬÈÏ´æ´¢ÒýÇæ¡£
TiDBÈçºÎʹSQLÓëKVÏàÆ¥Åä
ÈÃÎÒÃÇÓÃÒ»¸öÀý×ÓÀ´Õ¹Ê¾Ò»¸öSQL ±íÊÇÈçºÎÓ³Éä³ÉKV¶ÔµÄ¡£
¼ÙÉèÎÒÃǵÄÊý¾Ý¿âÀïÓÐÒ»Õżòµ¥µÄÓû§±í¡£ËüÓÐÒ»ÐÐÈýÁУºnickname¡¢emailºÍage¡£´Ë´¦µÄnicknameÀàÐÍÊÇ×Ö·û´®£¬ÇÒnicknameÊÇÖ÷¼ü¡£

Èç¹ûÎÒÃÇÓ³ÉäÕâÕÅ±íµ½KV¶Ô£¬Key¾Í·Ö³ÉÁËÈý¸ö²¿·Ö£ºtable¡¢row key¡¢column¡£¶øÕâʱµÄKV¶ÔÅÅÁÐÈçÏ£º

|