`

【转】HandlerSocket的原理

阅读更多

HandlerSocket的应用场景:

MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务。

MySQL通过HandlerSocket插件提供了API访问接口,在我们的基准测试中,普通的R510服务器单实例Percona/XtraDB达到了72W+QPS(纯读),如果采用更强劲的CPU增加更多的网卡,理论上可以获得更高的性能。而同等条件下Memcached仅有40W+QPS(纯读),并且在R510上Memcached单实例已经无法提升性能,因为Memcached对内存的一把大锁限制了它的并发能力。

HandlerSocket原理:

MySQL的架构是“数据库管理”和“数据管理”分离,即MySQL Server+Storage Engine的模式。MySQL Server是直接与Client交互的一层,它负责管理连接线程,解析SQL生成执行计划,管理和实现视图、触发器、存储过程等这些与具体数据操作管理无关的事情,通过调用Handler API让存储引擎去操作具体的数据。Storage Engine通过继承实现Handler API的函数,负责直接与数据交互,数据存取实现(必须实现),事务实现(可选),索引实现(可选),数据缓存实现(可选)。


 HandlerSocket是在MySQL的内部组件,以MySQL Daemon Plugin的形式提供类似NoSQL的网络服务,它并不直接处理数据,只是侦听配置好的某个端口方式,接收采用NoSQL/API的通讯协议,然后通过MySQL内部的Handler API来调用存储引擎(例如InnoDB)处理数据。理论上,HanderSocket可以处理各种MySQL存储引擎,但是用MyISAM时,会出现插入的数据查不出来,这个实际上是构造行时第一字节没有初始化为0xff,初始化以后就没有问题,MyISAM也一样可以支持,但是为了更好地利用内存,用HandlerSocket都会搭配InnoDB存储引擎一起使用。

图1-2描述HandlerSocket具体做了哪些事情:


 因为HandlerSocket是以MySQL Daemon Plugin形式存在,所以在应用中,可把MySQL当NoSQL使用。它最大的功能是实现了与存储引擎交互,比如InnoDB,而这不需要任何SQL方面的初始化开销。访问MySQL的TABLE时,当然也是需要open/close table的,但是它并不是每次都去open/close table,因为它会将以前访问过的table cache保存下来以重复使用,而opening/closing tables是最耗资源的,而且很容易引起互斥量的争夺,这样一来,对于提高性能非常有效。在流量变小时,HandlerSocket会close tables,所以它一般不会阻塞DDL。

HandlerSocket与MySQL+Memcached的区别在哪呢?对比1-2和图1-3,可从中看出其不同点,1-3展示了典型的MySQL+Memecached的应用架构。因为Memcached的get操作比MySQL的内存中或磁盘上的主键查询要快很多,所以Memcached用于缓存数据库记录。若是HandlerSocket的查询速度和相应时间能与Memcached媲美,我们就可以考虑替换Memcached缓存记录的架构层。

 原文出处:http://www.mysqlops.com/2011/10/19/handlersocket-principle.html

  • 大小: 206 KB
  • 大小: 99.8 KB
  • 大小: 94.5 KB
分享到:
评论

相关推荐

    MySQL插件HandlerSocket.zip

    HandlerSocket的工作原理是通过创建一种特殊的套接字接口,使得应用可以直接向InnoDB引擎发送特定格式的命令,这些命令类似于简单的文件系统操作,如打开、读取、写入和关闭文件。这种方式避免了SQL语句的解析和执行...

    php-handlersocket

    HandlerSocket是MySQL提供的一种高性能、低延迟的接口,旨在为InnoDB存储引擎提供NoSQL风格的访问方式。通过绕过SQL解析和优化步骤,HandlerSocket能显著提高数据读取和写入的速度,尤其适用于大数据量的实时应用。 ...

    常用开源NoSQL原理与应用 Redis、Hash算法、LSM算法、HandlerSocket、分布式数据库 共35页.ppt

    Redis、Hash算法数据库、LSM算法数据库、HandlerSocket、分布式数据库

    up_632667_php-handelrsocket_q248j.rar

    1. **HandlerSocket原理**:HandlerSocket通过MySQL的存储引擎接口直接操作数据,绕过SQL解析,提供更快的数据访问速度。适用于大数据量的读操作,但可能不适用于复杂查询和写操作。 2. **安装与配置**:安装...

    up_770665_php-handelrsocket_6jv2g.rar

    1. **HandlerSocket工作原理**:理解它如何通过MySQL的存储引擎接口直接与数据库交互,避免了SQL解析的开销,从而提高读取速度。 2. **PHP扩展安装**:学习如何在PHP环境中安装和配置HandlerSocket扩展,包括编译、...

    up_683643_php-handelrsocket_vtmyk.rar

    2. **MySQL协议**:理解MySQL通信协议,包括如何建立连接、发送查询和接收结果,这对于理解HandlerSocket的工作原理至关重要。 3. **HandlerSocket API**:学习如何在PHP中使用HandlerSocket提供的接口,如建立连接...

    up_1034659_php-handelrsocket_ealtx.rar

    标题中的"up_1034659_php-handelrsocket_ealtx.rar"表明这是一个关于PHP HandlerSocket扩展的资源...通过阅读源码、运行测试和示例,你不仅可以掌握HandlerSocket的使用,还能提升对PHP扩展开发和MySQL底层原理的理解。

    up_178600_php-handelrsocket_hthwt.rar

    通过阅读和运行这些测试代码,可以更好地理解HandlerSocket的工作原理和使用方法。 标签"php"进一步确认了这个主题与PHP编程语言相关,特别是PHP在数据库操作方面的应用。 根据压缩包内的文件名称,我们可以推测:...

    up_410007_php-handelrsocket_wsd23.rar

    描述中提到,这个压缩包包含了PHP HandlerSocket的源码实现,这意味着我们可以深入理解其工作原理,并可能进行自定义修改以适应特定需求。它还包含了一些测试代码和示例程序,这些对于学习如何使用和调试...

    up_857279_php-handelrsocket_9qpri.rar

    3. **Socket通信**:掌握网络编程基础,包括套接字(socket)的概念,如何建立和管理连接,以及TCP/IP协议栈的工作原理。 4. **PHP与MySQL交互**:常规的PHP MySQL扩展(如mysqli或PDO_MySQL)的使用,以便对比...

    up_478518_php-handelrsocket_48grz.rar

    3. `php-handelrsocket`:这很可能是PHP HandlerSocket扩展的源代码或者编译后的库文件,开发者可以查看源码理解其工作原理,或者根据需要进行定制和优化。 在使用PHP HandlerSocket时,开发者需要注意以下几点: -...

    php-handelrsocket_xwy9zm_V2_php_

    要深入学习这个项目,你需要熟悉PHP编程,理解数据库工作原理,尤其是MySQL的HandlerSocket插件,以及具备一定的版本控制和日志分析能力。同时,通过阅读源码和文档,可以进一步了解项目的具体实现和应用场景。

    up_1225423_php-handelrsocket_vi9d44.rar

    1. **Socket通信基础**:理解socket编程的基本原理,如创建套接字,绑定,监听,连接,发送和接收数据等。 2. **MySQL通信协议**:handlerSocket直接与MySQL服务器通信,需要了解MySQL的通信协议格式。 3. **PHP扩展...

    up_815823_php-handelrsocket_5ujsqq.rar

    开发者可以通过阅读这些代码来了解扩展的工作原理,或者对其进行修改以适应特定的需求。 总结来说,这个压缩包为PHP开发者提供了一个直接与MySQL交互的高效工具——php-handelrsocket的实现及测试环境。通过学习和...

    php-handelrsocket_6u7nvw.rar_WEB开发_PHP_

    2. **HandlerSocket插件**:了解其工作原理,如何安装和配置,以及如何在PHP中建立连接和执行I/O操作。 3. **Web开发性能优化**:学习如何利用HandlerSocket优化数据库查询,特别是在高并发场景下提高Web应用的响应...

    PHP精彩实例(130例)_2

    这些实例不仅提供了源码,还有可能附带了详细的解释和说明,使你能够更好地理解代码背后的逻辑和PHP的编程原理。通过实践这些例子,你可以提升PHP编程技巧,解决实际问题,并且为自己的项目积累宝贵的经验。无论你是...

    Mysql DBA 20天速成教程

    2. **高性能MySQL**:探讨如Drizzle、MariaDB和Handlersocket等高性能解决方案,但实际应用较少。 在这个20天的学习过程中,你将具备在主流互联网公司担任MySQL DBA的能力。然而,DBA的角色在技术发展中正在发生...

Global site tag (gtag.js) - Google Analytics