`
schweigen
  • 浏览: 6861 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Mysql 官方Memcached 插件初步试用感受

 
阅读更多
话说,4月11号,Mysql 官方发布了一个Memcached 的插件。以前,曾经也有MemcacheDB 做过相同的事情,不过似乎它现在没啥声音了,而非官方、非Memcached 协议的HandlerSocket 最近反响挺强烈的。这些都有一个共同点:基于Mysql 的storage engine,然后在其上构建一层自有API。

一、安装


安装这个挺简单的,因为此插件需要Mysql 5.6 以上版本支持,所以最好的办法就是去http://labs.mysql.com/ 网站上下载一个包,选择mysql-5.6-labs-innodb-memcached 这个包下载,里面包含了mysql5.6 和mysql memcached 插件。
下载完成后解压缩至/usr/local/mysql 目录,然后按正常顺序安装mysql
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> cp support-files/mysql.server /etc/init.d/mysql


之后,就可以service mysql start 启动mysql 了。启动Mysql 后,进行Mysql Memcached 插件安装:
1、安装sql 脚本
mysql < scripts/innodb_memcached_config.sql


2、进入mysql 客户端,安装插件
mysql> install plugin daemon_memcached soname "libmemcached.so";


完成上面两步之后,mysql memcached 就安装完成了。下面可以进行一点测试:

telnet localhost 11211

set test 0 0 2
11
STORED
get test
VALUE test 0 2
11
END


说明set 和 get 已经能够正常使用了。

二、说明


进入mysql 客户端,show databases; 后,你会发现多了一个库innodb_memcache
mysql> use innodb_memcache;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_innodb_memcache |
+---------------------------+
| cache_policies            |
| config_options            |
| containers                |
+---------------------------+
3 rows in set (0.00 sec)


上述三张表都为memcached 的配置信息,分别存放cache 策略、配置和容器信息。先看containers 表
mysql> select * from containers;
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| aaa  | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | idx                    |
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
1 row in set (0.00 sec)


说明,通过memcached set 的数据,放在test 库中的demo_test 表中,同时key 存放在表的c1 字段里,value 存放在c2 字段里。然后我们去test 库看看
mysql> use test;
Database changed
mysql> select * from demo_test;
+------+------+------+------+--------------+------+------+------+------+------+------+
| cx   | cy   | c1   | cz   | c2           | ca   | CB   | c3   | cu   | c4   | C5   |
+------+------+------+------+--------------+------+------+------+------+------+------+
| 9    |    3 | AA   |    2 | HELLO, HELLO |    8 |    8 |    0 |    1 |    3 |    0 |
+------+------+------+------+--------------+------+------+------+------+------+------+
1 row in set (0.00 sec)


没有发现我们刚才set 的test?这里,需要设置一下数据库的transaction 级别,才能同步显示,否则,在64 位系统上,是设有batch size 的,超过32 个才会往数据库中同步
sql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;


然后再去看看,刚才我们通过memcached 协议set 的值,出现了吧。
注意:在有memcached client 连接的情况下,此表是锁定的,无法采用sql 进行修改
同时,似乎memcached 协议里设置有效时间,在这里无法生效,会一直保留?

在配置里,还有一张表我们需要注意的,cache_policies。看看它的创建语句
 CREATE TABLE `cache_policies` (
  `policy_name` varchar(40) NOT NULL,
  `get_policy` enum('innodb_only','cache_only','caching','disabled') NOT NULL,
  `set_policy` enum('innodb_only','cache_only','caching','disabled') NOT NULL,
  `delete_policy` enum('innodb_only','cache_only','caching','disabled') NOT NULL,
  `flush_policy` enum('innodb_only','cache_only','caching','disabled') NOT NULL,
  PRIMARY KEY (`policy_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


这些策略里,都有四个选项:innodb_only, cache_only, caching 和disabled。
    innodb_only: 数据直接存入innodb engine 中
    cache_only: 如同传统的memcache server,数据只存在memory 中
    caching: memory 中缓存,如果找不到,再向innodb engine 中搜索

三、测试

不管如何,我们还是需要看看它的性能如何,因时间有限,我只进行了一点简单测试,采用memslap 来进行,同时部署了一个官方的memcached server 来进行对比。
首先是官方memcached server 数据:
Get Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       3226683      37960        39.6       0          25       41149      374        233.02     295.70

Set Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       358528       4217         4.4        0          29       41313      406        233.22     335.51

Total Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       3585210      42178        44.0       0          25       41313      377        233.56     299.46

然后是采用Innodb_only 策略的mysql memcached:
Get Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1043059      12271        10.9       0          46       395949     1026       4794.93    424.72

Set Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       115903       1363         1.2        0          76       395981     2482       9260.01    651.46

Total Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1158962      13634        12.1       0          46       395981     1172       5427.44    443.28

采用Caching 策略后的结果:
Get Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1101521      12959        10.7       0          46       126892     987        3506.08    450.86

Set Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       122398       1439         1.2        0          74       126725     2211       6591.01    683.18

Total Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1223919      14399        11.9       0          46       126892     1109       3942.50    469.99

最后,是cache_only 策略的结果:
Get Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1043059      12271        10.9       0          46       395949     1026       4794.93    424.72

