论坛首页 综合技术论坛

memcache_engine + memcachedb = 高性能分布式内存数据库

浏览 15097 次
精华帖 (19) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-22  
memcachedb是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。

memcachedb给memcached添加了一些数据库才具备的特性,但是我们还不能说memcachedb已经是一个数据库了,这是因为memcached不支持内存对象的遍历操作,当然更加不能支持复杂的查询操作,只能支持根据已知的key去查询对应的value。因此如果想把memcachedb当成一个高性能的分布式内存数据库来使用的话,查询的问题就没有办法解决,只能在应用程序里面配合其他方案做一些折衷。

然而memcached的另外一个开源项目完美的填补了这一个缺陷,就是memcache_engine

memcache_engine是一个MySQL数据库的存储引擎,目前只支持MySQL5.1数据库,他能够把memcachedb作为MySQL数据库的一个存储引擎和MySQL集成起来,让用户通过标准的SQL查询语句访问memcachedb中存放的数据,请看如下示例:

CREATE TABLE `a` (
    `a` int(11) NOT NULL DEFAULT '0',
    `b` int(11) DEFAULT NULL,
    `c` int(11) DEFAULT NULL,
    PRIMARY KEY (`a`)
    ) ENGINE=MEMCACHE DEFAULT CHARSET=latin1
CONNECTION='localhost:6666\;localhost:6688';


创建表a,存放在分布式memcached server:localhost:6666和localhost:6688当中。然后我们就可以使用标准的SQL语句随意的进行CRUD操作去使用memcachedb了,这实在是太酷了!有了memcache_engine,我们就可以用SQL去访问memcached,有了memcachedb,我们就不必担心数据丢失问题,事务恢复问题了,简直是绝配,让memcached真正成为了一个高性能的分布式数据库系统了。目前memcache_engine项目还是早期试验阶段,让我们期待memcache_engine项目早日发布正式版本吧!

顺便多说几句:最近一年来,特别是最近一个月以来,围绕memcached的开源项目发展的非常非常活跃:

1、最近刚刚发布了memcached的新的高性能C客户端接口: libmemcached

2、由于有了libmemcached,该组织又发布了memcache_engine存储引擎,cool!

3、由于libmemcached的发布,不到一周时间,ruby的两个崭新的memcache client就问世了,他们是CaffeineNew memcache-client,让ruby访问memcached的速度大幅度提高,请看:libmemcached发布了,ruby访问memcached提速20倍

4、memcachedb发布了,这是中国的互联网公司贡献的开源项目

以上几个项目都是在2008年1月发布的,真的不是一般的繁荣阿。再加上之前发布的新的支持异步访问的Java Memcached API和C#接口,可以说除了Python,其他主流非主流编程语言都可以使用memcached了。其实即便是Python还没有公布出来的开源接口,我们也知道国内的web2.0网站豆瓣就是使用Python访问memcached,并且支持了极大的访问量,因此目前围绕memcached的开源项目发展的情况非常的繁荣。

memcached最近两年这么受欢迎,其实和互联网web2.0的流行有很大的关系,web2.0网站通常需要个性化页面,依赖于页面局部和数据细颗粒度的缓存来提升性能,并且web2.0网站流量都很大,因此memcached这种高性能分布式缓存服务器就大行其道了。

当然我觉得最具有革命意义的还是memcache_engine和memcachedb这两个项目的发布,他们能够让memcached的用途不仅仅限于缓存服务器而已,而是能够真正充当分布式数据库来使用了,这无异是诸多大流量web2.0网站和开发人员的福音阿。
   发表时间:2008-01-22  
帮别人做个广告,想了解新浪的团队开发的开源产品,可去此BLOG:http://blog.s135.com/
目前它们又有一个新的开源项目发布了
0 请登录后投票
   发表时间:2008-01-22  
robbin老大近期实在太~~~实在是没有台词了。
Robbin出品,必属精品!
0 请登录后投票
   发表时间:2008-01-23  
以Sql方式查询DB4,会快吗?
0 请登录后投票
   发表时间:2008-01-23  
淘宝的tbstore,使用的Berkeley DB,也是一个非常优秀的cache系统,淘宝内部大量使用。就是网上资料比较少
0 请登录后投票
   发表时间:2008-01-23  
就算有资料,有的用么。
0 请登录后投票
   发表时间:2008-01-23  
C3PO 写道
内存数据库?何必呢

建个内存盘(memdrive),把MySQL设置成数据库文件存放到内存盘里。再写个脚本每隔一段时间把instance拷到硬盘上。完事


你写个脚本出来给我看看? 不要说你把整个内存里面的instance热拷贝到硬盘上了,你就是把innodb里面的数据在线热备份出来,你都办不到! 因为你必须考虑内存数据的同步问题。所以innobase的hotbackup工具才能卖1万多块钱。

再者memcachedb是分布式的,可以把n台物理服务器组成一个逻辑数据库,那你MySQL你怎么给我分布式到n台机器的内存里面去? Oracle的Grid都办不到,不要说你可以办到。

0 请登录后投票
   发表时间:2008-01-23  
不看好,和常见的cache集群+mysql集群(主从复制)比没看出好处在哪里,反倒是给人以大一统的感觉,照这个思路,把web server也容纳到memcache中去岂不是更好。
0 请登录后投票
   发表时间:2008-01-23  
pufan 写道
不看好,和常见的cache集群+mysql集群(主从复制)比没看出好处在哪里,反倒是给人以大一统的感觉,照这个思路,把web server也容纳到memcache中去岂不是更好。


好处有两点:

1、远远超过数据库的高性能

其实这是废话,如果数据库IO性能够好的话,这个世界上就不会有DB Cache这种东西。比方说新浪博客每天上亿的点击量,而博客这东西很难动态页面静态化,你不上Cache Server试试看?

2、分布式

你见过Oracle Grid可以轻松的分布式的吗?他底层的数据库文件还是要单点存储的,但是memcachedb天然就是分布式的,你可以把他分布到几十台上百台服务器上面去。这个优势对于上亿的大负载网站的好处根本不用多说什么废话。
0 请登录后投票
   发表时间:2008-01-23  
应该说memcached赢在简单高效上,所以继续保持memcached的简单和高效是很重要地。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics