mysql 5.7 udf http_mysql下mysql-udf-http效率測試小記

看到張宴的博客上關于"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下mysql-udf-http效率測試小記

本文地址: http://www.cppcns.com/shujuku/mysql/83441.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370594.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

作為一名程序員,聊聊我們的現狀和未來

前言&#xff1a;互聯網這個高速發展的新興行業&#xff0c;注定是敢想敢干敢創新&#xff0c;耐勞耐操耐折騰年輕人的天下&#xff1f; 我們所在的互聯網行業&#xff0c;不斷地有新的公司冒出&#xff0c;有新的商業模式成形&#xff0c;有新的產品形態影響著大家的生活日常&…

適用于孩子,父母和祖父母的JBoss HornetQ –第1章

現在與HornetQ合作已經快4年了&#xff0c;我認為是時候分享我到目前為止所學知識的一部分了。 這篇文章的主要目的不是重寫官方文檔 &#xff0c;而是以簡單的方式闡明我們在PaddyPower中最常用的概念。 什么是HornetQ HornetQ是JMS實現。 JMS是一種面向消息的中間件API&am…

riot.js教程【四】Mixins、HTML內嵌表達式

前文回顧riot.js教程【三】訪問DOM元素、使用jquery、mount輸入參數、riotjs標簽的生命周期&#xff1b;riot.js教程【二】組件撰寫準則、預處理器、標簽樣式和裝配方法&#xff1b;riot.js教程【一】簡介&#xff1b; 共享Mixins 混合開發可以使你很好的復用代碼&#xff0c;如…

移動端判斷手機橫豎屏狀態

禁用用戶自動縮放功能&#xff1a; <meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0"> 判斷橫豎屏狀態有兩種方法&#xff1a;css判斷、js判斷 (一)、css判斷橫屏還是豎屏 1、寫在同一個css文…

ubuntu dhcp ping 不通 自己_??2、DHCP安裝和配置

DHCP動態主機設置協議&#xff0c;是一個局域網的網絡協議&#xff0c;使用UDP協議工作&#xff0c;可以快速分配IP地址&#xff0c;解決內網IP不足、手動配置IP造成IP沖突以及內網機器多手工配置比較麻煩的問題。1.把win2008和win2003設置同一網段&#xff0c;網絡適配器—配置…

python秒數變日期_將pandas日期列轉換為已用秒數

新答案 將文本轉換為Timedeltadf[Origin Time(Local)] pd.to_timedelta(df[Origin Time(Local)]) df[Seconds] df[Origin Time(Local)].dt.total_seconds() 舊答案 考慮數據幀dfdf pd.DataFrame(dict(Datepd.date_range(2017-03-01, 2017-03-02, freq2H))) Date 0 2017-03-0…

mysql用一個表更新另一個表的方法

Solution 1: 修改1列(navicate可行) update student s, city c set s.city_name c.name where s.city_code c.code; Solution 2: 修改多個列 update a, b set a.titleb.title, a.nameb.name where a.idb.id Solution 3: 采用子查詢(navicate不可行) update student s set…

選擇您的Java EE 6應用服務器

我被問到的第一個問題是&#xff1a;“我們應該使用哪個Java EE應用服務器&#xff1f;”。 隨著Java EE 6的日益普及&#xff0c;新的兼容應用程序服務器獲得了認證。 當前的官方兼容性和認證矩陣列出了針對完全配置文件&#xff0c;Web配置文件或兩者認證的12種不同產品。 如…

串的基本計算

#include<stdio.h> #include<stdlib.h> //typedef int Status; #define Max 20 #define OK 1 #define ERROR 0 #define OVERLOE -2 typedef struct//堆分配表示串 { char *ch; int length; }HString; // int CreatHString(HString &H)//構造字符串 { H.length …

HTML表格屬性及簡單實例

這里主要總結記錄下表格的一些屬性和簡單的樣式&#xff0c;方便以后不時之需。 1、<table> 用來定義HTML的表格&#xff0c;具有本地屬性 border 表示邊框&#xff0c;border屬性的值必須為1或空字符串("")。該屬性不會控制邊框的樣式&#xff0c;而是由CSS來…

