赞清风, 新浪的开源项目 Memcachedb

19 views
Skip to first unread message

Jiahua Huang

unread,
Jan 17, 2008, 9:30:02 PM1/17/08
to python. cn
转贴: http://blog.s135.com/read.php?320


[不指定 2008-1-10 08:45 | by 张宴 ]
  Memcachedb

  协议:New BSD License
  作者:stvchu, gary.caokai, forever.sky81
  团队:新浪互动社区事业部──博客产品
  网址:http://code.google.com/p/memcachedb/

  Memcachedb = memcache + Berkeley DB

  Memcachedb是一款支持高并发的分布式持久存储系统,对任何原有memcached客户端来讲,它仍旧是个memcached,但是,它的数据是可以持久存储的。
  前端:memcached的网络层
  后端:Berkeley DB存储

  写速度:从本地服务器通过memcache客户端(libmemcache) set 2亿条16字节长的key,10字节长的Value的记录,耗时16572秒,平均速度12000条记录/秒。
  读速度:从本地服务器通过memcache客户端(libmemcache) get 100万条16字节长的key,10字节长的Value的记录,耗时103秒,平均速度10000条记录/秒。

  • 支持的memcache命令
  get, set, add, replace
  incr, decr
  delete
  stats
  flush_all

  • 私有命令
  db_checkpoint, db_archive
  db_ismaster, db_whoismaster (for replication)

  编译及安装方法:
  http://blog.csdn.net/simonlsy/archive/2008/01/07/2027940.aspx

   点击在新窗口中浏览此图片

beck917

unread,
Jan 17, 2008, 9:32:30 PM1/17/08
to pyth...@googlegroups.com
赞一个~~

在08-1-18,Jiahua Huang <jhuang...@gmail.com> 写道:

清风

unread,
Jan 17, 2008, 9:54:17 PM1/17/08
to pyth...@googlegroups.com
别赞我阿。。。。。这不是我开发的。。。。是我们公司blog的同事开发的,stvchu应该也经常在列表活动,跟大家讲讲阿:)

2008/1/18 Jiahua Huang <jhuang...@gmail.com>:
>
> 转贴: http://blog.s135.com/read.php?320
>
>
> [ 2008-1-10 08:45 | by 张宴 ]

--
http://qingfeng.ushared.com/blog/

憨狗

unread,
Jan 17, 2008, 10:12:41 PM1/17/08
to pyth...@googlegroups.com
非常好的东西!
memcache用的比较多,没有持久化,还是在内存中,


看了memcachedb的介绍,比较侧重于持久化,不知道可不可以再做些介绍?
以bdb作为后端,看起来似乎是个数据库呢?

2008/1/18 Jiahua Huang <jhuang...@gmail.com>:
>
> 转贴: http://blog.s135.com/read.php?320
>
>

> [ 2008-1-10 08:45 | by 张宴 ]

--
关注LAMP平台、安全、及web开发的个人blog: http://hackgou.itbbq.com
PGP KeyID: hackgou#Gmail.com
PGP KeyServ: subkeys.pgp.net

Jiahua Huang

unread,
Jan 17, 2008, 10:19:56 PM1/17/08
to pyth...@googlegroups.com
那,召唤 stvchu ~~

2008/1/18 清风 <paradise...@gmail.com>:


> 别赞我阿。。。。。这不是我开发的。。。。是我们公司blog的同事开发的,stvchu应该也经常在列表活动,跟大家讲讲阿:)
>

huahua@huahua:memcachedb-0.1.0$ bzr diff
=== modified file 'Makefile'
--- Makefile 2008-01-18 03:07:09 +0000
+++ Makefile 2008-01-18 03:13:08 +0000
@@ -2,11 +2,11 @@
# $Id: Makefile 11833 2007-09-06 10:56:02Z steve $

LIBS=-ldb -levent
-DBLIBPATH=/usr/local/BerkeleyDB.4.6/lib
-DBINCPATH=/usr/local/BerkeleyDB.4.6/include
+DBLIBPATH=/usr/lib
+DBINCPATH=/usr/include

