ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Êý¾Ý¿âNewSQLÖ®¹È¸èF1ϵͳ
2015-11-21 02:03:41 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:0´Î
Tags£ºÊý¾Ý¿â NewSQL ¹È¸è ϵͳ

½éÉÜ

¡¡¡¡¹È¸è¶ÔÊý¾ÝϵͳÐÔÄÜÓм«¸ßµÄÒªÇó£¬MySQLÕâÑùµÄϵͳ¶¼ºÜÄÑÁîÆäÂúÒ⣬ËùÒԹȸèÉè¼ÆF1Êý¾Ý¿â£¬ÆäÄ¿±êÊÇÈÃÆä¾ß±¸¸ß¶ÈµÄ¿ÉÀ©Õ¹ÐԺ͸߶ÈÎȶ¨ÐÔ£¬³ýÁ˱ر¸µÄSQLÓïÑÔÖ§³ÖÍ⣬F1»¹Ìṩad hocÀàÐͲéѯ¡£

»ù±¾¹¹¼Ü

¡¡¡¡ÕâÀïдͼƬÃèÊö
¡¡¡¡Óû§Í¨¹ý¿Í»§¶ËÓïÁϿ⣨client library£©ºÍF1½»»¥¡£Óû§·¢³öµÄÇëÇóÊ×ÏÈË͵½Ä³¸öF1·þÎñÆ÷£¬F1·þÎñÆ÷¸ºÔðÖ®ºóµÄÈÎÎñ·ÖÅäºÍÊý¾Ý´¦Àí¡£
¡¡¡¡ÎªÁ˼õÉÙ´¦ÀíÇëÇóÔì³ÉµÄÑÓʱ£¨latency£©£¬F1µÄ¿Í»§¶ËºÍÓëÖ®Ö±½ÓÏàÁ¬µÄ¸ºÔؾùºâÆ÷»áÊ×ÏÈÏò×î½üµÄF1·þÎñÆ÷ÏàÁ¬£¬µ«ÊÇÈç¹û¸½½üµÄF1·þÎñÆ÷·Ç³£·±Ã¦»òÕß³öÏÖ¹ÊÕÏ£¬ÄÇô¾Í»áÕÒÆäËûÔ¶Ò»µãµÄ·þÎñÆ÷¡£
¡¡¡¡F1·þÎñÆ÷ͨ³£ºÍspanner·þÎñÆ÷·ÅÔÚÒ»¸öÊý¾ÝÖÐÐÄ£¬ÒòΪÕâÑù¿ÉÒÔÌá¸ßÊý¾Ý¶ÁдµÄËÙ¶È£¬²»¹ýF1·þÎñÆ÷Ò²¿ÉÒÔÁ¬½ÓÆäËûÊý¾ÝÖÐÐĵÄspanner·þÎñÆ÷¡£spanner´ÓÒ»¸ö½Ð×öCFS£¨Colossus File System£©µÄÎļþϵͳµ÷È¡Êý¾Ý£¬ÏàÁ¬µÄspannerºÍCFSÓÀÔ¶ÊÇÔÚͬһ¸öÊý¾ÝÖÐÐĵģ¬Ò²¾ÍÊÇ˵£¬Ä³¸öÊý¾ÝÖÐÐĵÄspanner²»»áºÍÁíÒ»¸öÊý¾ÝÖÐÐĵÄCFSÏàÁ¬¡£
¡¡¡¡ÒòΪF1·þÎñÆ÷ûÓд洢Êý¾Ý£¬F1·þÎñÆ÷¿ÉÒÔ¸ù¾Ý·ÃÎÊÁ÷Á¿µÄ´óÐ¡ËæÒâÔö¼õ¡£
¡¡¡¡Õû¸öF1ϵͳ´¦ÀíÇëÇó¿ÉÒÔÔÚµ¥¸ö½ÚµãÉÏÍê³É£¬Ò²¿ÉÒÔÔÚ¶à¸ö½ÚµãÉÏ·Ö²¼Íê³É£¬¹Ø¼ü¿´ÄĸöÑÓʱ¸üС¡£Èç¹ûÊÇÓ÷ֲ¼Ê½µÄ·½Ê½´¦ÀíÇëÇó£¬F1»áÖ¸¶¨¶à¸ö½ø³Ì£¨process£©À´Íê³É£¬Ò»¸ö´ÓÊô·þÎñÆ÷£¨slave server£©½Ó¹ÜÒ»¸ö½ø³Ì¡£¶à¸ö´ÓÊô·þÎñÆ÷ÓÉÒ»¸öÖ÷·þÎñÆ÷£¨master server£©¹ÜÀí¡£F1Ò²Ö§³ÖMapReduce¡£

