热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:刚刚,MySQL战胜了老大哥Memcached!

篇首语:本文由编程笔记#小编为大家整理,主要介绍了刚刚,MySQL战胜了老大哥Memcached!相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了刚刚,MySQL 战胜了老大哥 Memcached!相关的知识,希望对你有一定的参考价值。






        





破产码农






IT圈最会讲故事的网红 · 南山彭于晏

mysql毫无疑问是当前OLTP领域的霸主,最新的MySQL 8.0版本更是能够轻松跑出百万QPS。

在KV内存领域,虽然这些年Redis风头正劲,但老大哥Memcached凭借其多线程的特性,依然牢牢占据一定的市场份额。

刚刚,MySQL 战胜了老大哥 Memcached!

在前一篇文章:,我们已经利用MySQL的Memcached Plugin插件跑出了220万的QPS,通过Memcached协议访问MySQL,然后读取InnoDB存储引擎中的数据。

所以,完全可以将MySQL数据库打造成一个KV数据库

那么,既然都是KV,MySQL KV和Memcached KV,谁的性能更好呢?

好了,这次安排~~~




This browser does not support music or audio playback. Please play it in Weixin or another browser.
刚刚,MySQL 战胜了老大哥 Memcached!










测试















业界没有好用的Memcached基准测试程序,所以,这次还是使用之前自己写的my_test测试程序,测试分为三种场景:




  • 只读:Get 请求;



  • 只写:Set 请求;



  • 读写:Get、Set请求,读写比例 5:1;



只读测试是内存KV数据库的强项,但是我们的MySQL已经跑出了220万QPS,所以MySQL能否挑战Memcached呢?最后的结果如下所示:


刚刚,MySQL 战胜了老大哥 Memcached!


可以看到Memcached非常强悍,在128个线程下可以跑到超过400万的QPS。


对比MySQL,虽然使用KV接口减少了SQL解析的开销,使用InnoDB的自适应哈希索引提升性能,但B+树的数据结构,依然无法匹敌Memcached。128线程下,MySQL的性能约280万。


只读测试让我有些郁闷,即便自适应哈希索引加持,MySQL依然无法战胜Memcached。性能差不多为Memcached只读测试的70%。


本以为接下去的测试会是一边倒的情况,没想到,只写测试,Memcached“翻车”了!!!


刚刚,MySQL 战胜了老大哥 Memcached!


可以看到 Memcached 在Set只写测试中,8线程能够跑出35万的QPS,但是随着线程的增加,性能不断下降。反复测试,结果依然如此。


对比MySQL,在32线程下可以取得18万的Set结果。要知道这时,MySQL有事务的保障,需要有额外的开销。


这一轮,虽然Memcached的极限性能值更高,但是MySQL的表现更为平稳,并且有事务保障,数据不会丢失。这一轮,MySQL胜。



最后,我们来看看混合读写测试场景,大多KV数据库用于读多写少的场景,这里我们测试选择读写比例5:1,读取比例超过80%。最后的测试结果为:


刚刚,MySQL 战胜了老大哥 Memcached!


测试结果与只写测试类似,在低并发下,Memcached优势明显,高并发下MySQL后来居上。极限值Memcached可以达到近100万的QPS,MySQL 32线程下表现最佳,性能可达62万QPS。









黑科技















上述测试,我们都是将MySQL当做事务型内存KV在和Memcached对比。



如果允许MySQL侧降低事务的要求,荣仍数据的丢失,那么我们还可以对MySQL Memcached Plugin做如下的配置:



















daemon_memcached_enable_binlog = OFF



skip_log_bin = 1



innodb_flush_log_at_trx_commit = 0



loose_daemon_memcached_r_batch_size = 10



loose_daemon_memcached_w_batch_size = 10



transaction_isolation = READ-UNCOMMITTED






上面的配置中关闭了二进制日志的写入,然后将重做日志的刷新设置为每秒1次。


接着就是比较
魔幻
的几个参数。首先,在KV层设置为读写发生10次才提交一次,进一步降低刷盘频率。由于每10次写入才提交一次,因此需要将事物隔离级别设置为READ-UNCOMMITTED,这样才能读取到未提交的数据!


最后,我们还能继续降低写的频率,即通过下面的命令关闭InnoDB层的redo日志写入:






mysql > ALTER INSTANCE disable InnoDB redo_log;



这样在SET的过程中,没有任何二进制日志和重做日志的写入,进一步提升了MySQL Memcached Plugin在Set下的性能表现,最终SET的测试结果如下所示:



刚刚,MySQL 战胜了老大哥 Memcached!


Memcached Plugin+就是启用“黑科技”后的MySQL性能,可以看到SET下性能得到了大幅提升,32、64线程极限值可达到48万+的QPS。


当然,取得上述性能的表现是因为我们牺牲了数据安全性!!!


最后,我再抛几个思考题给同学:


1. 目前还是有脏页刷新磁盘的问题,如何不修改内核将MySQL打造一个纯内存KV数据库?


2. 如何修改InnoDB层内核代码,将MySQL打造成段页式全内存数据库。其性能又能达到多少?









总结















可以看到,即便开启事务安全的配置,将MySQL打造成KV的性能是完全不输原生Memcached的,在写场景和混合读写场景都能比原生Memcached更好的表现。


Memcached的优势在于他需要的资源更少,但他的缺点是他只能做KV操作。而将InnoDB表映射为KV访问,则不但能提升MySQL数据库的性能,也能利用MySQL的事务特性、复制功能、SQL查询等功能,而这是传统KV数据库所不具备的能力。



BTW,你们的线上内存KV性能多少?一般也就5-10W QPS吧,所以,真的需要Memcached么?



仔细想想,是不是都是错误的架构!!!


科学尚未普及。



希望各位粉丝看完后点击右下角的“在看”,以示鼓励。长期坚持原创很不容易,多次想放弃。坚持是一种信仰,专注是一种态度,一路陪伴,一起星辰大海。













直播













刚刚,MySQL 战胜了老大哥 Memcached!



本周五21:00,抖音直播,欢迎关注抖音号













IMG群是码农的交流社区,IMG微信群交流内容包括但不限于技术、经济、军事、八卦等话题。欢迎有态度的码农们加入IMG大家庭。

IMG目前有少林群、武当群、峨眉群、华山群、M悦会(高端VIP群)

仅限码农入群,猎头或其他行业勿加,入群请加姜老师个人微信 82946772,并备注:码农入IMG群

-----------------------

视频号:破产码农

抖音号:破产码农

B站号:姜老师带你飞

长按下图二维码关注,将感受到一个有趣的灵魂,每篇文章都会有新惊喜。







          




往期推荐







































推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
kerra璐56_609
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有