[code]shell> aptitude install libmysqld-dev[/code]注:如果你用的MySQL是从源代码编译的或官方提供的二进制版本,可以略过此步。 接着下载一份和系统MySQL版本一致的MySQL源代码和HandlerSocket源代码: [list] [*][url=http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.37.tar.gz]mysql-5.1.37.tar.gz[/url] [/*][*][url=https://download.github.com/ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz]ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz[/url] [/*][/list]
[code]shell> tar zxf mysql-5.1.37.tar.gz
shell> tar zxf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz
shell> cd ahiguti-HandlerSocket-Plugin-for-MySQL-f5f7443
shell> ./autogen.sh
shell> ./configure --with-mysql-source=../mysql-5.1.37 \
--with-mysql-bindir=/usr/bin \
--with-mysql-plugindir=/usr/lib/mysql/plugin[/code]
其中的参数含义如下:with-mysql-source表示MySQL源代码目录,with-mysql-bindir表示MySQL二进制可执行文件目录(也就是mysql_config所在目录),with-mysql-plugindir表示MySQL插件目录,如果不清楚这个目录在哪,可以按如下方法查询:
[code]mysql> SHOW VARIABLES LIKE 'plugin%'; +---------------+-----------------------+ | Variable_name | Value | +---------------+-----------------------+ | plugin_dir | /usr/lib/mysql/plugin | +---------------+-----------------------+[/code]运行命令后,如果你使用的是MySQL5.1.37版本的话,会遇到如下错误信息: [quote] MySQL source version does not match MySQL binary version [/quote] 明明我们的MySQL源代码版本和二进制版本都是5.1.37,为什么还会出现这个错误呢?通过查询HandlerSocket的编译脚本,发现原来它会检索MySQL源代码目录中的VERSION文件,可MySQL5.1.37的源代码目录里不知何故竟然没有这个文件,所以就报错了,既然知道了原因,那我们就照猫画虎做一个VERSION文件放到MySQL源代码目录,内容如下:
[code]MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=1 MYSQL_VERSION_PATCH=37 MYSQL_VERSION_EXTRA=[/code]再次运行configure脚本,应该就OK了,把剩下的步骤进行完:
[code]shell> make shell> make install[/code]接着需要配置一下HandlerSocket,编辑MySQL配置文件,加入如下内容:
[code][mysqld] loose_handlersocket_port = 9998 # the port number to bind to (for read requests) loose_handlersocket_port_wr = 9999 # the port number to bind to (for write requests) loose_handlersocket_threads = 16 # the number of worker threads (for read requests) loose_handlersocket_threads_wr = 1 # the number of worker threads (for write requests) open_files_limit = 65535 # to allow handlersocket accept many concurrent # connections, make open_files_limit as large as # possible.[/code]此外,InnoDB的innodb_buffer_pool_size,或MyISAM的key_buffy_size等关系到缓存索引的选项尽可能设置大一些,这样才能发挥HandlerSocket的潜力。 注:apt包管理下的配置文件一般是/etc/mysql/my.cnf,否则一般是/etc/my.cnf 最后登陆MySQL并激活HandlerSocket插件:
[code]mysql> INSTALL PLUGIN handlersocket soname 'handlersocket.so';[/code]重启一下MySQL服务,如果没有问题,就能在MySQL里看到HandlerSocket的线程了:
[code]mysql> SHOW PROCESSLIST;[/code]也可以通过查询刚配置的端口是否已经被MySQL占用来确认是否安装成功:
[code]shell> lsof -i :9998 shell> lsof -i :9999[/code]完活儿!现在你的MySQL已经具备NoSQL的能力了! [h2]实战[/h2] 首先创建一个测试用的表:
[code]CREATE TABLE IF NOT EXISTS `test`.`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;[/code]注:理论上HandlerSocket支持MyISAM,InnoDB等各种引擎,不过推荐使用InnoDB。 [url=https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/protocol.en.txt]HandlerSocket的协议[/url]非常简单,指令通过TAB分割,一行就是一个请求。本文用到了: [list] [*]打开索引:P <索引标识> <数据库> <表> <索引> <字段> [/*][*]插入数据:<索引标识> ‘+' <参数个数> <参数1> … <参数N> [/*][*]读取数据:<索引标识> <操作> <参数个数> <参数1> … <参数N> <条数> <偏移> [/*][/list] SQL原型:INSERT INTO test.t (id, a, b) VALUES (1, ‘a1′, ‘b1′), (2, ‘a2′, ‘b2′)
[code]shell> telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 + 3 1 a1 b1 0 1 0 1 + 3 2 a2 b2 0 1 0[/code]注:使用HandlerSocket时,因为没有实际运行SQL,所以Binlog记录的是Row格式。 SQL原型:SELECT id, a, b FROM test.t WHERE id = 1 LIMIT 1
[code]shell> telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 = 1 1 1 0 0 3 1 a1 b1[/code]SQL原型:SELECT id, a, b FROM test.t WHERE id >=1 LIMIT 2
[code]shell> telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 >= 1 1 2 0 0 3 1 a1 b1 2 a2 b2[/code]SQL原型:SELECT id, a, b FROM test.t WHERE a = ‘a1′ AND b = ‘b1′ LIMIT 1
[code]shell> telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t a_b id,a,b 0 1 1 = 2 a1 b1 1 0 0 3 1 a1 b1[/code]对HandlerSocket一个常见的误解是只能执行PRIMARY类型的KV查询,实际上只要支持索引,一般的简单查询它都能胜任,篇幅所限,这里就不多说了,如果你觉得直接操作telnet有些吃力,也可以使用自己熟悉的客户端来测试,[url=https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/about-handlersocket.en.txt]官方文档[/url]里有介绍。 注:HandlerSocket作者写了一个不错的PPT可以参考:[url=http://www.slideshare.net/akirahiguchi/handlersocket-20100629en-5698215]HandlerSocket plugin for MySQL[/url] 记:[url=http://dev.mysql.com/tech-resources/articles/whats-new-in-mysql-5.6.html#nosql]MySQL5.6提供原生的Memcached API[/url],实际就是KV型NoSQL了,但HandlerSocket并不局限于KV形式,所以仍然有生存空间。 互联网技术发展犹如一列高速运行的火车,下一站:HandlerSocket!大家做好准备吧。
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有