Spanner

¡¡¡¡F1ºÍspannerÊÇͬʱ±»Ñо¿¿ª·¢³öÀ´µÄ£¬µ«ÊÇspanner¸ü¼ÓÆ«ÏòÓڵײ㴦Àí£¬ÀýÈ绺´æ£¬Êý¾Ý¹²ÏíºÍ°áÔË£¬Êý¾ÝλÖüÆËãµÈµÈ¡£
¡¡¡¡F1±¾ÉíÊǹØÏµÐÍÊý¾Ý¿â£¬ËùÒÔÊý¾ÝÊÇÒ»ÐÐÒ»ÐеطÅÔÚÁËÁÐ±í£¨table£©Àï¡£spanner½«ËùÓÐÊý¾Ý·Ö³ÉÁËÒ»¸ö¸öÓɺܶàÐÐÊý¾Ý×é³ÉµÄ¼¯Èº£¨cluster£©£¬»òÕß½Ð×öĿ¼£¨directory£©¡£Ã¿Ò»¸öĿ¼ÖÁÉÙÓÐÒ»¸ö·Ö¶Î£¨fragment£©£¬´óµÄĿ¼ͨ³£Óкü¸¸ö·Ö¶Î¡£Ò»¸öĿ¼µÄ¶à¸ö·Ö¶Î×é³ÉÁËÒ»¸ö×飨group£©£¬Ã¿Ò»¸öÊý¾ÝÖÐÐÄ´æ·ÅÁËÒ»¸ö×éµÄ¸±±¾¡£
¡¡¡¡spannerÔÚ´¦Àí²éѯÓï¾äµÄʱºòʹÓöþ½×¶ÎËø£¨two-phase locking£©ºÍ¶þ½×¶ÎÌá½»£¨two-phase commit£©£¬ÕâÑùÐÅÏ¢½»»¥ÔÚÍøÂçÖÐÔö¼ÓÁËÒ»±¶£¬Ôö¼ÓÁËÑÓʱ¡£ÎªÁ˱£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ£¨consistency£©£¬spannerʹÓÃʱ¼ä´Á£¨timestamp£©¸øÃ¿Ò»ÌõÊÂÎñÅÅÐò£¬±£Ö¤È«ÇòµÄÊÂÎñÓÐÐòÖ´ÐС£

Êý¾ÝÄ£ÐÍ

¡¡¡¡F1µÄÊý¾ÝÄ£Ðͺ͹ØÏµÐÍÊý¾Ý¿âÏàËÆ£¬¶¼ÓÐÊý¾Ý¸ÅÒª£¨schema£©£¬µ«ÔÚ´Ë»ù´¡ÉÏÒ²ÓÐÀ©Õ¹¡£
¡¡¡¡F1Êý¾Ý¸ÅҪϵıí¸ñ£¨table£©ÊÇ·Ö²ãµÄ¡£×Ó±í¸ñ£¨child table£©ÀïÃæµÄËùÓÐkey±ØÐë°üº¬Ä¸±í¸ñ£¨parent table£©ÀïÃæµÄkey¡£¸ù±í¸ñ£¨root table£©ÀïµÄÿһÐнÐ×ö¸ùÐУ¨root row£©£¬ËùÓиù¾ÝijÌõ¸ùÐÐÑÜÉú³öÀ´µÄ×Ó±í¸ñÐÐ×é³ÉÒ»¸öspannerĿ¼

