看到张宴的博客上关于"http/rest客户端的文章",怎样安装啥的直接都跳过,下面直接进入测试阶段,测试环境:虚拟机

复制代码代码如下:

[root@localhost ~]# uname -a

Linux sunss 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux

内存和交换分区:

复制代码代码如下:

[root@localhost ~]# free -m

total used free shared buffers cached

Mem: 376 363 13 0 23 105

-/+ buffers/cache: 233 142

Swap: 1023 133 890

mysql:

[root@localhost ~]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 57

Server version: 5.1.26-rc-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

使用的表结构:

复制代码代码如下:

DROP TABLE IF EXISTS `mytable`;

CREATE TABLE `mytable` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`addtime` int(10) NOT NULL,

`title` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

php操作MySQL的程序:

复制代码代码如下:

$type = $_GET['type'];

print_r($_GET);

include_once("gettime.php");

$btime = getmicrotime();

$loop_cnt= 1000; //循环次数

$db_host = '127.0.0.1'; //

$db_user = 'sunss'; //

$db_pass = '123456'; //

$db_name = 'test'; //

$db_link = mysql_connect($db_host, $db_user, $db_pass) or die("Connected failed: ".mysql_error()."\n");

mysql_query('set names utf8');

mysql_db_query($db_name, $db_link);

if ("put" == $type) {//修改

$i = 1;

while ($i <= $loop_cnt) {

$title = "jkjkjkjkjkjkjkjkjkjkjkjkjk";

$tt = time();

$sql = "update mytable set addtime=".$tt.",title='".$title."' where id='".$i."'";

$res = mysql_query($sql);

if (FALSE == $res) {

echo "update failed!\n";

}

$i++;

}

} else if ("delete" == $type) { //删除

$i = 1;

while ($i <= $loop_cnt) {

$sql = "delete from mytable where id='".$i."'";

echo "delete sql: ".$sql."
";

$res = mysql_query($sql);

if (FALSE == $res) {

echo "delete failed!\n";

}

$i++;

}

} else if ("post" == $type) { //添加

$i = 0;

while ($i < $loop_cnt) {

$title = "hahahahahahahahahahahahahahahahahaha";

$tt = time();

$sql = "insert into mytable(addtime, title) values($tt, '".$title."')";

//print "SQL: ".$sql."
";

$res = mysql_query($sql);

if (FALSE == $res) {

echo "insert failed!\n";

}

$i++;

}

}

mysql_close();

$etime = getmicrotime();

$runTime = round($etime - $btime, 4);

echo "runTime: ".$runTime."\r\n
";

?>

单独执行php连接MySQL,单条连接添加1000条记录需要:0.9s左右

php操作memcache的程序:

复制代码代码如下:

include_once("gettime.php");

$btime = getmicrotime();

//杩炴帴

$mem_host = "192.168.0.134";

$mem_port = "11311";

$timeout = 3600;

$i = 0;

$cnt = 1000;

while ($i < $cnt) {

$mem = new Memcache;

$mem->connect($mem_host, $mem_port) or die("Could not connect!");

$ret = $mem->set($i, "11111111111", 0, $timeout);

if (false == $ret) {

file_put_contents("insert_failed.log", "post failed!\n", FILE_APPEND);

}

$mem->close();

$i++;

}

//鍏抽棴杩炴帴

$etime = getmicrotime();

$runTime = round($etime - $btime, 4);

echo "runTime: ".$runTime."\r\n
";

?>

单条连接添加1000条记录,需要0.8s左右,

创建触发器:

复制代码代码如下:

DELIMITER $$

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`mytable_insert`$$

CREATE

/*!50017 DEFINER = 'root'@'localhost' */

TRIGGER `mytable_insert` AFTER INSERT ON `mytable`

FOR EACH ROW BEGIN

SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.0.134/mem_ss.php?type=post&id=', NEW.id, "&data=", NEW.addtime), 11));

END;

$$

为触发器写个php更新memcache,代码如下:

复制代码代码如下:

$id = $_GET['id'];

$type = $_GET['type'];

$json_data = $_GET['data'];

var_dump($_GET);

//杩炴帴

$mem_host = "192.168.0.134";

$mem_port = "11211";

$timeout = 3600;

$mem = new Memcache;

$mem->connect($mem_host, $mem_port) or die("Could not connect!");

if ("get" == $type ) {

$val = $mem->get($id);

echo $val;

//$arr = jsonDecode($val,'utf-8');

//print_r($arr);

} else if ("put" == $type) {

$ret = $mem->replace($id, $json_data, 0, $timeout);

if (false == $ret) {

file_put_contents("replace_failed.log", "replace failed!\n", FILE_APPEND);

}

} else if ("delete" == $type) {

$ret = $mem->delete($id);

if (false == $ret) {

file_put_contents("delete_failed.log", "delete failed!\n", FILE_APPEND);

}

} else if ("post" == $type) {

$ret = $mem->set($id, $json_data, 0, $timeout);

if (false == $ret) {

file_put_contents("post_failed.log", "post failed!\n", FILE_APPEND);

}

}

$mem->close();

?>

使用php触发MySQL添加1000条记录,同时触发器触动php更新memcache,使用时间9s左右,

因为每次都关闭链接memcache,看是不是关闭链接导致慢,又写了一个程序:

复制代码代码如下:

include_once("gettime.php");

$btime = getmicrotime();

//连接

$mem_host = "192.168.0.134";

$mem_port = "11311";

$timeout = 3600;

$i = 0;

$cnt = 1000;

while ($i < $cnt) {

$mem = new Memcache;

$mem->connect($mem_host, $mem_port) or die("Could not connect!");

$ret = $mem->set($i, "11111111111", 0, 3600);

if (false == $ret) {

file_put_contents("insert_failed.log", "post failed!\n", FILE_APPEND);

}

$mem->close();

$i++;

}

//关闭连接

$etime = getmicrotime();

$runTime = round($etime - $btime, 4);

echo "runTime: ".$runTime."\r\n
";

?>

耗时0.9s左右,比一个连接慢不了多少。

为了定位是触发器慢还是http_put慢,创建一个临时表

tmp_mytable,表结构如下:

复制代码代码如下:

CREATE TABLE `mytable` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`addtime` int(10) NOT NULL,

`title` varchar(255) NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

再次修改触发器,如下:

复制代码代码如下:

DELIMITER $$

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`mytable_insert`$$

CREATE

/*!50017 DEFINER = 'root'@'localhost' */

TRIGGER `mytable_insert` AFTER INSERT ON `mytable`

FOR EACH ROW BEGIN

insert into tmp_mytable values(NEW.id,NEW.addtime,NEW.title);

END;

$$

再次用php向MySQL中添加1000条记录,消耗时间0.7s左右,证明效率消耗在http_put,也就是mysql-udf-http慢。

不知道我的测试有错没?还请正在使用mysql-udf-http的高手,或者对mysql-udf-http有研究的高手指教。

