关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 网站维护 »HandlerSocket是神马

    HandlerSocket是神马

    2011-05-16 10:13:00 出处:ITJS
    分享

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

    适用场景:

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

    没有主键、unique key或索引搜索不行! 表必须是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说明,其实实现都是一样的,只不过是不同语言):

    实例化:

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

    打开一个数据表:

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

    查询:

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

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

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

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

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

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

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

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。