Protocol Buffers

¡¡¡¡ÆÕͨÊý¾Ý¿âµÄÒ»¸öȱµãÊÇ£¬Êý¾Ý½á¹¹ÀïµÄÊý¾ÝҪͨ¹ý·±ËöµÄ´úÂëת»»³ÉÊý¾Ý¿âÊý¾ÝÖ®ºó²ÅÄܱ»´æÈëÊý¾Ý¿â£¬¹È¸èʹÓÃProtocol BufferÓïÁϿ⣨library£©£¬Ê¹µÃ±í¸ñµÄÿһÁÐÖ§³Ö½á¹¹»¯Êý¾ÝÀàÐÍ¡£

Êý¾ÝË÷Òý

¡¡¡¡F1ÓÐÁ½ÖÖË÷Òý£¬Ò»ÖÖÊǾÖÓòË÷Òý£¨local index£©£¬¾ÖÓòË÷ÒýµÄkey±ØÐë°üº¬¸ùÐеÄkey×÷Ϊǰ׺¡£¾ÖÓòË÷ÒýµÄkeyºÍË÷Òýµ½µÄ½á¹û¶¼ºÍʵ¼ÊµÄ¸ùÐзÅÔÚͬһ¸öspannerĿ¼Ï£¬ËùÒÔ¾ÖÓòË÷ÒýµÄÐÞ¸ÄÕ¼ÓÃÁËÊÂÎñÖкÜÉÙµÄÒ»²¿·ÖÓÃʱ¡£
¡¡¡¡ÁíÒ»ÖÖË÷ÒýÊÇÈ«¾ÖË÷Òý£¨global index£©¡£ºÍ¾ÖÓòË÷Òý²»Í¬µÄÊÇ£¬È«¾ÖË÷ÒýµÄkey²»°üº¬¸ùÐеÄkey£¬²¢ÇÒºÍË÷ÒýµÄÊý¾Ý·Ö¿ª´æ·Å¡£ºÜ¶àĿ¼¶¼¿ÉÒÔ·ÃÎÊÈ«¾ÖË÷Òý£¬È«¾ÖË÷Òý´æ·ÅÔÚ¶à¸öspanner·þÎñÆ÷Àï¡£Èç¹ûÐÞ¸ÄÁËÒ»Ìõ±»Ë÷ÒýµÄÐУ¬ÄÇô¸üÐÂË÷Òý¾ÍÐèÒªÓõ½2PC(2 phase commit)¡£È«¾ÖË÷ÒýÔÚÀ©Õ¹ÐÔ·½Ãæ×öµÃ²»ÊǺܺᣱÈÈç˵£¬Ò»¸öÐÂÔö1000ÐÐÊý¾ÝµÄÊÂÎñ»áÈÃË÷ÒýÐÂÔö¼¸°ÙÌõ¼Ç¼£¬2PC´¦ÀíÕ⼸°ÙÌõÐÂÔöµÄ¼Ç¼»á±äµÃºÜÂý¡£Ä¿Ç°¹È¸èÕýÔÚÑо¿ÈÃÈ«¾ÖË÷ÒýÓиüºÃµØÀ©Õ¹ÐԵķ½·¨¡£

ÐÞ¸ÄÊý¾Ý¸ÅÒª£¨schema£©