怎么查看MySQL 源碼編譯了什么_Mysql 源碼編譯教程貼

題外話:這是一篇教程貼,不僅學的是mysql的編譯,還是一些編譯的知識.我也是一個菜鳥,寫一些感悟和心得,有什么問題可以批評指正,謝謝!如果只是為了安裝請移到我的另一篇安裝貼: Mysql安裝貼環境:OS: CentOS 6.6x64 minimysql: mysql-5.6.251. mysql 下載:http://dev.mysql.com/d…

linux mysql啟動_MySQL 安裝(二)

MySQL 安裝所有平臺的Mysql下載地址為&#xff1a;MySQL 下載 . 挑選你需要的 MySQL Community Server 版本及對應的平臺。Linux/UNIX上安裝MySQLLinux平臺上推薦使用RPM包來安裝MySQL&#xff0c;MySQL AB提供了以下RPM包的下載地址&#xff1a;MySQL - MySQL服務器。你需要該…

0524駝峰命名法,模態對話框

模態對話框 window.showModalDialog("url"&#xff0c;"向目標對話框傳的值"&#xff0c;"窗口特征參數") 打開模態對話框 模態對話框必須關掉才能對后端操作。 模塊對話框和窗口的區別是永遠置頂。 特征參數&#xff1a;用分號隔開&#xff0c;…

誰在偷你的記憶? 應用服務器版

您創建了一個了不起的應用程序。 您將其投入生產。 您會發現您沒有足夠的可用內存。 即使您的所有測量結果&#xff08;可能是借助我們的小型公用事業公司進行的測量 &#xff09;都表明您應該還不錯。 我們計劃發布一系列博客文章&#xff0c;研究堆消失的位置&#xff0c;并…

遺忘的html標簽

1 <span>x</span><sup>2</sup><span> y10</span> 2 <br> 3 <span>H</span><sub>2</sub><span>O</span> <sup> 標簽可定義上標文本。 包含在 <sup> 標簽和其結束標簽 …

Android四大組件之BroadcastReceiver

什么是BroadcastReceiver? BroadcastReceiver(廣播接收器)&#xff0c;顧名思義&#xff0c;是用來接收廣播的。Android內部實現了一套廣播通信機制&#xff0c;即在某個應用或某個組件注冊廣播接收器&#xff0c;接收特定類型的廣播。當別的應用或組件發送該類型的廣播時&…

mysql數據庫索引頁號為什么從3開始_MySQL數據庫快問快答

原標題&#xff1a;MySQL數據庫快問快答前言今天樓主給大家列一下關于數據庫幾個常見問題的要點&#xff0c;如果大家對其中的問題感興趣&#xff0c;可以自行擴展研究。1. UNION ALL 與 UNION 的區別UNION和UNION ALL關鍵字都是將兩個結果集合并為一個。UNION在進行表鏈接后會…

通過簡單的Spring方面擺脫null參數

什么是世界上最令人討厭的&#xff0c;同時也是最受歡迎的例外&#xff1f; 我敢打賭這是NullPointerException。 NullPointerException可以表示任何東西&#xff0c;從簡單的“ ups&#xff0c;我認為不能為空”到數小時和數天的第三方庫調試&#xff08;我敢于嘗試使用Doze…

java arraylist排序_最全Java集合筆記

集合概述什么是集合集合框架&#xff1a;用于存儲數據的容器。集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容&#xff1a;對外的接口、接口的實現和對集合運算的算法。接口&#xff1a;表示集合的抽象數據類型。接口允許我們操作…

【3】JVM-OutOfMemory異常重現

JVM中常見的OOM&#xff0c;那么如何通過自己編寫代碼產生這些OOM異常呢&#xff1f;通過寫代碼重現異常&#xff0c;是為了避免在工作中寫出有OOM BUG的代碼。之前雖然看過相關文章&#xff0c;但是沒自己寫過這些代碼&#xff0c;這次在編寫的實際過程中&#xff0c;由于和書…