HandlerSocket是神马

HandlerSocket是日本人akira higuchi 写的一个MySql的插件。通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。按照作者给出的数据可以在数据全部在内存的情况下可以达到75W的QPS查询。

适用场景:

Innodb引擎、按主键、unique key或索引搜索(也就是说它的SQL的where条件必须是这些);支持limit 语句、IN、INSERT/UPDATE/DELETE。

  1. 没有主键、unique key或索引搜索不行!
  2. 表必须是Innodb引擎

闲话少说,直接上安装和测试结果。

安装:

需要为MySQL安装插件、PHP安装扩展。这里就不再赘述,可以参考此篇文章http://blog.1984fox.com/read.php?30#entrymore,很详细。

API:

谷歌code(http://code.google.com/p/php-handlersocket/)中提供了PHP扩展作者的API,这里我将每个方法的参数具体说明一下(也可以去https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/perl-client.en.txt参考一下perl扩展的API说明,其实实现都是一样的,只不过是不同语言):

实例化:

  1. /*   
  2.  * String  $host:MySQL ip;  
  3.  * String  $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写   
  4.  */  
  5. $hs = new HandlerSocket($host, $port);  

打开一个数据表:

  1. /*  
  2.  * Int       $index:这个数字相当于文件操作里的句柄,HandlerSocket的所有其他方法都会依据这个数字来操作由这个 openIndex打开的表,  
  3.  * String  $dbname:库名  
  4.  * String  $table:表名  
  5.  * String  $key:表的“主键”(HandlerSocket::PRIMARY)或“索引名”作为搜索关键字段,这就是说表必须有主键或索引  
  6.  *                 个人理解:要被当做where条件的key字段,这样可以认为handlersocket只有一个where条件  
  7.  * String  $column'column1,column2' 所打开表的字段(以逗号隔开),就是说$table表的其他字段不会被操作  
  8.  */  
  9. $hs->openIndex($index, $dbname, $table, $key, $column); 

查询:

  1. /*  
  2.  * Int     $index: openIndex()所用的$index 
  3.  * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=''>=''<=''>',and '<';可以理解为where条件  
  4.  * Array   $value  
  5.  * Int       $number(默认是1):获取结果的***条数;相当于SQL中limit的第二个参数  
  6.  * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的***个参数  
  7.  */  
  8. $retval = $hs->executeSingle($index, $operation, $value, $number, $skip); 

插入(注意:此处的openIndex要用$port_wr,即读写端口):

  1. /*  
  2.  * Int     $index: openIndex()所用的$index 
  3.  * Array   $arr:数字元素数与openIndex的$column相同  
  4.  */  
  5. $retval = $hs->executeInsert($index, $arr); 

删除(注意:此处的openIndex要用$port_wr,即读写端口):

  1. /*  
  2.  * Int     $index: openIndex()所用的$index 
  3.  * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=''>=''<=''>',and '<';可以理解为where条件  
  4.  * Array   $value  
  5.  * Int     $number(默认是1):获取结果的***条数;相当于SQL中limit的第二个参数  
  6.  * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的***个参数  
  7.  */  
  8. $retval = $hs->executeDelete($index, $operation, $value, $number, $skip); 

更新(注意:此处的openIndex要用$port_wr,即读写端口):

  1. /*  
  2.  * Int     $index: openIndex()所用的$index 
  3.  * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=''>=''<=''>',and '<';可以理解为where条件  
  4.  * Array   $value  
  5.  * Int       $number(默认是1):获取结果的***条数;相当于SQL中limit的第二个参数  
  6.  * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的***个参数  
  7.  */  
  8. $retval = $hs->executeUpdate($index, $operation, $value, $number, $skip); 

测试:

新建一个1000w条数据的用户表,id为主键,包括uname、email、add_time字段,使用两台不同的机器做ab压力测试:

读测试:

并发50,5000次压力测试:

MySQL:        min: 0.504740953445    max:13.1727859974    average: 1.05    CPU:0.7%us,  0.3%sy    use:111s

HandlerSocket:min: 0.302443981171    max:9.37712621689    average:0.736     CPU:0.4%us,  0.3%sy    use:77s

并发70,5000次压力测试:

MySQL:           min: 0.504750013351    max:10.4482009411    average: 1.094   CPU:0.9%us,  0.4%sy    use:85s

HandlerSocket:min: 0.302488803864    max:10.3345310688    average: 0.788   CPU:0.5%us,  0.4%sy    use:62s

并发110,5000次压力测试:

MySQL:           min:0.505280017853    max:21.3242678642    average:1.095   CPU:1.5%us,  0.7%sy    use:55s

HandlerSocket:min: 0.30281996727    max:10.6022770405    average:0.786   CPU:1.1%us,  0.7%sy    use:39s

并发150,5000次压力测试:

MySQL:           min: 0.505041122437    max:28.8087069988    average:1.073   CPU:1.8%us,  0.9%sy    use:61s

HandlerSocket:min: 0.302739143372    max:12.878344059    average:0.774   CPU:1.0%us,  0.9%sy    use:30s

总结:

共同点:并发越高,性能越好

hs系统占用和执行时间都少于MySQL 性能约好30%~40%

写测试:

并发50,5000次压力测试:

MySQL:           min: 0.507106781006 max: 4.95259904861 average: 0.594   CPU:0.76%us, 0.49%sy    use:62s

HandlerSocket:min: 0.303457021713 max: 7.0854101181  average: 0.383   CPU:0.4%us,  0.2%sy     use:43s

并发70,5000次压力测试:

MySQL:        min: 0.508066892624 max: 12.8451189995 average: 0.659   CPU:1.0%us,  0.6%sy     use:51s

HandlerSocket:min: 0.30427312851  max: 12.4244120121 average: 0.417   CPU:0.53%us, 0.29%sy    use:32s

并发90,5000次压力测试:

MySQL:        min: 0.507676839828 max: 12.8466610909 average: 0.689   CPU:1.3%us,  0.72%sy    use:45s

HandlerSocket:min: 0.304312229156 max: 12.4680581093 average: 0.465   CPU:0.66%us, 0.38%sy    use:29s

并发110,5000次压力测试:

MySQL:        min: 0.507092952728 max: 11.7785778046 average: 0.775   CPU:1.34%us, 0.82%sy    use:45s (13条未写入)

HandlerSocket:min: 0.219769954681 max: 12.6269509792 average: 0.556   CPU:0.63%us, 0.37%sy    use:32s (15条未写入)

并发150,5000次压力测试:

MySQL:        min: 0.507570981979 max: 13.4538660049 average: 0.75    CPU:1.9%us,  1.1%sy     use:29s (写多1条)

HandlerSocket:min: 0.304651975632 max: 16.3402500153 average: 0.555   CPU:0.7%us,  0.43%sy    use:26s (8条未写入)

总结:

共同点:并发越高,性能越好

hs系统占用和执行时间都少于MySQL 性能约好50%~60%

测试结果确实比较明显,HandlerSocket可以在高并发、简单表操作的环境下替代MySQL。

原文链接:http://www.cnblogs.com/yangligogogo/articles/1969823.html

 

【编辑推荐】

  1. 数据库日常维护常用的脚本部分收录
  2. SQL与NoSQL——MySQL与NoSQL的融合
  3. MySQL中的NoSQL插件
  4. 甲骨文发布***BI软件 添加对iPad支持
  5. 微软WP7本地数据库之Sterling编程技巧

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/279392.html<

(0)
管理的头像管理
上一篇2025-05-12 01:11
下一篇 2025-05-12 01:12

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注