刚刚,MySQL战胜了老大哥Memc

破产码农

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

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

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

在前一篇文章:震惊!MySQL8.WQPS轻松达成,我们已经利用MySQL的MemcachedPlugin插件跑出了万的QPS,通过Memcached协议访问MySQL,然后读取InnoDB存储引擎中的数据。

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

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

好了,这次安排~~~

测试

业界没有好用的Memcached基准测试程序,所以,这次还是使用之前自己写的my_test测试程序,测试分为三种场景:只读:Get请求;只写:Set请求;读写:Get、Set请求,读写比例5:1;只读测试是内存KV数据库的强项,但是我们的MySQL已经跑出了万QPS,所以MySQL能否挑战Memcached呢?最后的结果如下所示:可以看到Memcached非常强悍,在个线程下可以跑到超过万的QPS。对比MySQL,虽然使用KV接口减少了SQL解析的开销,使用InnoDB的自适应哈希索引提升性能,但B+树的数据结构,依然无法匹敌Memcached。线程下,MySQL的性能约万。只读测试让我有些郁闷,即便自适应哈希索引加持,MySQL依然无法战胜Memcached。性能差不多为Memcached只读测试的70%。本以为接下去的测试会是一边倒的情况,没想到,只写测试,Memcached“翻车”了!!!可以看到Memcached在Set只写测试中,8线程能够跑出35万的QPS,但是随着线程的增加,性能不断下降。反复测试,结果依然如此。对比MySQL,在32线程下可以取得18万的Set结果。要知道这时,MySQL有事务的保障,需要有额外的开销。这一轮,虽然Memcached的极限性能值更高,但是MySQL的表现更为平稳,并且有事务保障,数据不会丢失。这一轮,MySQL胜。最后,我们来看看混合读写测试场景,大多KV数据库用于读多写少的场景,这里我们测试选择读写比例5:1,读取比例超过80%。最后的测试结果为:测试结果与只写测试类似,在低并发下,Memcached优势明显,高并发下MySQL后来居上。极限值Memcached可以达到近万的QPS,MySQL32线程下表现最佳,性能可达62万QPS。

黑科技

上述测试,我们都是将MySQL当做事务型内存KV在和Memcached对比。如果允许MySQL侧降低事务的要求,荣仍数据的丢失,那么我们还可以对MySQLMemcachedPlugin做如下的配置:

daemon_memcached_enable_binlog=OFFskip_log_bin=1innodb_flush_log_at_trx_


转载请注明:http://www.aierlanlan.com/cyrz/779.html

  • 上一篇文章:
  •   
  • 下一篇文章: