觉得这个plugin对于我们的应用最大好处有2个:
1. 降低内存的硬件成本,数据库记录类型的Cache可以从Memcache移除了,Inndb Cache本身N个G内存可以更有效地利用起来。
2. 再也不用烦恼Cache失效的问题,假设做一个最简单的ActiveRecord Cache(或者Hibernate 2nd Level Cache)插件,将主键查询的操作转移到这个plugin端口,而其他update delete操作完全不用做任何的cache expire动作

同时又不会失去NoSQL目前所欠缺的关系型数据库其他的各种好处。

另外根据作者的评测,这个方案的主键查询速度比Memcache还要快近1倍。并且这个插件已经在日本最大的SNS游戏平台提供商DeNA的生产环境上运行很久。

下面简单介绍一下安装,协议和第3方库:

[size=large]安装:[/size]
1. 下载你机器上安装的Mysql版本所对应的源代码,比如我开发机器上安装的是Percona Server(一个比标准mysql server性能更好的发行包),所以需要下载:

wget http://www.percona.com/downloads/Percona-Server-5.1/Percona-Server-5.1.51-11.5/source/Percona-Server.tar.gz




2. 下载HandlerSocket-Plugin-for-MySQL源代码:


git clone https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git




3. 在plugin源码目录下执行:


./autogen.sh
./configure --with-mysql-source=/tmp/Percona-Server --with-mysql-bindir=/usr/bin
make
make install




4. 修改mysql配置文件,添加相关端口配置:


[mysqld]
plugin-load=handlersocket.so
loose_handlersocket_port = 9998    
loose_handlersocket_port_wr = 9999 
loose_handlersocket_threads = 16   
loose_handlersocket_threads_wr = 1 
open_files_limit = 65535




5. 用root帐号登入mysql,执行


install plugin handlersocket soname 'handlersocket.so';




安装成功以后,用show processlist可以看到handlersocket worker进程已经在工作了




[size=large]协议:[/size]


https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/protocol.en.txt 协议是文本格式,参数之间用Tab分隔,可以直接telnet进行测试


telnet localhost 9998


Trying 127.0.0.1...


Connected to localhost.


Escape character is '^]'.



打开test数据库下的user表的主键索引,然后指定获取login和email 2个栏位:


P 0 test user PRIMARY login,email


获取主键值为1的记录:


0 = 1 1



[size=large]第3方库:[/size]


目前有Java,PHP,Ruby等各种第3方库,我测试了一下一个Ruby的:


[url]https://github.com/winebarrel/ruby-handlersocket[/url]


他是用C++写了socket操作,然后用ruby封装一下,很简单,也很实用。