Set Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       115903       1363         1.2        0          76       395981     2482       9260.01    651.46

Total Statistics
Type     Time(s)  Ops          TPS(ops/s)   Net(M/s)   Get_miss   Min(us)  Max(us)    Avg(us)    Std_dev    Geo_dist 
Global   85       1158962      13634        12.1       0          46       395981     1172       5427.44    443.28

四、结论

从上述测试结果中可以看出,mysql 官方的解决方案,现在还是一个不怎么成熟的产品,尤其表现在不论读写,都不是太稳定,std_dev 和geo_dist 数值都非常大。性能方面,和memcached server 比起来,差了三倍以上,不过,在特殊场合,这种性能消耗还是可以接受的。由于时间有限,也没法再拿HandlerSocket 和这个比较一下了,感兴趣的同学可以帮忙做个比较。
不过,不管怎样,mysql 社区至少看到了nosql 方面的强烈需求,并且有意愿在这上面有些表现,至少来说是个可喜的迹象。

五、进阶、参考

除了初步的使用外,在labs 里,还有mysql-cluster 解决方案,能够和此共同使用,构建稳固的storage system。
另外,有关这个的各种说明、设计思路等,直接去其官网看吧,这里就不一一搬运了,地址:
http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html
http://blogs.innodb.com/wp/2011/04/nosql-to-innodb-with-memcached/
http://blogs.innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/

分享到:
评论
3 楼 stefenjun 2011-05-12  
资料有点少.
用上memcache速度确实快不少
2 楼 ouyangshixiong 2011-05-12  
这个mysql+memcached帖子有营养
1 楼 wavelet 2011-05-06  
有没有mysql集群共用一个memcached的测试?

相关推荐

    JAVA+MYSQL+Memcached

    在IT领域,尤其是在Web开发中,Java、MySQL和Memcached是三个非常重要的技术组件。本文将深入探讨这些技术,以及如何将它们结合使用。 首先,Java是一种广泛使用的面向对象的编程语言,尤其在企业级应用中占据主导...

    MySQL中InnoDB的Memcached插件的使用教程

    InnoDB Memcached插件则是MySQL提供的一种功能,允许开发者通过使用Memcached协议与MySQL数据库进行交互,从而简化数据存取,提高应用程序的性能。Memcached是一种广泛使用的分布式内存缓存系统,它能够快速存储和...

    《Apache, MySQL, memcached和Perl开发Web应用程序》[PDF]

    《Apache, MySQL, memcached和Perl开发Web应用程序》是一本专为希望利用这些技术构建高效Web应用程序的程序员设计的指南。书中的内容深入浅出,旨在帮助读者掌握这些核心技术,并提高开发过程的效率。 Apache是世界...

    Apache,.MySQL,.memcached和Perl开发Web应用程序

    中文名: Apache, MySQL, memcached和Perl开发Web应用程序 原名: Developing Web Applications with Apache, MySQL, memcached, and Perl 作者: Patrick Galbraith资源格式: PDF 版本: 文字版 出版社: Wrox书号: ...

    《Apache, MySQL, memcached和Perl开发Web应用程序》 [PDF]

    《Apache, MySQL, memcached和Perl开发Web应用程序》是一本专为Web开发者设计的指南,旨在帮助他们利用这些核心技术构建高效、可扩展的Web应用程序。这本书深入探讨了四大技术的结合使用,为读者提供了一个全面的...

    [Apache.MySQL.memcached.Perl开发高速开源网站

    标题和描述中提到的知识点涉及到了使用Apache、MySQL、memcached和Perl来开发高速的开源网站。这四个技术在Web开发领域中各自扮演着重要的角色,下面将详细解析每个技术的特点及其在构建高性能网站中的应用。 ### ...

    [Apache.MySQL.memcached.Perl开发高速开源网站].(美)加尔布雷斯.扫描版.part2.rar

    [Apache.MySQL.memcached.Perl开发高速开源网站].(美)加尔布雷斯.扫描版 中文版

    详解MySQL下InnoDB引擎中的Memcached插件

    HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,...

    memcached缓存插件

    **Memcached 缓存插件详解** Memcached 是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,使得数据检索时间大大减少,从而提高了...

    memcached_functions_mysql

    **标签解析:** "memcached_functions_mysql" 这个标签进一步强调了主题,说明这个压缩包包含了与Memcached和MySQL交互的相关函数或脚本。 **压缩包内容:** "memcached_functions_mysql-1.1" 可能是一个特定版本的...

    安装tomcat,mysql,memcached,jdk脚本

    安装tomcat,mysql,memcached,jdk脚本 安装tomcat,mysql,memcached,jdk脚本

    mysql wp memcached

    标题“mysql wp memcached”指的是将MySQL数据库、WordPress(WP)平台与Memcached缓存系统相结合的使用场景。在这个主题中,我们将深入探讨这三者之间的集成,以及它们如何协同工作以提高Web应用的性能。 MySQL是...

    Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】

    在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    ### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...

    MySQL与Memcached的强强联合:加速数据库性能

    MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用程序的后端数据存储。它基于结构化查询语言(SQL)来管理数据,并且是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈的一部分,这个...

Global site tag (gtag.js) - Google Analytics