-LDFLAGS= -L/usr/local/lib/ -L${DBLIBPATH}
-CFLAGS =-Wall -O2 -I/usr/local/include -I${DBINCPATH}
+LDFLAGS= -L/usr/lib/ -L${DBLIBPATH}
+CFLAGS =-Wall -O2 -I/usr/include -I${DBINCPATH}

all:
cc -o memcachedb memcachedb.c ${LDFLAGS} ${CFLAGS} ${LIBS}

=== modified file 'memcachedb.h'
--- memcachedb.h 2008-01-18 03:07:09 +0000
+++ memcachedb.h 2008-01-18 03:10:06 +0000
@@ -60,8 +60,8 @@
extern struct stats stats;
extern struct settings settings;

-#define END_LEN 32
-#define END_LEN_STR "31"
+#define END_LEN 1024000
+#define END_LEN_STR "32"

typedef struct _stritem {
int nbytes; /* size of data */

EricSheng

unread,
Jan 17, 2008, 10:33:04 PM1/17/08
to python-cn:CPyUG
memcachedb 好象只有Steve Chu一个人在做吧.
ncache 是水洋和几个人,另外几个人我不太认识.

非常看好memcachedb的复制功能,可以把memcache做一个集群来使.



On 1月18日, 上午11时19分, "Jiahua Huang" <jhuangjia...@gmail.com> wrote:
> 那,召唤 stvchu ~~
>
> 2008/1/18 清风 <paradise.qingf...@gmail.com>:

Jiahua Huang

unread,
Jan 17, 2008, 10:35:18 PM1/17/08
to pyth...@googlegroups.com
能不能加上 keys 和 has_key 命令呢,
好作为数据库来用

2008/1/18 EricSheng <sheng...@gmail.com>:

Qiangning Hong

unread,
Jan 18, 2008, 12:09:09 AM1/18/08
to pyth...@googlegroups.com
2008/1/18 Jiahua Huang <jhuang...@gmail.com>:

>   Memcachedb
>
>   协议:New BSD License
>   作者:stvchu, gary.caokai, forever.sky81
>   团队:新浪互动社区事业部──博客产品
>   网址:http://code.google.com/p/memcachedb/
>
>   Memcachedb = memcache + Berkeley DB

原来是国人开发的啊,太好了。前一段时间在memcache邮件列表看见的时候就很感兴趣,现在沟通更方便了 :)

我有一个问题,当服务器列表发生变化时(比如新增或者去除一台服务器),客户端对某个特定的key选择的server会发生变化,这时如何保证还能访问到之前存储的数据?memcache由于是cache,所以无所谓,miss了再去数据库select出来,但memachedb本身就是数据库啊?

--
Qiangning Hong
http://www.douban.com/people/hongqn/

Brightman

unread,
Jan 18, 2008, 12:36:06 AM1/18/08
to pyth...@googlegroups.com
问一下:
1、作测试的机器配置?
2. memcachedb 使用cache没有?
3. 为什么选择berkeley DB 而不是mysql 或者自己做一个字典 或者?

