Total Pageviews

Monday 16 July 2012

MySQL必须配合Memcached来使用么?



MySQL扩展的开发,主要有UDF、Daemon Plugin、Storage Engine Plugin等。
5.1版本以及以后的新版本,都有比较成熟的Plugin机制,可以相对简单的为MySQL增加额外的功能。

下面是我最近研究的两个有意思的MySQL扩展:

一,Mycached

Mycached是在MySQL的基础上增加了Memcached协议,以UDF方式实现。
也就是说,应用程序可以使用Memcached客户端来访问MySQL数据库,同时也可以使用MySQL客
户端来访问MySQL数据库。而两个协议是访问的同一份数据。
这样的做法有以下好处:

1,节省缓存资源,由于两种协议访问的是同一份数据,所以缓存也只有一份,无需单独部署Memcached服务。
2,无需数据同步,没有同步延迟。使用SQL更新数据库后,可以立即通过Memcached协议获取更新后的数据。
3,可以使用数据库的分布机制,方便的部署多份缓存,来达到高可用和高吞吐的目的。
4,支持大量的并发,其网络服务机制类似Memcached的机制,并非MySQL传统的多线程方式。
5,直接访问存储引擎,绕过了SQL解析、优化等环节,提高了效率,这也正式所谓“NOSQL”所推崇的。

Mycached的相关介绍参见:
http://developer.cybozu.co.jp/kazuho/2009/08/mycached-memcac.html
代码参见:
http://svn.coderepos.org/share/platform/mysql/mycached/trunk/


二,HandlerSocket Plugin

HandlerSocket的实现机制与上述的Mycached类似,但是以Daemon Plugin方式实现的,而且实现并非Memcached协议。
原理相似,优势也相似,但HandlerSocket有如下独特优势:

1,实现了写操作,比如INSERT、DELETE等。
2,协议更简单,效率有所提高。

HandlerSocket的相关介绍参见:
http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
代码参见:
http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL


我对以上两个扩展进行了简单的分析和测试,认为很有价值。
都以C++语言开发,代码量不多,比较容易学习和调试。

最近出版的一本新书,对于MySQL扩展的开发很具有指导意义:
https://www.packtpub.com/mysql-5-1-plugins-development/book