创建测试表:
root@test 04:53:11>show create table t;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t | CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` varchar(10) NOT NULL,
`b` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `a_b` (`a`,`b`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=gbk |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
1). 打开索引:
P <indexid> <dbname> <tablename> <indexname> <columns> [<fcolumns>]
columns表示指定获取的列
fcolumns用于做过滤的列
各个字段用TAB进行分割,handlersocket将打开相应的index,并保持打开直到客户端关闭,重复打开相同的indexid将导致之前的index被关闭并重新打开。indexname='PRIMARY'表示主键索引
$sudo telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
P 1 test t primary id,a,b
2 1 idxnum
P 1 test t PRIMARY id,a,b
0 1
注意,这里的大小写是敏感的,另外primary后面的不是空格,而是tab
2).插入一条数据:
<indexid> + <vlen> <v1> ... <vn>
indexid是之前打开的索引id;
vlen是索引的列数,vlen不大于open_index时的columns个数紧随其后的是各列的值,对于不在其中的列,值被设为默认值
例如:
P 1 test t primary id,a,b
1 + 3 NULL a4 b4
0 1 5
1 + 3 7 aaaaaaa bbbbbb
0 1 0
返回值0 1 表示执行成功
看起来,当自增列为NULL时,返回值中包含了自增列的值
3).更新/删除一条数据:
<indexid> <op> <vlen> <v1> ... <vn> [LIM] [IN] [FILTER ...] MOD
op:用于支持比较操作,目前支持 = 、>、>=、<、<=
vlen:小于或等于索引的列的个数
LIM:<limit> <offset>
IN: @ <icol> <ivlen> <iv1> ... <ivn>,icol要比索引列的个数小,
IN类似于SQL中的where语法
FILTER:<ftyp> <fop> <fcol> <fval>
ftyp值为 ‘F’(filter)或者‘W’(while)
fop指定比较操作,与op相似
fcol:必须比fcolumns要小
可以设置多个filter,这类似于where字句中的 ‘and’
MOD是一个类似如下的序列:
<mop> <m1> ... <mk>
mop的值包括:
U (update)
+ (increment)
- (decrement)
D (delete)
当在mop后面加?时,将返回修改前的数据
<m1>...<mk>,指定列的值
当执行delete操作时,即mop = D时,这些值会被忽略
当mop为+或-时,后面的值必须为整数
当mop为-时,若从负数变成正数或从正数变成负数,将不会改变列的值
例如,delete from test.t where id > 3 limit 1;
P 2 test t PRIMARY id,a,b
0 1
2 > 1 3 1 0 D
update test.t set a = 'aa', b = 'cc' where id = 3;
2 = 1 3 1 0 U 3 aa bb
0 1 1
4). 查询数据:
<indexid> <op> <vlen> <v1> ... <vn> [LIM] [IN] [FILTER ...]
与3)类似,但没有mod操作
例如SQL操作:select id,b,a from test.t where id >= 5 limit 3
P 2 test t PRIMARY id,b,a
0 1
2 >= 1 5 3 0
0 3 5 b4 a4 7 bbbbbb aaaaaaa 8 NULL NULL
可以看出handlersocket还是有一些限制的:
1.无法支持比较复杂的查询,例如跨表、跨库的嵌套查询
2.必须要有索引
3.一些复杂的sql例如insert.....on duplicate key , insert.....select等类似的查询还无法支持
分享到:
相关推荐
HandlerSocket 是MySQL的一个插件,用于跳过MySQL的SQL层面,直接访问内部的InnoDB存储引擎。
另一篇有关在基于RedHat的系统上安装HandlerSocket并使其运行的博客。 使用此PHP扩展在另一篇博客详细介绍。 事实 HandlerSocket会覆盖与SQL解析相关的所有CPU使用率。 相反,它直接向InnoDB使用文本协议来创建/...
HandlerSocket的应用场景:MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多...
HandlerSocket插件1
HandlerSocket详细介绍 mysql和memcached的集合
一、HandlerSocket是什么?HandlerSocket是akira higuchi写的一个MySQL的插件。以MySQL Daemon Plugin的形式提供类似NoSQL的网络服务,通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了...
PHP调用MySQL插件HandlerSocket,基于kjdev/php-ext-handlersocketi
mysql-handlersocket-1.0.6-1.DC.1.x86_64
Redis、Hash算法数据库、LSM算法数据库、HandlerSocket、分布式数据库
有关HandlerSocket的更多信息,请查看HandlerSocket上的。安装,请在您的php项目目录中运行以下命令: php composer.phar require tz-lom/hsphp --no-update使用范例选择 $ c = new \ HSPHP \ ReadSocket ();$ c ->...
注:关于清理过期数据的问题,可以在程序架构上想办法,如果数据操作有统一DAO封装的话,可以利用Observer模式来清理过期数据,非主题内容,资料自查。 面对这些问题,HandlerSocket项目是个不错的解决方案,它通过...
handlersocket-go 转到用于连接到HandlerSocket Mysql插件的库。 参见github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/ 安装 $ go get github.com/bketelsen/handlersocket-go 阅读示例-最佳示例在TEST文件中。...
HandlerSocket是日本人akirahiguchi写的一个MySql的插件。通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。按照作者给出的数据...
共涉及4台测试服务器:机器配置为:安装Webbench1.5,通过Webbench来压Web服务器。Nginx0.8.54+PHP5.3.3(php-fpm),安装有Mongodb和HandlerSocket的php驱动。...MongoDB版本:1.6.5MySQL版本:5.1.53HandlerSocket
用于 MySQL 改进扩展的 HandlerSocket 插件 handlersocketi 扩展允许您访问 HandlerSocket 插件为 MySQL 提供的功能。 有关 MySQL 的 HandlerSocket 插件的更多信息,请访问
TDH_Socket 是一个MySQL daemon 插件, 类似于HandlerSocket。现在TDH_Socket能接受客户端的TCP请求,并且直接通过MySQL的Handler层访问数据,绕开了SQL解析等一系列逻辑。TDH_Socket的Java客户端可以通过在客户端...