HandlerSocket_handlermapping原理

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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_handlermapping原理

(图1-1 MySQL架构)

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

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

(图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缓存记录的架构层。
HandlerSocket_handlermapping原理

(图1-3典型MySQL+Memcached架构)

–整理自网上


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172628.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月24日 上午10:00
下一篇 2022年8月24日 上午10:00


相关推荐

  • ruby 基础笔记

    ruby 基础笔记

    2021年8月29日
    71
  • 5步搞定新中式IP设计!AI混搭模型保姆级教程

    5步搞定新中式IP设计!AI混搭模型保姆级教程

    2026年3月15日
    2
  • 自动控制原理哈工大课后答案_控制系统的数学模型答案

    自动控制原理哈工大课后答案_控制系统的数学模型答案计算机控制系统大作业,简析冯诺依曼结构和哈佛结构异同浅析冯诺依曼结构与哈佛结构摘要:本文简要介绍了冯诺依曼结构与哈佛结构,将两者原理及应用情况进行了对比分析,并对计算机组成发展趋势做了简单预测。关键词:计算机系统结构冯诺依曼结构哈佛结构1冯诺依曼结构与哈佛结构1.1冯诺依曼结构冯诺依曼结构(VonNeumannarchitecture),也称普林斯顿结构,它把程序本身当作数据来对待,程…

    2026年4月17日
    5
  • Java线程池七个参数详解

    本文参考:https://blog.it-follower.com/posts/1035400434.htmljava多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadF…

    2022年4月4日
    75
  • 用idea创建javaweb项目详解_idea怎么创建普通java项目

    用idea创建javaweb项目详解_idea怎么创建普通java项目文章目录一、创建web项目1、打开idea软件,点击界面上的CreateNewProject2、进入如下界面。选中javaEnterprise,配置jdk,tomcat,勾选WebApplication案例,注意勾选生成web.xml文件3、指定项目的名称及项目文件的保存地址4、创建成功5、创建class文件和lib文件夹  点击项目的WEF-INF文件夹,右…

    2026年2月4日
    6
  • YUV422转换YUV420应用实例

    YUV422转换YUV420应用实例在上一篇文章中 JPEG 编码学习 JPEG 数据转 YUV 数据应用实例已经可以将 v4l2 采集到的 JPEG 数据转换为 YUV422 格式 但是我们有时候需要使用其他格式的数据 比如用 YUV420 作为 H264 的输入数据格式 做数据格式转换 首先需要明白各种数据类型的采样分布格式 如下图 我们在上一篇中通过 JPEG 解码转换过来的是 YUYV 数据格式 YUV422 他的数据分布是 现在我们需要把 YUYV

    2026年3月17日
    2

发表回复

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

关注全栈程序员社区公众号