为什么80%的码农都做不了架构师?>>>   

HandlerSocket已经作为Percona Server数据库的一个插件,用来实现NoSQL 功能。 一.HandlerSocket介绍: 2010年11月日本社交游戏开发公司DeNA发布了MySQL HandlerSocket插件。Handlersocket插件是由日本人Yoshinori Matsunobu开发的。传统的关系型数据库在处理每个请求的时候,都需要做SQL解析,查询优化,执行,事务管理,锁管理等一系列的开销操作,消耗性能。非关系型数据库(NoSQL)就去掉了这些操作。通过handlersocket插件,可以直接跟MySQL的存储引擎层做key-value式的交互操作,省略了MySQL的SQL层次的处理,大大的减少了资源的开销。 二.HandlerSocket架构: HandlerSocket在MySQL内部实现一个NoSQL的网络服务,以mysqld进程的daemon存在,监听特定端口(9998和9999)与client通过TCP/IP接收NoSQL的协议和API,然后通过MySQL存储引擎API直接进行CRUD相关的操作。同时,还可以通过传统的MySQL的方式进行操作。 简单快速的操作通过handlersocket来实现。复杂的操作通过传统的MySQL方式来实现。 HandlerSocket结构图如下: 1.MySQL Client ---> MySQL Upper Layer ---> Storage Engine Layer 使用MySQL传统的方式,客户端通过3306端口与Upper层交互,在Upper层进行SQL解析,打开表,查询优化,关闭表等等操作,然后再提交到Storage Engine 层。 2.HandlerSocket Client ---> HandlerSocket daemon plugin ---> Storage Engine Layer 使用HandlerSocket方式,减少了很多在传统方式下的SQL层的操作。使用9998端口进行读操作,使用9999端口进行写操作。 三.HandlerSocket优缺点: 优点: 1.省去了MySQL的SQL层相关的操作,大大的减少了CPU的消耗。 2.采用合并操作的方式,合并多个请求同时执行,减少了CPU开销和IO操作次数。 3.基于简单的文本协议,节省网络流量,提高网络吞吐量。 4.能同时使用传统的MySQL和HandlerSocket的方式访问MySQL数据库,互不冲突。 5.支持大的并发连接。 6.可以继续使用MySQL的Replication等等成熟机制。 7.避免有双重缓存。 8.具有较高的读写性能,在CPU Bound的场景中,读取性能一般是同等环境下的MySQL的3-7.5倍。同时写入性能也能达到3-5倍。 不足之处: 1.由于采用合并操作的方式,响应时间比MySQL来说大一些。 2.没有安全相关的保证,绝大部分NoSQL产品都有这样的问题。 3.在IO Bound的场景中,性能的提升可能不是很明显。 4.目前只支持MySQL5.1和MySQL5.5版本的Innodb存储引擎。 四.HandlerSocket的安装: 1.下载安装

# wgethttps://download.github.com/ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-71-g159ea6d.tar.gz
# tar zxvf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-71-g159ea6d.tar.gz -C ../software/
# cd ../software/ahiguti-HandlerSocket-Plugin-for-MySQL-159ea6d/
# ./autogen.sh
# ./configure --prefix=/usr/local/handlersocket
--with-mysql-source=/usr/local/src/software/mysql-5.1.36//mysql源码目录
--with-mysql-bindir=/usr/local/mysql-5.1.36/bin //mysql安装目录可执行目录
--with-mysql-plugindir=/usr/local/mysql-5.1.36/lib/mysql/plugin //mysql插件目录
# make
# make install

2.修改配置文件 在my.cnf文件[mysqld]下增加以下配置:

loose_handlersocket_port = 9998//指定读请求端口号
loose_handlersocket_port_wr = 9999 //指定写请求端口号
loose_handlersocket_threads = 16 //指定读线程数目
loose_handlersocket_threads_wr = 1 //指定写线程数目

3.安装handlersocket.so:

> INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';

4.查看进程状态

# netstat -ntpl
tcp        0      0 0.0.0.0:3306       0.0.0.0:*        LISTEN      31402/mysqld
tcp        0      0 0.0.0.0:9998       0.0.0.0:*        LISTEN      31402/mysqld
tcp        0      0 0.0.0.0:9999       0.0.0.0:*        LISTEN      31402/mysqld

5.常见问题 configure: error: MySQL source version does not match MySQL binary version 解决方法:在configure.in文件中首行添加一行[MySQL Server] 5.1.36。 五.HandlerSocket性能测试: 先来看看软件作者的测试结果: 环境:2.53GHZ,8核CPU,32G内存的Nehalem服务器 结果: 六.安装PHP扩展包php-handlersocket

# wget http://php-handlersocket.googlecode.com/files/php-handlersocket-0.0.7.tar.gz
# tar zxvf php-handlersocket-0.0.7.tar.gz -C ../software/
# /usr/local/php5.2.13/bin/phpize
# ./configure --prefix=/usr/local/php-handlersocket \
--with-php-config=/usr/local/php5.2.13/bin/php-config \
--with-handlersocket \
--with-handlersocket-includedir=/usr/local/handlersocket/include/handlersocket
# make
# make install
# vim /usr/local/Zend/etc/php.ini
添加下面一行
extension=/usr/local/php5.2.13/lib/php/extensions/no-debug-zts-20060613/handlersocket.so

查看是否加载成功: 常见问题: cc -shared.libs/handlersocket.o-lstdc++ -L/usr/local/handlersocket/include/handlersocket/lib -lhsclient-Wl,-rpath -Wl,/usr/local/handlersocket/include/handlersocket/lib -Wl,-soname -Wl,handlersocket.so -o .libs/handlersocket.so /usr/bin/ld: cannot find -lhsclient collect2: ld returned 1 exit status make: *** [handlersocket.la] Error 1 解决方法:# cd /usr/local/handlersocket

# cp -rf lib include/handlersocket/

七.测试: 1.建立测试表

mysql>create table `ttlsa_com` (
-> `id` int(10) auto_increment not null,
-> `k` varchar(50) default null,
-> `v` varchar(50) default null,
-> primary key (`id`),
-> key `index_k` (`k`)
-> )engine=innodb;
mysql> insert into ttlsa_com values ('','k1','v1');
mysql> insert into ttlsa_com values ('','k2','v2');
mysql> insert into ttlsa_com values ('','k3','v3');

2.PHP使用实例

<?php
$host = 'localhost';
$port = 9998;
$port_wr = 9999;
$dbname = 'hstestdb';
$table = 'hstesttbl';
//GET
$hs = new HandlerSocket($host, $port);
if (!($hs->openIndex(1, $dbname, $table, HandlerSocket::PRIMARY, 'k,v')))
{echo $hs->getError(), PHP_EOL;die();
}
$retval = $hs->executeSingle(1, '=', array('k1'), 1, 0);
var_dump($retval);
$retval = $hs->executeMulti(
array(array(1, '=', array('k1'), 1, 0),
array(1, '=', array('k2'), 1, 0)));
var_dump($retval);
unset($hs);
//UPDATE
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(2, $dbname, $table, '', 'v')))
{echo $hs->getError(), PHP_EOL;die();
}
if (!($hs->executeUpdate(2, '=', array('k1'), array('V1'), 1, 0)))
{echo $hs->getError(), PHP_EOL;die();
}
unset($hs);
//INSERT
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(3, $dbname, $table, '', 'k,v')))
{echo $hs->getError(), PHP_EOL;die();
}
if (!($hs->executeInsert(3, array('k2', 'v2'))))
{echo $hs->getError(), PHP_EOL;
}
if (!($hs->executeInsert(3, array('k3', 'v3'))))
{echo $hs->getError(), PHP_EOL;
}
if (!($hs->executeInsert(3, array('k4', 'v4'))))
{echo $hs->getError(), PHP_EOL;
}
unset($hs);
//DELETE
$hs = new HandlerSocket($host, $port_wr);
if (!($hs->openIndex(4, $dbname, $table, '', '')))
{echo $hs->getError(), PHP_EOL;die();
}
if (!($hs->executeDelete(4, '=', array('k2'))))
{echo $hs->getError(), PHP_EOL;die();
}

3.方法注释 openIndex(1, $dbname, $table, HandlerSocket::PRIMARY, 'k,v') 打开索引,第一个参数1用来在每个HandlerSocket对象中唯一标识一个表名;$dbname表示为数据库名;$table表示为表名;HandlerSocket::PRIMARY表示为索引名;'k,v'表示为要查询的列名。 executeSingle(1, '=', array('k1'), 1, 0) 执行查询,第一个参数要跟之前的openIndex方法中的第一个参数保持一致;第二个参数’=’表示检索的条件,支持’=’,’>=’,’<=’,’>’,’<’;第三个参数array(‘k1’)表示一个arrayref,指定检索的key,其长度必须小于或者等于对应索引的列数;第四个和第五个参数指定查询的limit和offset。 executeMulti 可在一次调用中执行多个操作。 如需转载请注明出处: http://www.ttlsa.com/html/3022.html

