关闭 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

    上一篇返回首页 下一篇

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

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

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

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