mysql中使用UDF自动同步memcached效率笔记_Mysql

接上篇:mysql使用mysql-udf-http效率测试笔记 ,这次不使用rest架构,而是使用:libmemcached和memcached_functions_mysql,测试版本是:

libmemcached-0.34.tar.gz和memcached_functions_mysql-0.9.tar.gz,其它版本配对都有问题,我安装测试过有问题的版本有:

复制代码 代码如下:

memcached_functions_mysql-1.1在:
libmemcached-0.49\libmemcached-0.48\libmemcached-0.47\libmemcached-0.30\libmemcached-0.43\\libmemcached-0.42\
下安装有错误
memcached_functions_mysql-0.10在:
libmemcached-0.42\下安装有错误
memcached_functions_mysql-0.8在:
libmemcached-0.49\libmemcached-0.48\libmemcached-0.47\libmemcached-0.44\libmemcached-0.43\
\libmemcached-0.42\下安装有错误

MySQL测试版本:5.1.55,操作系统Centos5.4 64bit,内存2G

安装libmemcached-0.34和memcached_functions_mysql-0.9,

复制代码 代码如下:

[root@sunss24 libmemcached-0.34]#./configure \
--with-memcached=/home/memcache/bin/memcached
[root@sunss24 libmemcached-0. 34]# make
[root@sunss24 libmemcached-0. 34]# make install
再运行一下memstat,算成功了
[root@sunss24 ~]# ln -s /usr/local/lib/libmemcached.so.3 /usr/lib/
[root@sunss24 ~]# cd memcached_functions_mysql-0.9
[root@sunss24 memcached_functions_mysql-0.9]# ./configure \
--with-mysql=/usr/local/mysql/bin/mysql_config \
--libdir=/usr/local/mysql/lib/
[root@sunss memcached_functions_mysql-0.9]# make && make install

安装完成后将UDFs加载到MySQL中:

复制代码 代码如下:

mysql> show variables like "%plugin%";
+---------------+-----------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------+
| plugin_dir | /usr/local/mysql/lib/mysql/plugin |
+---------------+-----------------------------------+
1 row in set (0.00 sec)

[root@sunss ~]# find / -name "libmemcached_functions_mysql.so"
/usr/local/mysql/lib/libmemcached_functions_mysql.so
/root/memcached_functions_mysql-0.9/src/.libs/libmemcached_functions_mysql.so
You have new mail in /var/spool/mail/root
[root@sunss ~]# cp /usr/local/mysql/lib/libmemcached_functions_mysql.so /usr/local/mysql/lib/mysql/plugin/
[root@sunss ~]# cd memcached_functions_mysql-0.9/
[root@sunss ~]#cd sql/
mysql> source install_functions.sql;

查看各种版本:

复制代码 代码如下:

mysql> select memc_udf_version();
+--------------------+
| memc_udf_version() |
+--------------------+
| 0.9 |
+--------------------+
1 row in set (0.00 sec)

mysql> select memc_libmemcached_version();
+-----------------------------+
| memc_libmemcached_version() |
+-----------------------------+
| 0.34 |
+-----------------------------+
1 row in set (0.00 sec)

mysql>

遇到问题:

复制代码 代码如下:

No package 'libmemcached' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables DEPS_CFLAGS
and DEPS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
解决办法:
[root@sunss24 memcached_functions_mysql-0.9]# whereis pkgconfig
[root@sunss24 memcached_functions_mysql-0.9]# export \
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

导出所有memcache内容:
使用:memcached-hack.zip
效率测试:
插入:

复制代码 代码如下:

<?php
include_once("gettime.php");
$btime = getmicrotime();
$i = 0;
$mem = new Memcache();
$mem->addServer('192.168.0.10', 11212);
$local_db = mysql_connect("192.168.0.208", "sunss", "123456");
if(!$local_db)
{
die('Could not connect: '.mysql_error());
}
$local_db_sel = mysql_select_db("test", $local_db);
mysql_query("set names utf8", $local_db);
while ( $i < 1000) {
$re_sql = "insert into urls (id,url) values ($i, 'www.gongchang.com')";
$res = mysql_query($re_sql, $local_db);
$i++;
}
mysql_close($local_db);
$etime = getmicrotime();
$runTime = round($etime - $btime, 4);
echo "runTime: ".$runTime."\r\n";
?>

