HandlerSocket的安装实例及性能测试[通俗易懂]

HandlerSocket的安装实例及性能测试[通俗易懂] 一HandlerSocket简介Hanldersocket是一个MySQL守护进程插件,它让应用程序可以将MySQL当NoSQL使,Hanldersocket的主要目的是与存储引擎,如InnoDB交互,而不需要SQL相关的开销。访问MySQL表时,Hanldersocket仍然需要打开和关闭表,但不是每次访问都要求打开和关闭,因此减少了互斥争夺,极大地提高了系统性能,当流量变小时,Ha…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

一 HandlerSocket简介

Hanldersocket是一个MySQL守护进程插件,它让应用程序可以将MySQL当NoSQL使,Hanldersocket的主要目的是与存储引擎,如InnoDB交互,而不需要SQL相关的开销。访问MySQL表时,Hanldersocket仍然需要打开和关闭表,但不是每次访问都要求打开和关闭,因此减少了互斥争夺,极大地提高了系统性能,当流量变小时,Hanldersocket会关闭表,因此它永远不会阻止管理命令(DDL)。

 HandlerSocket的安装实例及性能测试[通俗易懂]

下图是MySQL+Memcached的常见架构模式:

HandlerSocket的安装实例及性能测试[通俗易懂]

 

二 测试环境准备

(一) 源码安装mysql5.5.x

准备工作:

新建用户和用户组

groupadd mysql

useradd -g mysql mysql

 

1:下载:

cmake-2.8.3.tar.gz

make-3.82.tar.gz

mysql-5.5.8.tar.gz

 

2:解压安装前2个包

 

tar zxvf  cmake-2.8.3.tar.gz

cd cmake-2.8.3

./configure

make

make install

tar zxvf make-3.82.tar.gz

cd make-3.8.2

./configure

make

make install

 

3:解压并安装mysql-5.5.8.tar.gz

tar zxvf mysql-5.5.8.tar.gz

cd mysql-5.5.8

 

cmake . \

-DCMAKE_INSTALL_PREFIX=/mysql/mysqldir \

-DMYSQL_DATADIR=/mysql/mysqldir/data \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_UNIX_ADDR==/mysql/mysqldir/data/mysql.sock \

-DMYSQL_USER=mysql \

-DWITH_DEBUG=0

 

make

make install

 

完成后进入MYSQL安装目录

 

cd /mysql/mysqldir

cp support-files/ my-medium.cnf /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysql.

vi /etc/my.cnf

将数据目录和套接字文件修改为实际值.

 

修改权限

chown mysql:mysql /etc/my.cnf

chown mysql:mysql /etc/init.d/mysql.

chown -R mysql:mysql /mysql/mysqldir

 

设置root用户密码

mysqladmin –uroot password “newpassword”

 

切换用户进入安装目录

su – mysql

cd /mysql/mysqldir

cp scripts/mysql_install_db .

./mysql_install_db

 

启动MYSQL

/etc/init.d/mysql start

(二) 安装HandlerSocket插件

大概安装步骤如下:
1 .下载

http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

2.编译 HandlerSocket客户端和服务器端程序:

./configure –with-mysql-source=… –with-mysql-bindir=… ; make; make install

在my.cnf中加入以下内容:

[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.

3.安装插件

mysql> INSTALL PLUGIN ‘HandlerSocket’ SONAME ‘HandlerSocket.so’;

mysql>SHOW PLUGINS; # 查看插件是否加载成功

4.安装perl客户端

cd  perl-Net-HandlerSocket/

perl Makefile.PL ;

make ;

make test ;

make install ;

安装完毕,重启mysql server

/etc/init.d/mysql restart;

 

注:不需要修改mysql的源代码。
mysql需要5.1或者以后版本。

(三) 安装Perl的相关模块DBI、DBD

1.安装DBI

下载DBI-1.609.tar.g;

tar –xvzf DBI-1.609.tar.gz;

cd DBI-1.609;

perl Makefile.PL ;

make;

make test;

make install;

2.安装DBD

下载DBI-1.609.tar.g;

tar –xvzf DBD-mysql-4.012.tar.gz;

cd DBD-mysql-4.012;

perl Makefile.PL ;

make;

make test;

make install;

三 测试

(一) 创建测试数据库及测试表

CREATE DATABASE test;

CREATE TABLE `test` (

 `test_id` int(10) unsigned NOT NULL,

 `test_score` int(10),

 PRIMARY KEY (`test_id`),

 KEY `INDEX_01` (`test_score`)

 ) ENGINE=InnoDB;

(二) 插入数据脚本

1.HandlerSocket插入脚本

HandlerInsert.pl:

 

#!/usr/bin/perl

 

use strict;

use warnings;

 

use Net::HandlerSocket;

my $args = { host => ‘localhost’, port => 9997 };

my $hs = new Net::HandlerSocket($args);

my $res = $hs->open_index(0, ‘test’, ‘test’, ‘PRIMARY’, ‘test_id,test_score’);

die $hs->get_error() if $res != 0;

 

#INSERT

for (my $line = 1; $line < $ARGV[0]; ++$line)

{

    $res = $hs->execute_single(0,’+’, [ $line, $line + 1 ],1,0);

}

print “$ARGV[0] rows affected\n”;

 

$hs->close();

 

使用说明:
./HandlerInsert.pl 需要插入的记录数

如:

./HandlerInsert.pl 100000

则插入100000条记录。

 

2.mysql插入数据脚本

MysqlInsert.pl:

#!/usr/bin/perl

 

#load module

use DBI;

 

#connect

my $dbh = DBI->connect(“DBI:mysql:database=test;host=localhost”, “root”, “uestc8020”, {‘RaiseError’

=> 1});

 

#execute INSERT query

 

for (my $line = 0; $line < $ARGV[0]; ++$line)

{

    my $rows = $dbh->do(“INSERT INTO test (test_id, test_score) VALUES ($line, $line + 1)”);

}

print “$ARGV[0] row(s) affected\n”;

 

# clean up

$dbh->disconnect();

使用说明:
./ MysqlInsert.pl 需要插入的记录数

如:

./ MysqlInsert.pl 100000

则插入100000条记录。

(三) 查询数据脚本

1.HandlerSocket查询脚本

HandlerQuery.pl:

#!/usr/bin/perl

use strict;

use warnings;

use Net::HandlerSocket;

#1. establishing a connection

my $args = { host => ‘localhost’, port => 9998 };

my $hs = new Net::HandlerSocket($args);

 

#2. initializing an index so that we can use in main logics.

# MySQL tables will be opened here (if not opened)

my $res = $hs->open_index(0, ‘test’, ‘test’, ‘INDEX_01’, ‘test_id,test_score’);

die $hs->get_error() if $res != 0;

 

#3. main logic

#fetching rows by id

#execute_single (index id, cond, cond value, max rows, offset)

for (my $number = 0; $number < $ARGV[0]; ++$number)

{

    $res = $hs->execute_single(0, ‘=’, [ 500000 ], 1, 0);

}

#4. closing the connection

$hs->close();

./ HandlerQuery.pl 查询次数

如:

./ HandlerQuery.pl 100000

查询100000次。

2.mysql查询脚本

MysqlQuery.pl:

#!/usr/bin/perl

 

#load module

use DBI;

 

#connect

my $dbh = DBI->connect(“DBI:mysql:database=test;host=localhost”, “root”, “uestc8020”, {‘RaiseError’

=> 1});

 

 

#execute SELECT query

for (my $number = 0; $number < $ARGV[0]; ++$number)

{

    my $sth = $dbh->prepare(“SELECT * from  test where test_score = 500000”);

    $sth->execute();

}

 

$dbh->disconnect();

./ MysqlQuery.pl 查询次数

如:

./ MysqlQuery.pl 100000

查询100000次。

(四) 测试结果

1.插入数据

插入100万条数据所需要的时间

HandlerSocket:

HandlerSocket的安装实例及性能测试[通俗易懂]

Mysql:

   HandlerSocket的安装实例及性能测试[通俗易懂]

插入数据性能(消耗时间)、

   HandlerSocket的安装实例及性能测试[通俗易懂]

2.查询数据

进行10万次查询所需要的时间

HandlerSocket:

HandlerSocket的安装实例及性能测试[通俗易懂]

Mysql:

 

HandlerSocket的安装实例及性能测试[通俗易懂]

 

查询数据性能(QPS)

    HandlerSocket的安装实例及性能测试[通俗易懂]

 

总结

对于插入时的QPS,HandlerSocket内部采用的是Bulk Insert操作,按理来说HandlerSocket应该占有很大优势。但从测试结果可以看出,插入时的QPS上HandlerSocket与Mysql差距不打,稍微占有优势,这和网上的测试结果有一定的出入。笔者认为,这可能是因为插入的数据量有关,由于相关的硬件限制,这次测试最多只插入了100万条记录,而网上的测试则是上千万的数据量。

对于查询时的QPS,测试结果与网上的测试相符,从可以看出,HandlerSocket明显占有比较大的优势,这与它的实现方式有关。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172631.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    2021年7月15日
    101
  • loadrunner11激活成功教程技巧

    loadrunner11激活成功教程技巧loadrunner11的激活成功教程步骤:1、用mlr5lprg.dll、lm70.dll覆盖LR11安装目录下“bin”文件夹中的对应文件。2、修改注册表,可以使用deletelicence工具删除,也可以手动删除。1)deletelicence工具删除很方便,记住以管理员身份运行,直接按照提示操作即可。2)手动修改注册表。开始-&amp;gt;运行-&amp;gt;regedit即可手动修改注册表。删除下面…

    2022年7月22日
    12
  • 集群技术的简介_集群的分类

    集群技术的简介_集群的分类集群技术集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。中文名集群技术外文名…

    2025年6月2日
    5
  • 网页自动跳转 5种方法

    网页自动跳转 5种方法转自:https://jingyan.baidu.com/article/36d6ed1f3c03c01bcf4883c9.html网页自动跳转5种方法利用HTML标记(META中的REFRESH属性)用HTML标记,就是用META的REFRESH标记,举例如下:其中content=10是10秒钟后跳转【5种常见网页自动跳转方法】网页自动跳

    2022年7月21日
    19
  • sql嵌套查询和连接查询_sql子查询嵌套规则

    sql嵌套查询和连接查询_sql子查询嵌套规则嵌套查询单值嵌套查询值返回结果是一个值的嵌套查询称为单值嵌套查询对Sales数据库,列出市场部的所有员工的编号USESaleGOSELECTemployee_idFROMemployeeWHEREdepartment_id=(SELECTdepartment_idFROMdepartmentWHEREdepartment_name=’市场部’)语句的执行过程分两个过程,首先在部门…

    2022年10月9日
    3
  • 数据结构(1)-线性表「建议收藏」

    数据结构(1)-线性表「建议收藏」1.线性表:n个数据元素的有序集合。线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。  线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有

    2022年5月18日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号