发一篇教你利用MySQL触发器主动更新memcache
一个相关的问题是第三方支持的资格问题,尽管直接来自厂商的支持和服务可以一定程度上减缓这个问题,但是,对于有的企业来说,通过强有力的本地化支持显然更有吸引力。MySQL5.1撑持触发器和自界说函数接口(UDF)的特征,假如共同libmemcache和MemcachedFunctionsforMySQL,就可以够完成memcache的主动更新。复杂纪录一下安装测试步骤。安装步骤
安装memcached,这个步骤很复杂,到处可见
安装mysqlserver5.1RC,安装举措也很公共,不空话了
编译libmemcached,解压后安装便可./configure;make;makeinstall
编译MemcachedFunctionsforMySQL,在http://download.tangent.org/找一个最新的版本下载就是,./configure--with-mysql=/usr/local/mysql/bin/mysql_config--libdir=/usr/local/mysql/lib/mysql/
make
makeinstall
接上去有两个举措让MemcachedFunctionsforMySQL在mysql中失效
在mysql的shell中实行memcached_functions_mysql源码目次下的sql/install_functions.sql,这会把memcachefunction作为UDF到场mysql
运转memcached_functions_mysql源码目次下的utils/install.pl,这是一个perl剧本,感化同上一条
测试memcachefunction
以下测试剧本摘自memcached_functions_mysql的源码目次,有乐趣能够尝尝
PLAINTEXTCODE:droptableifexistsurls;
createtableurls(
idint(3)notnull,
urlvarchar(64)notnulldefault,
PRimarykey(id)
);
selectmemc_servers_set(localhost:11211);
selectmemc_set(urls:sequence,0);
DELIMITER|
DROPTRIGGERIFEXISTSurl_mem_insert;
CREATETRIGGERurl_mem_insert
BEFOREINSERTONurls
FOREACHROWBEGIN
SETNEW.id=memc_increment(urls:sequence);
SET@mm=memc_set(concat(urls:,NEW.id),NEW.url);
END|
DELIMITER;
insertintourls(url)values(http://google.com);
insertintourls(url)values(http://www.ooso.net/index.php);
insertintourls(url)values(http://www.devdao.net/);
insertintourls(url)values(http://slashdot.org);
insertintourls(url)values(http://mysql.com);
select*fromurls;
selectmemc_get(urls:1);
selectmemc_get(urls:2);
selectmemc_get(urls:3);
selectmemc_get(urls:4);
selectmemc_get(urls:5);
这些过程被存储和运行在数据库服务器上,以减少在客户端的处理过程,从而最大限度地提高了处理能力,因为通常情况下数据库服务器会运行地更快。存储过程并不是MySQL独有的功能,但是这个最近新增加的功能使得这个数据库比以前更具吸引力了。 可以动态传入参数,省却了动态SQL的拼写。 备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 总感觉自己还是不会SQL 呵呵,这就是偶想说的 发几份SQL课件,以飨阅者
页:
[1]