¡¡¡¡F1Êý¾Ý¿âÊÇÒ»¸öÈ«Çò·¶Î§µÄÊý¾Ý¿â£¬ÕâÒâζ×ÅÊÀ½çÉÏËùÓÐÈ˶¼¿ÉÒÔÐÞ¸ÄÀïÃæµÄͬһ·ÝÊý¾Ý¸ÅÒª£¬¹È¸èÒªÇóÔÚÕâ¸ö¹ý³ÌÖв»ÔÊÐí³öÏÖÈκιÊÕÏ»òÕß±í¸ñÉÏËø£¨table locking£©¡£
¡¡¡¡ÄÇôÈçºÎʵÏÖÄØ£¿¹È¸èÐ޸ĸÅÒªµÄ·½·¨ÊÇÓ÷Çͬ²½·¨£¬Ò²¼´ÊÇ˵²»Í¬µÄF1·þÎñÆ÷ÔÚͬһʱºò¿ÉÄÜ´¢´æÁ½¸ö±¾ÖÊÏàͬµ«¸ÅÒªÄÚÈݲ»Í¬µÄÊý¾Ý¿â¡£¶Ô´Ë£¬¹È¸èÉè¼ÆÁË×Ô¼ºµÄËã·¨¡£

ÊÂÎñÖ´ÐÐ

¡¡¡¡F1ÓÐÈýÖÖÀàÐ͵ÄÊÂÎñ£º
¡¡¡¡1. Ö»¶Á£¨read-only£©ÊÂÎñ
¡¡¡¡2. Ö±½ÓÓ³Éäµ½spannerµÄÊÂÎñ£º´ËÀàÐ͵ÄÊÂÎñÖ±½ÓÓÉspanner´¦Àí¡£
¡¡¡¡3. ¶ÁдÊÂÎñ£ºÎªÁË·ÀÖ¹ÔÚ¶ÁÈ¡µÄʱºòÊý¾Ý±»ÆäËûÊÂÎñÐ޸ģ¬F1»¹»á¸ø³öÉÏÒ»´Î±»Ð޸ĵÄʱ¼ä£¬Êý¾ÝÒ»µ©±»¸üУ¬Õâ¸öʱ¼äÒ²»áËæÖ®¸üС£
¡¡¡¡Ä¬ÈÏÐÎʽÏ£¬F1¿Í»§¶ËʹÓöÁдÊÂÎñģʽ¡£ÕâÑù×öµÄÓŵãÓÐ
¡¡¡¡- ¶ÁÈ¡Êý¾Ý²»ÐèÒªÊý¾ÝËø£¬¶øÇÒ²»»áºÍ¸ÄдÊý¾ÝÏà³åÍ»£¬ÊÂÎñÖ®¼ä»¥²»ÊÜÓ°Ïì¡£
¡¡¡¡- ijЩÊÂÎñ±¾À´¾ÍÐèÒªºÜ³¤Ê±¼ä£¬ÕâÑùÒ²²»»á±»½ûÖ¹
¡¡¡¡- ÊÂÎñÔÚ³ö´íÖ®ºó¿ÉÒÔÖØÐÂÖ´ÐÐ
¡¡¡¡- ¿Í»§¶ËÔÚ·¢ÏÖÔ¶³Ì·þÎñÆ÷³öÏÖ¹ÊÕϺ󣬿ÉÒÔÁ¬½ÓÁíһ̨·þÎñÆ÷
¡¡¡¡- ÊÂÎñÖ´Ðйý³ÌÖÐÔÊÐí¶ÁÈ¡´¦ÀíÊÂÎñÒÔÍâµÄÊý¾Ý
¡¡¡¡µ«ÊǸÃģʽҲÓÐȱµã£¬¾ÍÊÇÈç¹ûijһÊý¾Ý±»Æµ·±µ÷È¡£¬ÄÇôϵͳÔÚÕâ¸öÊý¾ÝÉϵŤ×÷ЧÂÊ£¨throughput£©¾ÍºÜµÍ¡£

Êý¾ÝËø

¡¡¡¡F1Êý¾Ý¿âÖÐÿһÐÐÊý¾Ý¶¼ÓÐÒ»¸öËøÁУ¨lock column£©¡£ËøÁпÉÒÔÓÉÓû§×ÔÓɶ¨ÖƲ¢ÇÒ¸ºÔð¸ÃÐÐÿһÁÐÊý¾ÝµÄÉÏËø¡£ÕâÑùÿһÐеIJ»Í¬ÁоÍÄܱ»²»Í¬ÊÂÎñ¶ÁÈ¡Ð޸ġ£

¼Ç¼ÐÞ¸Ä

¡¡¡¡F1ÐèÒª¼Ç¼¹ýÈ¥¶ÔÊý¾Ý¿âµÄËùÓиü¸Ä¡£F1¼Ç¼ÿһÌõÊÂÎñµÄÐ޸ļǼʱ»á°üº¬Ã¿Ò»ÐÐijһÁÐÐÞ¸ÄǰºÍÐ޸ĺóµÄÖµ£¬»¹ÓÐprimary key¡£ÕâÀïµÄprimary key°üº¬¸ù±í¸ñµÄkeyºÍÌá½»ÊÂÎñʱºòµÄʱ¼ä£¬ËùÓÐÕâЩ¼Ç¼·ÅÔÚÁËÁíÍâÒ»¸ö±í¸ñÖС£ÕâЩ¼Ç¼ÔÚF1Ïà¹ØÓ¦ÓÃÖÐÓÐÖØÒª×÷Óá£

¿Í»§¶Ë

¡¡¡¡ÔÚF1֮ǰ£¬ºÜ¶à¹È¸èµÄÊý¾Ý¿âÓ¦Óö¼ÊÇÓÃMySQLµÄORM£¬ORM²»ÊʺÏÔÚF1ÖÐʹÓã¬ÒòΪÀ©Õ¹ÐÔ²»¸ß¡£ÓÚÊǹȸèÉè¼ÆÁË×Ô¼ºµÄAPI¡£Í¬Ê±F1Ò²Ö§³ÖNoSQLºÍSQL¡£

ÊÂÎñ²éѯ´¦Àí

¡¡¡¡F1Ö§³Öµ¥µãÊÂÎñ´¦ÀíºÍ·Ö²¼Ê½ÊÂÎñ´¦Àí£¬µ¥µãOLTPÓÉÒ»¸öF1·þÎñÆ÷´¦Àí£¬·Ö²¼Ê½OLAPÓÉF1ϵĴÓÊô·þÎñÆ÷£¨slaver£©¹²Í¬´¦Àí¡£

´¦ÀíÔ¶³ÌÊý¾Ý

¡¡¡¡ÔÚF1ÖУ¬SQLÖеÄjoinÃüÁîÒªÇó¶ÁÈ¡¶à¸öÊý¾ÝÖÐÐĵÄÊý¾Ý£¬Õâ»á´øÀ´ÍøÂçÑÓʱ£¬½â¾ö°ì·¨ÊÇÊý¾ÝÅúÁ¿´«ËÍ£¨batching£©ºÍÁ÷Ë®Ïß²Ù×÷£¨pipelining£©¡£
¡¡¡¡Êý¾Ý¼ÆËãͨ³£ÊÇÒ»²¿·Ö¼ÆËãºÃÖ®ºó¾Í±»Êä³ö£¬¼õÉٵȴýʱ¼ä¡£ÕâÑù×öµÄºÃ´¦ÊDz¢ÐиßЧºÍ¼õÉÙ´æ´¢»º³å£¬µ«È±µãÊÇÊý¾Ý²»Äܱ»ÅÅÐò¡£

·Ö²¼Ê½¼ÆËã

¡¡¡¡Ã¿Ò»¸öÊÂÎñÖ´Ðмƻ®°üº¬Á˼¸Ê®¸ö×Ӽƻ®£¬Ã¿Ò»¸ö×Ӽƻ®Óɼ¸¸ö´ÓÊô·þÎñÆ÷Ö´ÐУ¬Í¬Ê±£¬Êý¾Ý»®·Ö£¨partitioning£©¼¼ÊõÒ²ÔÚ´Ë´¦Óõ½¡£

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºSQL DELETEÓï¾ä ÏÂһƪ£ºÊý¾Ý¿âSQLServer2012±Ê¼Ç£¨ËÄ£©¨..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: