MySQL下的NoSQL解决方案HandlerSocket

上传人:s9****2 文档编号:468770025 上传时间:2022-09-27 格式:DOCX 页数:9 大小:13.02KB
返回 下载 相关 举报
MySQL下的NoSQL解决方案HandlerSocket_第1页
第1页 / 共9页
MySQL下的NoSQL解决方案HandlerSocket_第2页
第2页 / 共9页
MySQL下的NoSQL解决方案HandlerSocket_第3页
第3页 / 共9页
MySQL下的NoSQL解决方案HandlerSocket_第4页
第4页 / 共9页
MySQL下的NoSQL解决方案HandlerSocket_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《MySQL下的NoSQL解决方案HandlerSocket》由会员分享,可在线阅读,更多相关《MySQL下的NoSQL解决方案HandlerSocket(9页珍藏版)》请在金锄头文库上搜索。

1、MySQL下的 NoSQl解决方案 HandlerSocket目前使用 MySQL的网站,多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行,有众多成功的案例, 但过于依赖Memcache无形中让Memcache成为故障的根源:Memcache数据一致性的问题: 当MySQL数据变化后,如 果不能及时有效的清理掉过期的数据,就会造成数据不一 致。这在强调即时性的 Web2.0时代,不可取。Memcache崩溃后的雪崩效应:作为缓存的Memcache旦崩溃,MySQL很可能在短时间内承受高负载而宕机。据说 前段时间新浪微博就遭遇了这样的问题。注:关于清理过期数据的问题,可以在程序架