转载于:https://my.oschina.net/766/blog/211413

MySQL的NoSQL扩展插件HandlerSocket相关推荐

  1. mysql handler socket_MySQL的NoSQL插件HandlerSocket

    [IT168 评论] MySql作为一款开源数据库,有着使用成本低.简单易用的特点.对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大 ...

  2. yum安装Apache、PHP、Mysql及扩展插件

    yum安装Apache.PHP.Mysql及扩展插件环境:CentOS 6.3 最小化安装 参考 https://www.cnblogs.com/ylnic/archive/2011/03/27/19 ...

  3. PHP扩展插件 imagick 、PDO_MYSQL 安装

    环境准备 echo $LC_ALL echo "export LC_ALL=C" >> /etc/profile source /etc/profile yum ins ...

  4. Mybatis-Plus进阶之扩展插件

    文章目录 Mybatis-Plus进阶之扩展插件 1.逻辑删除 2.自动填充 3.乐观锁 4.执行sql分析打印 5.多租户实现 6.动态表名解析 7.sql注入器 和 选装件 Mybatis-Plu ...

  5. 阿里面试官问:说说你使用MySQL的NoSQL的七大理由?

    MySQL 8.0中一个很棒的新功能是文档存储. 现在使用MySQL,您可以将JSON文档存储在集合中,并使用CRUD操作对其进行管理.NoSQL现在是MySQL的一部分! 而不是MongoDB和My ...

  6. 秒懂!七大理由:为什么使用MySQL的NoSQL?(蚂蚁金服架构师告诉我的)

    前言 MySQL 8.0中一个很棒的新功能是文档存储. 现在使用MySQL,您可以将JSON文档存储在集合中,并使用CRUD操作对其进行管理.NoSQL现在是MySQL的一部分! 而不是MongoDB ...

  7. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

  8. jupyter扩展插件Nbextensions的安装、使用

    jupyter扩展插件Nbextensions的安装.使用 # 使用pypi里面包进行安装 pip install jupyter_contrib_nbextensions # 也可以通过如下方式进行 ...

  9. javascript扩展插件alook_使用 Kotlin 编写你的第一个 Firefox WebExtension 扩展

    Kotlin 是我最喜爱的编程语言.我们已经知道 Kotlin 编译成 Java 字节码可以快速被安卓和服务端采用.事实上,Kotlin 还支持编译成 JavaScript,因此该语言也开始在 Web ...

  10. vscode 结束_8 个给前端的顶级 VS Code 扩展插件

    翻译:京程一灯 原文:https://1stwebdesigner.com/top-free-extensions-for-vs-code/ 微软的 VS (Visual Studio) Code 是 ...

最新文章

  1. 计数时钟和滚动汉字显示c语言程序,MSP430F449单片机RTC时钟C语言程序(带闹钟)...
  2. 火狐的萤火虫JavaScript,HTML,CSS调试捕获器
  3. Java数据结构 反转链表
  4. 传说中的CAFEBABE到底在哪儿?
  5. 《剑指offer》链表中倒数第k个结点
  6. 转答寒冬的面试题(1)
  7. Hibernate【inverse和cascade属性】知识要点
  8. 前端进阶之路: 前端架构设计(2)-流程核心
  9. VS2017无法打开文件MSVCRTD.lib
  10. python可以测试java的代码吗_使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹...
  11. [其它] - 为什么中国的程序员技术偏低
  12. java socket oc_Java Socket编程(三) 服务器Sockets
  13. 无心剑中译阿齐姆·普雷姆吉《苦干加巧干》
  14. Spring中控制反转IoC理论推导
  15. Highcharts 统计图
  16. VC2005用不惯呀....
  17. 【OR】YALMIP 鲁棒优化
  18. windows 清除IE浏览器缓存的脚本
  19. mac top内存 cpu
  20. java access 2007,使用Access 2007 VBA创建数据透视表

热门文章

  1. 网易云音乐显示网络异常
  2. vue3.0实现jsoneditor组件
  3. 使用js创建a标签下载文件
  4. 基于链表结构实现二路归并排序详解(C++实现)
  5. IE有错误,需要重置IE
  6. 基于android的校园二手交易平台的设计
  7. html5 ogv格式转换,Free OGV Video Converter(OGV视频转换器)
  8. java代码混淆(使用 ProGuard maven插件)
  9. SQL 笛卡尔积现象
  10. caffe安装成功后测试