»¶ÓÄú·ÃÎÊÎÒ°®IT¼¼ÊõÍø£¬½ñÌìС±àΪÄã·ÖÏíµÄ±à³Ì¼¼ÊõÊÇ£º¡¾ÏÂÒ»Õ¾£ºHandlerSocket£¡¡¿£¬ÏÂÃæÊÇÏêϸµÄ·ÖÏí£¡
ÏÂÒ»Õ¾£ºHandlerSocket£¡
ĿǰʹÓÃMySQLµÄÍøÕ¾£¬¶à°ëͬʱʹÓÃMemcache×÷Ϊ¼üÖµ»º´æ¡£ËäÈ»ÕâÑùµÄ¼Ü¹¹¼«ÆäÁ÷ÐУ¬ÓÐÖÚ¶à³É¹¦µÄ°¸Àý£¬µ«¹ýÓÚÒÀÀµMemcache£¬ÎÞÐÎÖÐÈÃMemcache³ÉΪ¹ÊÕϵĸùÔ´£º
MemcacheÊý¾ÝÒ»ÖÂÐÔµÄÎÊÌ⣺µ±MySQLÊý¾Ý±ä»¯ºó£¬Èç¹û²»Äܼ°Ê±ÓÐЧµÄÇåÀíµô¹ýÆÚµÄÊý¾Ý£¬¾Í»áÔì³ÉÊý¾Ý²»Ò»Ö¡£ÕâÔÚÇ¿µ÷¼´Ê±ÐÔµÄWeb2.0ʱ´ú£¬²»¿ÉÈ¡¡£
Memcache±ÀÀ£ºóµÄÑ©±ÀЧӦ£º×÷Ϊ»º´æµÄMemcacheÒ»µ©±ÀÀ££¬MySQLºÜ¿ÉÄÜÔÚ¶Ìʱ¼äÄÚ³ÐÊܸ߸ºÔضøå´»ú¡£¾Ý˵ǰ¶Îʱ¼äÐÂÀË΢²©¾ÍÔâÓöÁËÕâÑùµÄÎÊÌâ¡£
×¢£º¹ØÓÚÇåÀí¹ýÆÚÊý¾ÝµÄÎÊÌ⣬¿ÉÒÔÔÚ³ÌÐò¼Ü¹¹ÉÏÏë°ì·¨£¬Èç¹ûÊý¾Ý²Ù×÷ÓÐͳһDAO·â×°µÄ»°£¬¿ÉÒÔÀûÓÃObserverģʽÀ´ÇåÀí¹ýÆÚÊý¾Ý£¬·ÇÖ÷ÌâÄÚÈÝ£¬×ÊÁÏ×Բ顣
Ãæ¶ÔÕâЩÎÊÌ⣬HandlerSocketÏîÄ¿ÊǸö²»´íµÄ½â¾ö·½°¸£¬Ëüͨ¹ý²å¼þµÄ·½Ê½¸³ÓèMySQLÍêÕûµÄNoSQL¹¦ÄÜ£¬´ÓÔÀíÉϽ²£¬ËüÌø¹ýMySQLÖÐ×îºÄʱµÄÓï·¨½âÎö£¬²éѯ¼Æ»®µÈ²½Ö裬ֱ½Ó¶ÁÈ¡Êý¾Ý£¬Èç¹ûÄÚ´æ¹»´ó£¬ÄÜ×°ÏÂË÷Òý£¬MySQLµÄ²éѯЧÂÊÄÜÌá¸ßÈô¸É±¶£¡
ÐÔÄܲâÊÔʵÀý£ºUsing MySQL as a NoSQL – A story for exceeding 750£¬000 qps £¨GFW£©
ÒòΪHandlerSocketµÄÐÔÄÜ×ã¹»ºÃ£¬ËùÒÔ¾ÍûÓбØÒªÊ¹ÓÃMemcacheÁË£¬ÄܽÚÊ¡´óÁ¿µÄÓ²¼þ×ÊÔ´£¬Ï൱µÍ̼£¡¶øÇÒHandlerSocket²Ù×÷µÄÊÇMySQL·ÅÔÚÄÚ´æÖеÄË÷Òý£¬Ã»ÓжîÍâµÄ»º´æ£¬ËùÒÔ×ÔÈ»¾Í²»´æÔÚÊý¾ÝÒ»ÖÂÐÔµÄÎÊÌâ¡£
°²×°
Èç¹ûʹÓÃPercona Server°æ±¾µÄMySQL¾Í¼òµ¥ÁË£¬ÒòΪËüÒѾÄÚÖÃÁËHandlerSocketÖ§³Ö£¬²»¹ý¿¼Âǵ½ÆäÄÚÖõİ汾²»¹»Ð£¬´æÔÚһЩÔçÒÑÐÞ¸´µÄBUG£¬ËùÒÔ×îºÃ²ÉÓÃÔ´´úÂë±àÒë¡£
¹Ù·½ÒѾÓÐÁËÒ»·Ý¼òµ¥µÄ°²×°Îĵµ£¬µ«ÔÚÎÒʵ¼Ê°²×°Ê±£¬Óöµ½ÁËһЩÆäËûδ˵Ã÷µÄÎÊÌ⣬ËùÒÔÕâÀï¾Í°ÑÏàÓ¦µÄ°²×°¹ý³ÌÔÙдһ±é¡£
Ê×ÏÈҪȷ±£ÒѾ°²×°ÁËMySQL5.1ÒÔÉϵİ汾£¬ÎÒÓõÄÊÇUbuntu²Ù×÷ϵͳ£¬ÊÂÏÈÒѾÓÃapt°²×°ÁËMySQL5.1.37£¬Í¬Ê±»¹ÐèÒªÏàÓ¦µÄmysql_config£¬Èç¹ûÊÇUbuntuµÄ»°£¬¿ÉÒÔ£º
|
|
×¢£ºÈç¹ûÄãÓõÄMySQLÊÇ´ÓÔ´´úÂë±àÒëµÄ»ò¹Ù·½ÌṩµÄ¶þ½øÖư汾£¬¿ÉÒÔÂÔ¹ý´Ë²½¡£
½Ó×ÅÏÂÔØÒ»·ÝºÍϵͳMySQL°æ±¾Ò»ÖµÄMySQLÔ´´úÂëºÍHandlerSocketÔ´´úÂ룺
mysql-5.1.37.tar.gz
ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz
|
|
ÆäÖеIJÎÊýº¬ÒåÈçÏ£ºwith-mysql-source±íʾMySQLÔ´´úÂëĿ¼£¬with-mysql-bindir±íʾMySQL¶þ½øÖÆ¿ÉÖ´ÐÐÎļþĿ¼£¨Ò²¾ÍÊÇmysql_configËùÔÚĿ¼£©£¬with-mysql-plugindir±íʾMySQL²å¼þĿ¼£¬Èç¹û²»Çå³þÕâ¸öĿ¼ÔÚÄÄ£¬¿ÉÒÔ°´ÈçÏ·½·¨²éѯ£º
|
|
ÔËÐÐÃüÁîºó£¬Èç¹ûÄãʹÓõÄÊÇMySQL5.1.37°æ±¾µÄ»°£¬»áÓöµ½ÈçÏ´íÎóÐÅÏ¢£º
MySQL source version does not match MySQL binary version
Ã÷Ã÷ÎÒÃǵÄMySQLÔ´´úÂë°æ±¾ºÍ¶þ½øÖư汾¶¼ÊÇ5.1.37£¬ÎªÊ²Ã´»¹»á³öÏÖÕâ¸ö´íÎóÄØ£¿Í¨¹ý²éѯHandlerSocketµÄ±àÒë½Å±¾£¬·¢ÏÖÔÀ´Ëü»á¼ìË÷MySQLÔ´´úÂëĿ¼ÖеÄVERSIONÎļþ£¬¿ÉMySQL5.1.37µÄÔ´´úÂëĿ¼Àï²»ÖªºÎ¹Ê¾¹È»Ã»ÓÐÕâ¸öÎļþ£¬ËùÒԾͱ¨´íÁË£¬¼ÈȻ֪µÀÁËÔÒò£¬ÄÇÎÒÃǾÍÕÕè»»¢×öÒ»¸öVERSIONÎļþ·Åµ½MySQLÔ´´úÂëĿ¼£¬ÄÚÈÝÈçÏ£º
|
|
ÔÙ´ÎÔËÐÐconfigure½Å±¾£¬Ó¦¸Ã¾ÍOKÁË£¬°ÑʣϵIJ½Öè½øÐÐÍ꣺
|
|
½Ó×ÅÐèÒªÅäÖÃÒ»ÏÂHandlerSocket£¬±à¼MySQLÅäÖÃÎļþ£¬¼ÓÈëÈçÏÂÄÚÈÝ£º
|
|
´ËÍ⣬InnoDBµÄinnodb_buffer_pool_size£¬»òMyISAMµÄkey_buffy_sizeµÈ¹ØÏµµ½»º´æË÷ÒýµÄÑ¡Ï¿ÉÄÜÉèÖôóһЩ£¬ÕâÑù²ÅÄÜ·¢»ÓHandlerSocketµÄDZÁ¦¡£
×¢£ºapt°ü¹ÜÀíϵÄÅäÖÃÎļþÒ»°ãÊÇ/etc/mysql/my.cnf£¬·ñÔòÒ»°ãÊÇ/etc/my.cnf
×îºóµÇ½MySQL²¢¼¤»îHandlerSocket²å¼þ£º
|
|
Èç¹ûûÓÐÎÊÌâµÄ»°£¬¾ÍÄÜÔÚMySQLÀï¿´µ½HandlerSocketµÄÏß³ÌÁË£º
|
|
Ò²¿ÉÒÔͨ¹ý²éѯ¸ÕÅäÖõĶ˿ÚÊÇ·ñÒѾ±»MySQLÕ¼ÓÃÀ´È·ÈÏÊÇ·ñ°²×°³É¹¦£º
|
|
Íê»î¶ù£¡ÏÖÔÚÄãµÄMySQLÒѾ¾ß±¸NoSQLµÄÄÜÁ¦ÁË£¡
ʵս
Ê×ÏÈ´´½¨Ò»¸ö²âÊÔÓÃµÄ±í£º
|
|
×¢£ºÀíÂÛÉÏHandlerSocketÖ§³ÖMyISAM£¬InnoDBµÈ¸÷ÖÖÒýÇæ£¬²»¹ýÍÆ¼öʹÓÃInnoDB¡£
HandlerSocketµÄÐÒé·Ç³£¼òµ¥£¬Ö¸Áîͨ¹ýTAB·Ö¸î£¬Ò»ÐоÍÊÇÒ»¸öÇëÇó¡£
´ò¿ªË÷Òý£ºP <Ë÷Òý±êʶ> <Êý¾Ý¿â> <±í> <Ë÷Òý> <×Ö¶Î>
²åÈëÊý¾Ý£º<Ë÷Òý±êʶ> ‘+’ <²ÎÊý¸öÊý> <²ÎÊý1> … <²ÎÊýN>
¶ÁÈ¡Êý¾Ý£º<Ë÷Òý±êʶ> <²Ù×÷> <²ÎÊý¸öÊý> <²ÎÊý1> … <²ÎÊýN> <ÌõÊý> <Æ«ÒÆ>
SQLÔÐÍ£ºINSERT INTO test.t (id, a, b) VALUES (1, ‘a1′, ‘b1′), (2, ‘a2′, ‘b2′)
|
|
×¢£ºÊ¹ÓÃHandlerSocketʱ£¬ÒòΪûÓÐʵ¼ÊÔËÐÐSQL£¬ËùÒÔBinlog¼Ç¼µÄÊÇRow¸ñʽ¡£
SQLÔÐÍ£ºSELECT id£¬ a£¬ b FROM test.t WHERE id=1 LIMIT 1
|
|
SQLÔÐÍ£ºSELECT id, a, b FROM test.t WHERE id >=1 LIMIT 2
|
|
SQLÔÐÍ£ºSELECT id, a, b FROM test.t WHERE a=‘a1′ AND b=‘b1′ LIMIT 1
|
|
¶ÔHandlerSocketÒ»¸ö³£¼ûµÄÎó½âÊÇÖ»ÄÜÖ´ÐÐPRIMARYÀàÐ͵ÄKV²éѯ£¬Êµ¼ÊÉÏÖ»ÒªÖ§³ÖË÷Òý£¬Ò»°ãµÄ¼òµ¥²éѯËü¶¼ÄÜʤÈΣ¬Æª·ùËùÏÞ£¬ÕâÀï¾Í²»¶à˵ÁË£¬Èç¹ûÄã¾õµÃÖ±½Ó²Ù×÷telnetÓÐЩ³ÔÁ¦£¬Ò²¿ÉÒÔʹÓÃ×Ô¼ºÊìϤµÄ¿Í»§¶ËÀ´²âÊÔ£¬¹Ù·½ÎĵµÀïÓнéÉÜ¡£
×¢£ºHandlerSocket×÷ÕßдÁËÒ»¸ö²»´íµÄPPT¿ÉÒԲο¼£ºHandlerSocket plugin for MySQL
»¥ÁªÍø¼¼Êõ·¢Õ¹ÓÌÈçÒ»ÁиßËÙÔËÐеĻ𳵣¬ÏÂÒ»Õ¾£ºHandlerSocket£¡ÇëϵºÃ°²È«´ø¡££¨À´Ô´£º»ðµÆ±Ê¼Ç£©
ÒÔÉÏËù·ÖÏíµÄÊǹØÓÚÏÂÒ»Õ¾£ºHandlerSocket£¡£¬ÏÂÃæÊDZà¼ÎªÄãÍÆ¼öµÄÓмÛÖµµÄÓû§»¥¶¯£º
¡¡¡¡Ïà¹ØÎÊÌ⣺ÈçºÎÀí½â Tornado
¡¡¡¡´ð£ºÈç¹ûÄãÒѾ¶ÔËüÓÐÁËÐËȤ,Äã¿ÉÒÔÌøÈ¥¿´ÏÂÒ»½ÚÄÚÈÝ¡£TornadoÊÇÒ»¸öÓÃPython±àд...¿ÉÒÔͨ¹ýµ÷ÓÃadd_handler()·½·¨½«Ò»¸ösocket¼ÓÈëIOÑ»·ÖÐ:def add_handler(self... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺ÈçºÎÀí½â Tornado
¡¡¡¡´ð£ºÈç¹ûÄãÒѾ¶ÔËüÓÐÁËÐËȤ,Äã¿ÉÒÔÌøÈ¥¿´ÏÂÒ»½ÚÄÚÈÝ¡£TornadoÊÇÒ»¸öÓÃPython±àд...¿ÉÒÔͨ¹ýµ÷ÓÃadd_handler()·½·¨½«Ò»¸ösocket¼ÓÈëIOÑ»·ÖÐ:def add_handler(self... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺Goagent´íÎó
¡¡¡¡´ð£ºMINA,Grizzly[grizzly-nio-framework],xSocket¶¼ÊÇ»ùÓÚ java nioµÄ server framework. ÕâÀïµÄÐÔÄÜȱÏݵĽ¹µãÊÇÖ¸µ±Ò»ÌõchannelÉϵÄSelectionKey.OP_READ readyʱ,1.ÊÇÓÉselect thread¶ÁÍêÊý¾ÝÖ®ºóÔÙ·Ö·¢¸øÓ¦ÓóÌÐòµÄhandler,2.»¹ÊÇÖ±½Ó¾Í·Ö·¢,ÓÉ... >>Ïêϸ
- ÆÀÂÛÁÐ±í£¨ÍøÓÑÆÀÂÛ½ö¹©ÍøÓѱí´ï¸öÈË¿´·¨£¬²¢²»±íÃ÷±¾Õ¾Í¬ÒâÆä¹Ûµã»ò֤ʵÆäÃèÊö£©
-