1000条,插入时间:runTime: 1.4072
删除:

复制代码 代码如下:

<?php
include_once("gettime.php");
$btime = getmicrotime();
$i = 0;
$mem = new Memcache();
$mem->addServer('192.168.0.10', 11212);
$local_db = mysql_connect("192.168.0.208", "sunss", "123456");
if(!$local_db)
{
die('Could not connect: '.mysql_error());
}
$local_db_sel = mysql_select_db("test", $local_db);
mysql_query("set names utf8", $local_db);
while ( $i < 1000) {
//$re_sql = "insert into urls (id,url) values ($i, 'www.gongchang.com')";
$re_sql = "delete from urls where id=".$i;
//echo "re_sql_1: ".$re_sql."\n";
$res = mysql_query($re_sql, $local_db);
$i++;
}
mysql_close($local_db);
$etime = getmicrotime();
$runTime = round($etime - $btime, 4);
echo "runTime: ".$runTime."\r\n";
?>

删除1000条,运行时间:runTime: 1.5534
更新未作
结论:每秒query大概650条记录,比上次的mysql-udf-http快多了

时间: 2024-11-02 17:10:46

mysql中使用UDF自动同步memcached效率笔记_Mysql的相关文章

MySQL中insert语句的使用与优化教程_Mysql

MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如果数据是字符型,必须使用单引号或者双引号,如:"value"

MySQL中基本的多表连接查询教程_Mysql

一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:         由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2.   内连接INNER JOIN 在MySQL中把I SELECT * FROM table1 CROSS J

MySQL中replace into语句的用法详解_Mysql

在向表中插入数据的时候,经常遇到这样的情况: 1.首先判断数据是否存在: 2.如果不存在,则插入: 3.如果存在,则更新.   在 SQL Server 中可以这样写: 复制代码 代码如下: if not exists (select 1 from table where id = 1) insert into table(id, update_time) values(1, getdate()) else update table set update_time = getdate() whe

MySQL中LIKE子句相关使用的学习教程_Mysql

MySQL LIKE 语法LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法如下: WHERE column LIKE pattern WHERE column NOT LIKE pattern 在 LIKE 前面加上 NOT 运算符时,表示与 LIKE 相反的意思,即选择 column 不包含 pattern 的数据记录. LIKE 通常与通配符 % 一起使用,% 表示通配 pattern 中未出现的内容.而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效果

MySQL中的binlog和redo浅析(r12笔记第5天)

   有一个小问题可能很多人都想起过,那就是MySQL中既然已经有了binlog,为什么还需要redo,这个问题看起来好像很简单,但是细细品来,还是有不少值得注意的地方.     对于数据恢复,尤其是异常宕机的情况下,再次启动的时候,如何恢复,恢复的数据依据,这个尤为重要,在MySQL中是有checkpoint的技术来做一个基本的检查点控制,也就是常说的LSN,对于事务性数据库,大都会采用write ahead log的策略,即当前事务提交的时候,先写redo,在修改相应的页,如果发生宕机导致数

MySQL中select语句使用order按行排序_Mysql

本文介绍MySQL数据库中执行select查询语句,并对查询的结果使用order by 子句进行排序. 再来回顾一下SQL语句中的select语句的语法: Select 语句的基本语法: Select <列的集合> from <表名> where <条件> order by <排序字段和方式> 如果要对查询结果按某个字段排序,则要使用order by 子句,如下: select * from <表名> order by <字段名称>

mysql中合并两个字段的方法分享_Mysql

例如:select (a+b) as c from 表 类型也一致都是varchar型的,可就是显示不正确. 直到concat() MySQL中concat函数 下面通过一个例子介绍MySQL中的concat函数的使用方法,比如select concat('11','22','33'). MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则

MySQL中的唯一索引的简单学习教程_Mysql

mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQUE吧. 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE. 把它定义为一个唯一索引. 创建表时直接设置: DROP TABLE IF EXISTS `st

mysql中insert与select的嵌套使用方法_Mysql

本文讲述了mysql中insert与select的嵌套使用的方法,对于初学MySQL的朋友有一定的借鉴价值. 这里需要实现在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现该功能需求.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上