浏览 11237 次
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-21
最后修改:2011-04-22
一、安装 安装这个挺简单的,因为此插件需要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/ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-06
有没有mysql集群共用一个memcached的测试?
|
|
返回顶楼 | |
发表时间:2011-05-12
最后修改:2011-05-12
这个mysql+memcached帖子有营养
|
|
返回顶楼 | |
发表时间:2011-05-12
资料有点少.
用上memcache速度确实快不少 |
|
返回顶楼 | |
发表时间:2011-07-08
如果Mysql和memcache能完美集合,那就幸福了。
|
|
返回顶楼 | |
发表时间:2011-08-08
学习了,
楼主你安装mySQL怎么比我简单, 不用 configure、make、make install 吗? |
|
返回顶楼 | |