mysql udf http,mysql下mysql-udf-http效率测试小记相关推荐

  1. mysql 5.7 udf http_mysql下mysql-udf-http效率测试小记

    看到张宴的博客上关于"http/rest客户端的文章",怎样安装啥的直接都跳过,下面直接进入测试阶段,测试环境:虚拟机 复制代码 代码如下: [root@localhost ~]# ...

  2. 张宴 vip mysql_MySQL_mysql下mysql-udf-http效率测试小记,看到张宴的博客上关于http/rest - phpStudy...

    mysql下mysql-udf-http效率测试小记 看到张宴的博客上关于"http/rest客户端的文章",怎样安装啥的直接都跳过,下面直接进入测试阶段,测试环境:虚拟机 复制代 ...

  3. linux mysql添加视图_Linux下MySQL的简单使用(二)

    上一篇我们介绍到一些Linux的简单命令的使用,今天我们更深入了解一下MySQL! 一.多表查询 这篇通过实例来讲述多表查询,目的是穷尽所有的场景和所有的方法,并且对每个方法的使用做实例. 首先先列举 ...

  4. linux mysql 无法识别,Linux下MySQL 5.7.23无法远程连接解决方案

    MySQL 版本:5.7.23操作系统:Linux问题描述:只能通过Linux系统账号Root命令行进入数据库,无法使用JDBC,远程连接工具进入数据库.报错:ERROR 1698 (28000): ...

  5. Linux下mysql支持中文,linux下mysql环境支持中文配置步骤

    sql脚本执行前加上: CREATE DATABASE IF NOT EXISTS mydatabase DEFAULT CHARSET utf8 COLLATE UTF8_GENERAL_CI; u ...

  6. linux 下mysql的管理,Linux下 MySQL安装和基本管理

    •安装linux一些必须的包: 1.yum install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-deve ...

  7. linux mysql详解,Linux 下mysql安装使用详解

    一.检查旧版本,rpm 完全卸载 rpm -qa |grep mysql  查询,将相关包卸载 find / -name mysql     查询, 相关mysql目录,文件统统卸载 /etc/my. ...

  8. centos得mysql安装教程_Centos下Mysql安装图文教程_MySQL

    Mysql是比较常用的数据库,日常开发中也是采用地比较多.工欲善其事必先利其器,本文特地来讲解下如何在centos(其他linux发行版类似)下安装Mysql.首先准备的材料:Mysql,我这里采用的 ...

  9. brew安装mysql 卸载_Ubuntu环境下MySQL卸载安装配置远程访问三步曲

    卸载 查看所有依赖 dpkg --list|grep mysql 卸载 MySQL sudo apt-get remove mysql-* 清除残留数据,弹出界面选择 yes dpkg -l |gre ...

  10. C 实现Mysql增量备份_window下mysql数据库增量备份实现教程

    mysql增量备份(mysql5.1 之后),linux下mysql增量备份 网上资料很多.这里只说明window下mysql增量备份. 定义: mysql数据库会以二进制的形式,自动把用户对mysq ...

最新文章

  1. ASP.NET 配置节架构
  2. android相关使用工具
  3. k8s Service之ClusterIP示例
  4. 白内障预防+手术中人工晶状体的选择
  5. 面向Tableau开发人员的Python简要介绍(第2部分)
  6. CentOS 7 上 Docker 安装
  7. Maven实战---两个war包的调用
  8. 批量生成10个虚拟主机配置
  9. easyui页内跳转
  10. k8s核心技术-资源编排(yaml)的编写方式---K8S_Google工作笔记0019
  11. 2017.4.26-morning
  12. PS CS5制作1寸照片
  13. 微信小程序上拉触底事件
  14. Qt系列文章之 QAbstractItemModel(上)
  15. 异常解决——SpringBoot项目启动卡住,无任何异常信息
  16. 物联网技能竞赛DAY1
  17. 一个传播 Worm.Win32.Otwycal.c / Worm.Win32.Infei.a 的网站v2
  18. TCP/UDP 端口
  19. windows 安装汽车之家falcon插件 采集数据
  20. 零基础学软件测试有前途吗?

热门文章

  1. 儿童节教你用 Python 画出童年回忆
  2. AI 时代,为什么程序员很贵?
  3. 远程会议总卡顿?8 个“小白”办法一看就会!
  4. 面对新型肺炎疫情,AI 能做什么?
  5. 2019 谷歌年度搜索关键词揭晓,技术宅的英雄梦!
  6. “不懂 CPU 工作原理又如何,直接用代码模拟一个!”
  7. Oracle 扼杀 Java EE!
  8. 阿里技术副总裁贾扬清:我对人工智能的一点浅见 | 技术头条
  9. 对 5G “迟钝”的苹果,该如何后来居上?| 极客头条
  10. 我们为什么要学习 Python、TypeScript 与 Go?