http://www.banping.com/2011/06/23/handlersocket-protocol-php/
HandlerSocket Plugin for MySQL的协议提供了比较丰富的功能,但是第三方开发者提供的客户端参差不齐,文档也大多不完善,所以应用起来还是有些累。
简单分析下HandlerSocket的协议:
1、OpenIndex
<indexid> <dbname> <tablename> <indexname> <columns> [<fcolumns>]
<indexid>编号(后续操作都会用到)
<dbname> 数据库名
<tablename> 表名
<indexname>索引名
<columns>需要返回结果的列名列表
[<fcolumns>]可选,用于过滤条件的列名列表,这个f是filter的意思
2、get data
<indexid> <op> <vlen> <v1> … <vn> [LIM] [IN] [FILTER ...]
<indexid> opened index id
<op> 操作符 ‘=’, ‘>’, ‘>=’, ‘<’, and ‘<=’
<vlen> 参数中提供的索引包含的列的个数
<v1> … <vn>索引中包含的列,这个参数可以比实际索引中的列少
[LIM] <limit> <offset>
[IN] <icol> <ivlen> <iv1> … <ivn> 列名,长度,值
[FILTER ...] <ftyp> <fop> <fcol> <fval> 过滤类型F或W(条件或循环),操作符,列名,值。
3、Updating/Deleting data
<indexid> <op> <vlen> <v1> … <vn> [LIM] [IN] [FILTER ...] MOD
MOD <mop> <m1> … <mk>
<mop> is ‘U’ (update), ‘+’ (increment), ‘-’ (decrement), ‘D’ (delete),
4、Inserting data
<indexid> + <vlen> <v1> … <vn>
5、Authentication 这个是后来加上的,以前的旧版本没有权限控制
A <atyp> <akey>
详情参见官方文档:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/protocol.en.txt
对于PHP客户端,有个开源的项目在以下地址:http://code.google.com/p/php-handlersocket/
常见的调用方法如下:
1、新建一个对象
$hs = new HandlerSocket($hs_host, $hs_port);
2、打开索引
$hs->openIndex(23, $dbname, $table, ‘index_id’, ‘return_column’,'filter_column’);
3、简单查询
$value = $hs->executeSingle(23, ‘=’, array($user_id), 9999999, 0);
4、复杂查询,含过滤条件
$value = $hs->executeSingle(23, ‘=’, array($user_id), 9999999, 0,null,null,array(array(‘F’,'<’,0,$maxid)));
以上是php-handlersocket 0.1.0版本实现的接口,0.2.0增加了IN过滤方式。
HandlerSocket查询速度还是很快的,而且比传统的NoSQL通过key get data的方式有更丰富的过滤条件。唯一的遗憾是没有提供排序功能。排序就要占用CPU资源,这对于HandlerSocket的设计初衷是违背的,所以也无可厚非。