Jiahua Huang 写道:
> 转贴: http://blog.s135.com/read.php?320
>
>
> [不指定 2008-1-10 08:45 | by 张宴
> <http://blog.s135.com/view.php?go=user_2> ]
>   *Memcachedb*
>
>   协议:New BSD License
> <http://www.opensource.org/licenses/bsd-license.php>


>   作者:stvchu, gary.caokai, forever.sky81
>   团队:新浪互动社区事业部──博客产品
>   网址:http://code.google.com/p/memcachedb/
>
>   Memcachedb = memcache + Berkeley DB
>
>   Memcachedb是一款支持高并发的分布式持久存储系统,对任何原有
> memcached客户端来讲,它仍旧是个memcached,但是,它的数据是可以持久存储
> 的。
>   前端:memcached的网络层
>   后端:Berkeley DB存储
>
>   写速度:从本地服务器通过memcache客户端(libmemcache) set 2亿条16
> 字节长的key,10字节长的Value的记录,耗时16572秒,平均速度12000条记录/秒。
>   读速度:从本地服务器通过memcache客户端(libmemcache) get 100万条
> 16字节长的key,10字节长的Value的记录,耗时103秒,平均速度10000条记录/秒。
>
>   • 支持的memcache命令
>   get, set, add, replace
>   incr, decr
>   delete
>   stats
>   flush_all
>
>   • 私有命令
>   db_checkpoint, db_archive
>   db_ismaster, db_whoismaster (for replication)
>
>   编译及安装方法:
>   http://blog.csdn.net/simonlsy/archive/2008/01/07/2027940.aspx
>

>    点击在新窗口中浏览此图片
> <http://blog.s135.com/attachment/200801/memcachedb.jpg>
>
> >

Daniel Lv

unread,
Jan 18, 2008, 12:53:57 AM1/18/08
to pyth...@googlegroups.com
外行问一句:如果memcachedb足够灵活强大,还有必要后端数据库么?

2008/1/18 Brightman <mr.bri...@gmail.com>:

Mingxi Wu

unread,
Jan 19, 2008, 6:08:19 AM1/19/08
to pyth...@googlegroups.com
看了楼上这么多褒奖,我来泼点冷水。

分两头说,一方面sina能把一些成果开源,这个思路是要赞的,
但是,同时,我看到了不少浮躁。

下载了源码,略微看了一下:一个不到2000行的小工具。
难不成是我下错了?  http://memcachedb.googlecode.com/files/memcachedb-0.1.0.tar.gz
看了大家的评论,Memcachedb是一款实用的工具,但是我始终很难把这么一个小工具与 http://blog.csdn.net/simonlsy/archive/2008/01/06/2027321.aspx
提到的"新浪互动社区技术团队2007年的一项重大的技术成果"联系起来。

再看一下ncache,
PPT里宣传的是很好,性能比SQUID高了N倍。问题是ncache是基于nginx的,那么,ncache到底比nginx有多少改进呢?我稍微比较了ncache 1.2 http://ncache.googlecode.com/files/ncache-1.2.tar.gz
和nginx 0.5.35 http://sysoev.ru/nginx/nginx-0.5.35.tar.gz 的代码。
我看到的是:代码绝大部分是相同,ncache的改动不会超过3000行,而nginx有接近90000行的规模。



Eric Sheng

unread,
Jan 19, 2008, 6:18:12 AM1/19/08
to pyth...@googlegroups.com
memcachedb 是一套基础组件,就象我们做网站apache是少不了的,假如没有apache ,我们会出现啥情况?
memcachedb 的一些用途楼上可能没涉及到,以点击数为例,用这个加上一个apache模块,两台机器就可以顶住所有新浪博客的点击数计数任务(这是几个月前的情况,现在不知道他们是否增加机器),假如用传统的apache+php,那不知道要多少机器了. 所以,小工具的价值必须在合适的地方使用才能体现出来.
memcached 同样也是只有几个源代码文件,所以,源代码有多少不能说明问题.
 
据我所了解 ncache 是一个nginx的组件吧.我拿到的资料也是这个PPT,上次内部交流会,我没有去.所以也不太了解.


 
在08-1-19,Mingxi Wu <feng...@gmail.com> 写道:

Eric Sheng

unread,
Jan 19, 2008, 6:33:38 AM1/19/08
to pyth...@googlegroups.com
memcached 有一个很大的问题,就是万一倒掉,所有cache必须重要生成.
如果cache的数据量很大,那memcached重启后把后台数据库压倒是轻而易举的事情.
 
memcachedb 我觉得做几个很重要的事情,
1 万一memcachedb倒了,那直接重启就OK了,不会影响cache层后面的所有机器.
2 memcachedb现在可以复制,就象mysql的主从功能,万一一台memcachedb倒了,那还有另一台继续可以用.而且两台可以做负载均衡.
3 正因为memcachedb有主从功能,所以,可以尽量减少由于负载而做的cache层数据拆分,也就是不用把不同的数据按一定算法放到不同的memcached机器上. 这样做有一个好处,就是尽量避免在一个程序中读取多台memcached里的数据,负载高的应用,这里的消耗不会很小,而且程序编写也复杂. 如果网站数据量不是特别大的话,4G内存空间+硬盘完全可以缓存所有数据.
4 memcachedb可以提高用户提交数据的保存速度.因为你写进去memcachedb后,数据是不会因为进程或机器倒掉而丢失的,所以,你完全可以把它作为一个在写数据库之前缓冲数据的容器,隔一定时间再把数据统一写到数据库中.用户提交的数据写到内存总比写到数据库快吧!?


 
在08-1-18,Daniel Lv <lgn...@gmail.com> 写道:

Jiahua Huang

unread,
Jan 19, 2008, 6:46:55 AM1/19/08
to pyth...@googlegroups.com
这位朋友真读了 memcachedb 么?

或者,以前没看过 memcache 和 bsddb ?

2008/1/19 Eric Sheng <sheng...@gmail.com>:
> memcached 有一个很大的问题,就是万一倒掉,所有cache必须重要生成.
> 如果cache的数据量很大,那memcached重启后把后台数据库压倒是轻而易举的事情.
>

Eric Sheng

unread,
Jan 19, 2008, 6:51:33 AM1/19/08
to pyth...@googlegroups.com
说实话我没读过源代码. 以上言论仅是我对这两个东西的理解.
我的理解不一定正确!仅作参考!

 
在08-1-19,Jiahua Huang <jhuang...@gmail.com> 写道:

Jiahua Huang

unread,
Jan 19, 2008, 7:08:11 AM1/19/08
to pyth...@googlegroups.com
memcache 跟 memcachedb 是两个东西,

memcache 是个分布式内存缓冲系统,
标准的 memcache 客户端是简单将键值推到按算法选定的 memcached 服务器,
memcached 并不做任何复制和同步,一个键值只会在一个 memcached 服务器上。

标准的 memcached 只将键值保存在内存了,
新浪的 memcachedb 是将后端改为 bsddb 磁盘哈希

2008/1/19 Eric Sheng <sheng...@gmail.com>:
> 说实话我没读过源代码. 以上言论仅是我对这两个东西的理解.
> 我的理解不一定正确!仅作参考!
>

Eric Sheng

unread,
Jan 19, 2008, 7:19:28 AM1/19/08
to pyth...@googlegroups.com
我觉得我写的没啥问题。我指的复制功能是指memcachedb已经实现,memcached没有这个功能。
 
再说一点:memcachedb为什么用bsddb,是因为bdb有一套与memcached相似性能的内存管理体系。事实上,memcachedb除网络模块仍用memcached的外,其余的部分如内存管理啥的都换成bdb来实现了。

 
在08-1-19,Jiahua Huang <jhuang...@gmail.com> 写道:
memcache 跟  memcachedb 是两个东西,



--
==========================================================
QQ:14163398
MSN:webm...@dpspace.com
GTalk: sheng...@gmail.com
Mail:sheng...@gmail.com
UCD知识体系:http://www.sinabeta.com/wiki/
开源UCD设计工具: http://www.sinabeta.com/wiki/index.php/UCDPower
==========================================================

Jiahua Huang

unread,
Jan 19, 2008, 7:26:46 AM1/19/08
to pyth...@googlegroups.com
嗯,

还没在高并发的时候比较 memcached 和 memcachedb 的性能

2008/1/19 Eric Sheng <sheng...@gmail.com>:

Eric Sheng

unread,
Jan 19, 2008, 7:31:35 AM1/19/08
to pyth...@googlegroups.com
性能没啥问题,新浪自已就在用。

在08-1-19,Jiahua Huang <jhuang...@gmail.com> 写道:
嗯,

Jiahua Huang

unread,
Jan 19, 2008, 7:32:40 AM1/19/08
to pyth...@googlegroups.com
我是说跟 memcached 相比,
多了磁盘 io

2008/1/19 Eric Sheng <sheng...@gmail.com>:
> 性能没啥问题,新浪自已就在用。
>
>

stvchu

unread,
Jan 21, 2008, 10:10:00 PM1/21/08
to python-cn:CPyUG
memcachedb和memcached一样,作为一个架构组件而存在,保持KISS原则,数据的partition通过应用层来做,你可以用
consistent hash, dht或者用master存metadata,这在你构建memcachedb集群的时候需要考虑。

On Jan 18, 1:09 pm, "Qiangning Hong" <hon...@gmail.com> wrote:
> 2008/1/18 Jiahua Huang <jhuangjia...@gmail.com>:
>
> >   Memcachedb
>
> >   协议:New BSD License
> >   作者:stvchu, gary.caokai, forever.sky81
> >   团队:新浪互动社区事业部──博客产品
> >   网址:http://code.google.com/p/memcachedb/
>
> >   Memcachedb= memcache + Berkeley DB

stvchu

unread,
Jan 21, 2008, 10:13:45 PM1/21/08
to python-cn:CPyUG
On Jan 18, 1:36 pm, Brightman <mr.bright...@gmail.com> wrote:
> 问一下:
> 1、作测试的机器配置?
Dell 2850
> 2.memcachedb使用cache没有?
BerkeleyDB自己的Mem Pool

> 3. 为什么选择berkeley DB 而不是mysql 或者自己做一个字典 或者?
mysql的高并发和性能一直是个问题,有关系层,性能只能是个折中,对简单格式,高响应的数据存储成本高
>
> Jiahua Huang 写道:
>
> > 转贴:http://blog.s135.com/read.php?320
>
> > [不指定 2008-1-10 08:45 | by 张宴
> > <http://blog.s135.com/view.php?go=user_2> ]
> >   *Memcachedb*
>
> >   协议:New BSD License
> > <http://www.opensource.org/licenses/bsd-license.php>
> >   作者:stvchu, gary.caokai, forever.sky81
> >   团队:新浪互动社区事业部──博客产品
> >   网址:http://code.google.com/p/memcachedb/
>
> >   Memcachedb= memcache + Berkeley DB
>
> >   Memcachedb是一款支持高并发的分布式持久存储系统,对任何原有
> > memcached客户端来讲,它仍旧是个memcached,但是,它的数据是可以持久存储
> > 的。
> >   前端:memcached的网络层
> >   后端:Berkeley DB存储
>
> >   写速度:从本地服务器通过memcache客户端(libmemcache) set 2亿条16
> > 字节长的key,10字节长的Value的记录,耗时16572秒,平均速度12000条记录/秒。
> >   读速度:从本地服务器通过memcache客户端(libmemcache) get 100万条
> > 16字节长的key,10字节长的Value的记录,耗时103秒,平均速度10000条记录/秒。
>
> >   * 支持的memcache命令
> >   get, set, add, replace
> >   incr, decr
> >   delete
> >   stats
> >   flush_all
>
> >   * 私有命令

Jiahua Huang

unread,
Jan 21, 2008, 10:33:05 PM1/21/08
to pyth...@googlegroups.com
赞, 传说中的 stvchu 出现啦


2008/1/22 stvchu <stv...@gmail.com>:
> memcachedb 和 memcached一样,作为一个架构组件而存在,保持 KISS原 则,数据的 partition 通过应用层来做,你可以用
> consistent hash, dht 或者用 master 存 metadata,这在你构建 memcachedb 集群的时候需要考虑。

Jiahua Huang

unread,
Jan 21, 2008, 11:53:16 PM1/21/08
to pyth...@googlegroups.com
能不能给加上 memcached 的超时呢

2008/1/22 stvchu <stv...@gmail.com>:

stvchu

unread,
Jan 22, 2008, 1:42:30 AM1/22/08
to python-cn:CPyUG


On Jan 18, 1:53 pm, "Daniel Lv" <lgn2...@gmail.com> wrote:
> 外行问一句:如果memcachedb足够灵活强大,还有必要后端数据库么?

Memcachedb适合于高并发,读写要求高,但数据结构单一的数据。
MySQL有自己的优势(关系型)。应用场景不一样。

>
> 2008/1/18 Brightman <mr.bright...@gmail.com>:
>
> > 问一下:
> > 1、作测试的机器配置?
> > 2. memcachedb 使用cache没有?
> > 3. 为什么选择berkeley DB 而不是mysql 或者自己做一个字典 或者?
>
> > Jiahua Huang 写道:
> > > 转贴:http://blog.s135.com/read.php?320
>
> > > [不指定 2008-1-10 08:45 | by 张宴
> > > <http://blog.s135.com/view.php?go=user_2> ]
> > > *Memcachedb*
>
> > > 协议:New BSD License
> > > <http://www.opensource.org/licenses/bsd-license.php>
> > > 作者:stvchu, gary.caokai, forever.sky81
> > > 团队:新浪互动社区事业部──博客产品
> > > 网址:http://code.google.com/p/memcachedb/
>
> > > Memcachedb = memcache + Berkeley DB
>
> > > Memcachedb是一款支持高并发的分布式持久存储系统,对任何原有
> > > memcached客户端来讲,它仍旧是个memcached,但是,它的数据是可以持久存储
> > > 的。
> > > 前端:memcached的网络层
> > > 后端:Berkeley DB存储
>
> > > 写速度:从本地服务器通过memcache客户端(libmemcache) set 2亿条16
> > > 字节长的key,10字节长的Value的记录,耗时16572秒,平均速度12000条记录/秒。
> > > 读速度:从本地服务器通过memcache客户端(libmemcache) get 100万条
> > > 16字节长的key,10字节长的Value的记录,耗时103秒,平均速度10000条记录/秒。
>
> > > * 支持的memcache命令
> > > get, set, add, replace
> > > incr, decr
> > > delete
> > > stats
> > > flush_all
>
> > > * 私有命令

stvchu

unread,
Jan 22, 2008, 1:43:28 AM1/22/08
to python-cn:CPyUG
实用制胜,保持KISS。

On Jan 19, 7:08 pm, "Mingxi Wu" <fengsh...@gmail.com> wrote:
> 看了楼上这么多褒奖,我来泼点冷水。
>
> 分两头说,一方面sina能把一些成果开源,这个思路是要赞的,
> 但是,同时,我看到了不少浮躁。
>
> 下载了源码,略微看了一下:一个不到2000行的小工具。
> 难不成是我下错了? http://memcachedb.googlecode.com/files/memcachedb-0.1.0.tar.gz
> 看了大家的评论,Memcachedb是一款实用的工具,但是我始终很难把这么一个小工具与http://blog.csdn.net/simonlsy/archive/2008/01/06/2027321.aspx

stvchu

unread,
Jan 22, 2008, 1:46:41 AM1/22/08
to python-cn:CPyUG
memcachedb是做存储用的,为什么要有过期时间呢?

Jiahua Huang

unread,
Jan 22, 2008, 2:06:15 AM1/22/08
to pyth...@googlegroups.com
memcached 存储 session 之类的时候可以利用过期时间来做简化处理,
但是 memcached 重启后所有 cache 必须重新生成, 有可能压垮 数据库,

所以可能想用 memcachedb 直接代替 memcached 做缓存,

但是原先以来 memcached 过期的程序就会不动了

2008/1/22 stvchu <stv...@gmail.com>:
> memcachedb是做存储用的,为什么要有过期时间呢?
>

stvchu

unread,
Jan 22, 2008, 2:33:19 AM1/22/08
to python-cn:CPyUG
大家有更多关于memcachedb的问题可以在英文邮件列表(http://groups.google.com/group/
memcachedb)里面讨论,为了方便和国外用户沟通和分享问题,建议大家都用英文,如果想用中文,那么就直接给我发邮件吧:)

Mingxi Wu

unread,
Jan 22, 2008, 2:40:06 AM1/22/08
to pyth...@googlegroups.com
这个项目欢迎非sina人员加入么?

在08-1-22,stvchu <stv...@gmail.com> 写道:

Albert Lee

unread,
Jan 22, 2008, 10:09:09 PM1/22/08
to pyth...@googlegroups.com
看来正好能解决我们现在遇到的问题!
不错不错
Reply all
Reply to author
Forward
0 new messages