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

接上篇: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快多了

参考资料:memcached_functions_mysql测试 

转载于:https://www.cnblogs.com/sunss/archive/2011/06/07/2074435.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLUDF编译器是用来编译用户自定义函数(UDF)的工具,它可以将C或C++编写的UDF代码编译成MySQL可以执行的.so或.dll文件。使用UDF编译器需要以下步骤: 1. 确认MySQL安装路径,找到include和lib目录的位置,将这两个路径加入系统环境变量中。 2. 编写UDF源代码,例如: ```c #include <mysql.h> #ifdef __cplusplus extern "C" { #endif my_bool my_function_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void my_function_deinit(UDF_INIT *initid); long long my_function(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); #ifdef __cplusplus } #endif my_bool my_function_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { // 初始化代码 } void my_function_deinit(UDF_INIT *initid) { // 清理代码 } long long my_function(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { // 函数代码 } ``` 这是一个简单的UDF函数模板,可以根据自己的需求修改。 3. 使用UDF编译器将源代码编译成.so或.dll文件。例如: ```bash gcc -shared -o my_function.so my_function.c -I /usr/include/mysql -DMYSQL_DYNAMIC_PLUGIN ``` 其中,-shared表示编译成共享库,-o表示输出文件名,-I指定MySQL头文件路径,-DMYSQL_DYNAMIC_PLUGIN表示编译成动态链接库。 4. 将生成的.so或.dll文件放置到MySQL插件目录中,可以在MySQL使用CREATE FUNCTION命令创建UDF函数,例如: ```sql CREATE FUNCTION my_function RETURNS INT SONAME 'my_function.so'; ``` 这样就可以在MySQL使用自定义的UDF函数了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值