zoukankan      html  css  js  c++  java
  • HandlerSocket 安装

    原文:http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
    相关的日文PPT:http://www.slideshare.net/akirahiguchi/handlersocket-plugin-for-mysql-4664154

    相关新能测试请参考:http://www.cnblogs.com/inrie/archive/2011/02/22/1961415.html

    下载地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

    安装方式:
    下载 ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-73-g0e63366.tar.gz https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/tarball/master
    [root@niutian365 tmp]# tar -zxvf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-73-g0e63366.tar.gz
    [root@niutian365 tmp]# cd ahiguti-HandlerSocket-Plugin-for-MySQL-0e63366
    [root@niutian365 tmp]# ./autogen.sh

    ##这里 可能会遇到libtool 未安装 yum install libtool 安装下
    [root@niutian365 tmp]# ./configure --with-mysql-source=/niutian365/softs/mysql-5.1.54 --with-mysql-bindir=/usr/local/mysql/bin  --with-mysql-plugindir=/usr/local/mysql/lib/mysql/plugin
    ##注意这里我的mysql版本是mysql-5.1.54 已经安装过 不详述mysql安装 源码目录是/niutian365/softs/mysql-5.1.54,这个地方我经常搞错,配置到mysql安装目录下.
    [root@niutian365 tmp]# make
    [root@niutian365 tmp]# make install

    [root@niutian365 tmp]# vi /etc/my.cnf

    [mysqld]
    ......
    #下面添加
    loose_handlersocket_port = 9998
    loose_handlersocket_port_wr = 9999
    loose_handlersocket_threads = 16
    loose_handlersocket_threads_wr = 1
    open_files_limit = 65535
    保存退出
    重启mysql
    [root@niutian365 tmp]# mysql restart
    登录mysql
    [root@niutian365 tmp]# mysql -uroot -pniutian
    mysql> install plugin handlersocket soname 'handlersocket.so';
    mysql> show processlist;

    mysql> show plugins;

    [root@niutian365 tmp]# mysql restart

    安装说明请参考 ahiguti-HandlerSocket-Plugin-for-MySQL-0e63366/docs-ja目录下面的说明文件

    安装php模块HandlerSocket文档中提供了三种方式安装:
    http://openpear.org/package/Net_HandlerSocket
    http://github.com/tz-lom/HSPHP
    http://code.google.com/p/php-handlersocket/


    这里php模块支持选择http://code.google.com/p/php-handlersocket/
    [root@niutian365 tmp]# wget http://php-handlersocket.googlecode.com/files/php-handlersocket-0.0.7.tar.gz
    [root@niutian365 tmp]# tar -zxvf php-handlersocket-0.0.7.tar.gz 
    [root@niutian365 tmp]# cd php-handlersocket
    [root@niutian365 tmp]# /usr/local/php/bin/phpize 
    [root@niutian365 tmp]# ./configure --with-php-config=/usr/local/php/bin/php-config
    [root@niutian365 tmp]# make
    [root@niutian365 tmp]# make install
    出现
    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
    Installing header files:          /usr/local/php/include/php/
    [root@niutian365 tmp]# vi /usr/local/php/etc/php.ini
    添加extension=handlersocket.so
    保存退出
    重启apache或者php-fpm

    2011-06-07升级安装 0.2.0
    个别包依赖包括re2c等
    [root@niutian365 tmp]# yum -y install gcc gcc-c++ autoconf glibc glibc-devel glib2 glib2-devel
    [root@niutian365 tmp]# wget http://pkgs.repoforge.org/re2c/re2c-0.13.5-1.el5.rf.i386.rpm
    [root@niutian365 tmp]# rpm -ivh re2c-0.13.5-1.el5.rf.i386.rpm
    [root@niutian365 tmp]# wget http://php-handlersocket.googlecode.com/files/php-handlersocket-0.2.0.tar.gz
    安装方法同上
    使用PHP handlersocket的API

    HandlerSocket {
        /* Constants */
        const HandlerSocket::PRIMARY;

        /* Methods */
        __construct  ( string $host, string $port [, array $options ])
        public bool openIndex ( int $id, string $db, string $table, string $index, string $fields )
        public mixed executeSingle ( int $id, string $op, array $fields [, int $limit, int $skip, strint $modop, array $values, array $filters, int $invalues_key, array $invalues ] )
        public mixed executeMulti ( array $requests )
        public mixed executeUpdate ( int $id, string $op, array $fields, array $values [, int $limit, int $skip, array $filters, int $invalues_key, array $invalues] ] )
        public mixed executeDelete ( int $id, string $op, array $fields [, int $limit, int $skip, array $filters, int $invalues_key, array $invalues] ] )
        public mixed executeInsert ( int $id, array $values )
        public string getError ( void )
    }

    中文说明:
    /*
    * String  $host:MySQL ip;
    * String  $port:handlersocket插件的监听端口,它有两个端口可选:一个用于读、一个用于写
    */

    $hs = new HandlerSocket($host, $port);

    打开一个数据表:
    /*
    * Int       $index:这个数字相当于文件操作里的句柄,HandlerSocket的所有其他方法都会依据这个数字来操作由这个   openIndex打开的表,
    * String  $dbname:库名
    * String  $table:表名
    * String  $key:表的“主键”(HandlerSocket::PRIMARY)或“索引名”作为搜索关键字段,这就是说表必须有主键或索引
    *                 个人理解:要被当做where条件的key字段,这样可以认为handlersocket只有一个where条件
    * String  $column:'column1,column2' 所打开表的字段(以逗号隔开),就是说$table表的其他字段不会被操作
    */

    $hs->openIndex($index, $dbname, $table, $key, $column);

    查询:
    /*
    * Int     $index: openIndex()所用的$index
    * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
    * Array   $value
    * Int       $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
    * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
    */

    $retval = $hs->executeSingle($index, $operation, $value, $number, $skip);

    插入(注意:此处的openIndex要用$port_wr,即读写端口):
    /*
    * Int     $index: openIndex()所用的$index
    * Array   $arr:数字元素数与openIndex的$column相同
    */

    $retval = $hs->executeInsert($index, $arr);

    删除(注意:此处的openIndex要用$port_wr,即读写端口):
    /*
    * Int     $index: openIndex()所用的$index
    * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
    * Array   $value
    * Int     $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
    * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
    */

    $retval = $hs->executeDelete($index, $operation, $value, $number, $skip);

    更新(注意:此处的openIndex要用$port_wr,即读写端口):
    /*
    * Int     $index: openIndex()所用的$index
    * String  $operation:openIndex方法中指定的$key字段所用的操作符,目前支持'=', '>=', '<=', '>',and '<';可以理解为where条件
    * Array   $value
    * Int       $number(默认是1):获取结果的最大条数;相当于SQL中limit的第二个参数
    * Int     $skip(默认是0):跳过去几条;相当于SQL中limit的第一个参数
    */

    $retval = $hs->executeUpdate($index, $operation, $value, $number, $skip);

    实例:
    <?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) === false) {
        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')) === false) {
        echo $hs->getError(), PHP_EOL;
    }
    if ($hs->executeInsert(3, array('k3', 'v3')) === false) {
        echo 'A', $hs->getError(), PHP_EOL;
    }
    if ($hs->executeInsert(3, array('k4', 'v4')) === false) {
        echo 'B', $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')) === false) {
        echo $hs->getError(), PHP_EOL;
        die();
    }
  • 相关阅读:
    关键路径 图论 ——数据结构课程
    vue+flvjs实现flv格式视频流在线播放
    antdvue时间选择范围TimePicker 的使用,实现对应时间的禁用
    SVN(Subversion)中文站相关网址
    系统重启后ircdircu无法启动问题解决
    在Windows上安装Python+MySQL 的常见问题及解决方法
    windows 配置 pygraphviz
    C# 多线程操作TreeView
    ubuntu下解压rar文件乱码问题的解决
    将jar文件生成maven相关文件
  • 原文地址:https://www.cnblogs.com/ylqmf/p/2307620.html
Copyright © 2011-2022 走看看