`
strayly
  • 浏览: 97410 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)Mysql 官方Memcached 插件初步试用感受 .

 
阅读更多

 

 

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 

 

Java代码  收藏代码
  1. shell> groupadd mysql  
  2. shell> useradd -r -g mysql mysql  
  3. shell> cd /usr/local/mysql  
  4. shell> chown -R mysql .  
  5. shell> chgrp -R mysql .  
  6. shell> scripts/mysql_install_db --user=mysql  
  7. shell> chown -R root .  
  8. shell> chown -R mysql data  
  9. shell> cp support-files/mysql.server /etc/init.d/mysql  

 



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

 

Java代码  收藏代码
  1. mysql < scripts/innodb_memcached_config.sql  

 



2、进入mysql 客户端,安装插件 

 

Java代码  收藏代码
  1. mysql> install plugin daemon_memcached soname "libmemcached.so";  

 



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

 

Java代码  收藏代码
  1. telnet localhost 11211  
  2.   
  3. set test 0 0 2  
  4. 11  
  5. STORED  
  6. get test  
  7. VALUE test 0 2  
  8. 11  
  9. END  

 



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

二、说明 


进入mysql 客户端,show databases; 后,你会发现多了一个库innodb_memcache 

 

Java代码  收藏代码
  1. mysql> use innodb_memcache;  
  2. Database changed  
  3. mysql> show tables;  
  4. +---------------------------+  
  5. | Tables_in_innodb_memcache |  
  6. +---------------------------+  
  7. | cache_policies            |  
  8. | config_options            |  
  9. | containers                |  
  10. +---------------------------+  
  11. 3 rows in set (0.00 sec)  

 



上述三张表都为memcached 的配置信息,分别存放cache 策略、配置和容器信息。先看containers 表 

 

Java代码  收藏代码
  1. mysql> select * from containers;  
  2. +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+  
  3. | name | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |  
  4. +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+  
  5. | aaa  | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | idx                    |  
  6. +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+  
  7. 1 row in set (0.00 sec)  

 



说明,通过memcached set 的数据,放在test 库中的demo_test 表中,同时key 存放在表的c1 字段里,value 存放在c2 字段里。然后我们去test 库看看 

 

Java代码  收藏代码
  1. mysql> use test;  
  2. Database changed  
  3. mysql> select * from demo_test;  
  4. +------+------+------+------+--------------+------+------+------+------+------+------+  
  5. | cx   | cy   | c1   | cz   | c2           | ca   | CB   | c3   | cu   | c4   | C5   |  
  6. +------+------+------+------+--------------+------+------+------+------+------+------+  
  7. 9    |    3 | AA   |    2 | HELLO, HELLO |    8 |    8 |    0 |    1 |    3 |    0 |  
  8. +------+------+------+------+--------------+------+------+------+------+------+------+  
  9. 1 row in set (0.00 sec)  

 



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

 

Sql代码  收藏代码
  1. sql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;  

 



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

在配置里,还有一张表我们需要注意的,cache_policies。看看它的创建语句 

 

Sql代码  收藏代码
  1. CREATE TABLE `cache_policies` (  
  2.  `policy_name` varchar(40) NOT NULL,  
  3.  `get_policy` enum('innodb_only','cache_only','caching','disabled'NOT NULL,  
  4.  `set_policy` enum('innodb_only','cache_only','caching','disabled'NOT NULL,  
  5.  `delete_policy` enum('innodb_only','cache_only','caching','disabled'NOT NULL,  
  6.  `flush_policy` enum('innodb_only','cache_only','caching','disabled'NOT NULL,  
  7.  PRIMARY KEY (`policy_name`)  
  8.  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

 

 

 

 

分享到:
评论

相关推荐

    memcached-1.5.11.tar.gz

    《深入理解Memcached:基于1.5.11版本的剖析》 Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其...

    Wrox.Developing.Web.Applications.with.Perl.memcached.MySQL.and.Apache.Jul.2009.rar

    标题 "Wrox.Developing.Web.Applications.with.Perl.memcached.MySQL.and.Apache.Jul.2009" 暗示这是一本关于使用Perl、memcached、MySQL和Apache开发Web应用程序的专业书籍,发布于2009年7月。这本书可能是由Wrox...

    memcached客户端包memcached-1.4.12.tar.gz

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式环境中快速存储和检索数据,以减轻数据库的负载。客户端包`memcached-1.4.12.tar.gz`是为开发者提供的工具,允许他们与memcached服务器进行交互,实现...

    memcached-1.4.20.tar.gz

    **Memcached 概述** Memcached 是一个高性能、分布式内存对象缓存系统,它用于临时存储数据以减轻数据库的负载。作为一个开源项目,它被广泛应用于Web应用开发中,能够提高应用程序的响应速度和整体性能。`...

    java_memcached-release_2.0.1.jar

    java_memcached-release_2.0.1.jar。jdk5版本适用。使用log4j。

    memcached-1.4.22.tar.gz

    4. 配置服务:创建并编辑配置文件(如`/etc/memcached.conf`),设置监听端口、内存大小等参数。 5. 启动服务:使用`sudo systemctl start memcached`启动服务(或根据系统使用`service memcached start`)。 **...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    - 引入必要的依赖:`import net.spy.memcached.MemcachedClient;` - 创建Memcached客户端实例,连接到服务器:`MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211));` - ...

    Nagios-Plugins-Memcached-0.02.tar.gz

    然后,需要创建一个新的服务定义来监控Memcached,例如在`/etc/nagios/conf.d/memcached.cfg`中添加以下内容: ``` define service { use generic-service host_name your_memcached_host service_description ...

    memcached-1.4.33.tar.gz

    3. **启动与配置**:通过`memcached`命令启动服务,配置文件通常位于`/etc/memcached.conf`,可根据需求调整参数,如内存大小、监听端口等。 4. **客户端连接**:使用各种编程语言的客户端库与Memcached交互,例如...

    memcached-1.4.24.tar.gz 下载

    同时,需要修改配置文件(如/etc/memcached.conf)来设置监听端口、最大内存使用量、超时时间等参数。 5. **启动与测试**:使用`memcached -d`启动服务,然后可以使用`telnet`或`nc`工具连接到memcached的端口,...

    memcached-1.2.5.tar.gz

    2. 配置:memcached默认监听11211端口,可以通过修改配置文件`memcached.conf`进行自定义设置,如内存分配、最大连接数等。 3. 启动与管理:使用以下命令启动、停止或查看状态: ``` sudo /etc/init.d/memcached ...

    memcached-1.4.23.tar.gz

    - **获取源码**:首先从官方网站或镜像站点下载memcached-1.4.23.tar.gz,解压后进入目录。 - **编译依赖**:确保系统已安装必要的编译工具,如`gcc`,`make`等,可能还需要`libevent`库。 - **配置**:运行`./...

    memcached-1.5.14.tar.gz

    **Memcached 1.5.14:一个高性能的分布式内存对象缓存系统** Memcached 是一款广泛应用的开源分布式内存缓存系统,用于提高Web应用的性能。它通过将数据存储在内存中,减少对数据库的访问,从而提高了数据读取速度...

    python-memcached-1.58-1.el7.noarch.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    memcached-1.5.22-2.el8.x86_64.rpm

    官方离线安装包,亲测可用

    memcached-1.4.15-1.el6.i686.rpm

    memcached-1.4.15-1.el6.i686.rpm

    memcached-1.4.4.tar.gz

    由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。因为通常网站应用程序中最耗费时间的任务是数据在数据库的检索,而多个用户查询相同的SQL时,数据库压力会增大,而...

    php-memcached-3.1.3.tar.gz

    安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf ...

Global site tag (gtag.js) - Google Analytics