2、构上想办 法,如果数据操作有统一 DAO*装的话,可以利用Observer 模式来清理过期数据,非主题内容,资料自查。面对这些问题,HandlerSocket项目是个不错的解决方 案,它通过插件的方式赋予MySQl完整的NoSQL功能,从原理上讲,它跳过 MySQL中最耗时的语法解析,查询计划等步 骤,直接读取数据,如果内存够大,能装下索引,MySQL的查询效率能提高若干倍!性能测试实例:Using MySQLas a NoSQL - A story for exceeding 750 , 000 qps (GFVV因为HandlerSocket的性能足够好,所以就没有必要使 用Memcach

3、e 了,能节省大量的硬件资源,相当低碳!而且HandlerSocket操作的是 MySQL放在内存中的索引,没有额 外的缓存,所以自然就不存在数据一致性的问题。安装如果使用Percona Server 版本的MySQL就简单了,因 为它已经内置了 HandlerSocket支持,不过考虑到其内置的 版本不够新,存在一些早已修复的BUG所以最好采用源代码编译。官方已经有了一份简单的安装文档,但在我实际安装 时,遇到了一些其他未说明的问题,所以这里就把相应的安 装过程再写一遍。首先要确保已经安装了MySQL5.1以上的版本,我用的是Ubuntu操作系统,事先已经用 apt安装了 MySQL5.1.

4、37, 同时还需要相应的 mysql_config ,如果是Ubuntu的话,可 以:shellaptitude install libmysqld-dev注:如果你用的 MySQL是从源代码编译的或官方提供的 二进制版本,可以略过此步。接着下载一份和系统 MySQL版本一致的MySQl源代码和HandlerSocket 源代码:mysql-5.1.37.tar.gzahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5 f7443.tar.gzshelltar zxf mysql-5.1.37.tar.gzshelltarzxfahiguti-

5、HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5 f7443.tar.gzshellcdahiguti-HandlerSocket-Plugin-for-MySQL-f5f7443shell ./autogen.shshell./configure-with-mysql-source=./mysql-5.1.37 -with-mysql-bindir=/usr/bin -with-mysql-plugindir=/usr/lib/mysql/plugin其中的参数含义如下:with-mysql-source 表示 MySQL源代码目录,with-mysql

6、-bindir 表示MySQL二进制可执行 文件目录(也就是mysql_config 所在目录), with-mysql-plugindir 表示MySQL插件目录,如果不清楚这 个目录在哪,可以按如下方法查询:mysql SHOW VARIABLES LIKE plugin%;+| Variable_name | Value |+| plugin_dir | /usr/lib/mysql/plugin |+运行命令后,如果你使用的是MySQL5.1.37版本的话,会遇到如下错误信息:MySQL source version does not match MySQL binary versio

7、n明明我们的MySQL源代码版 本和二进制版 本都是5.1.37 ,为什么还会出现这个错误呢?通过查询 Handlersocket的编译脚本,发现原来它会检索MySQL源代码目录中的VERSION文件,可MySQL5.1.37的源代码目录里 不知何故竟然没有这个文件,所以就报错了,既然知道了原因,那我们就照猫画虎做一个VERSION文件放到MySQL源代码目录,内容如下:MYSQL_VERSION_MAJOR=5MYSQL_VERSION_MINOR=1MYSQL_VERSION_PATCH=37MYSQL_VERSION_EXTRA=再次运行configure 脚本,应该就 OK了,把剩下的

8、步 骤进行完:shellmakeshell make install接着需要配置一下 HandlerSocket,编辑MySQL配置文 件,加入如下内容:mysqldloose_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 worke

9、r 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.此外,InnoDB 的 innodb_buffer_pool_size ,或 MylSAM 的key_buf

10、fy_size等关系到缓存索引的选项尽可能设置大一些,这样才能发挥 HandlerSocket的潜力。注:apt包管理下的配置文件一般是/etc/mysql/myf ,否则一般是/etc/myf最后登陆MySQL并激活HandlerSocket插件:mysql INSTALL PLUGIN handlersocket sonamehandlersocket.so;如果没有问题的话,就能在MySQ里看到HandlerSocket的线程了:mysql SHOW PROCESSLIST;也可以通过查询刚配置的端口是否已经被MySQI占用来确认是否安装成功:shelllsof -i :9998shel

11、l lsof -i :9999完活儿!现在你的 MySQL已经具备NoSQL的能力了! 实战首先创建一个测试用的表:CREATE TABLE IF NOT EXISTS test.t (id int(1O) unsigned NOT NULL AUTO_INCREMENT,a varchar(IO) NOT NULL,b varchar(IO) NOT NULL,PRIMARY KEY (id),KEY a_b (a,b)ENGINE=lnnoDB;注:理论上 HandlerSocket 支持 MylSAM InnoDB 等各 种引擎,不过推荐使用InnoDB。HandlerSocket的协议

12、非常简单,指令通过TAB分割,一行就是一个请求。打开索引:P插入数据: +读取数据:SQL 原型:INSERT INTO test.t (id, a, b) VALUES (1,a, bT ), (2,a2,b2 )shelltelnet localhost 9999Trying 127.0.0.1Connected to localhost.Escape character is A.P 1 test t PRIMARY id,a,b0 11 + 3 1 a1 b10 1 01 + 3 2 a2 b20 1 0注:使用HandlerSocket时,因为没有实际运行 SQL 所以Binlog记

13、录的是Row格式。SQL原型:SELECUd, a, b FROMest.tWHEREdl =1 LIMIT 1shell telnet localhost 9999Trying 127.0.0.1.Connected to localhost.Escape character is A.P 1 test t PRIMARY id,a,b0 11 = 1 1 1 00 3 1 a1 b1SQL 原型:SELECT id, a, b FROM test.t WHERE id =1LIMIT 2shelltelnet localhost 9999Trying 127.0.0.1Connected

14、to localhost.Escape character is A.P 1 test t PRIMARY id,a,b0 11 = 1 1 2 00 3 1 a1 b1 2 a2 b2SQL原型:SELECTd, a, b FROMest.t WHERE = a1AND b = bT LIMIT 1shell telnet localhost 9999Trying 127.0.0.1.Connected to localhost.Escape character is A.P 1 test t a_b id,a,b0 11 = 2 a1 b1 1 00 3 1 al bl对Handlersocket 个常见的误解是只能执行PRIMARY类型的KV查询,实际上只要支持索引,一般的简单查询它 都能胜任,篇幅所限,这里就不多说了,如果你觉得直接操 作telnet有些吃力,也可以使用自己熟悉的客户端来测试, 官方文档里有介绍。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号