好大的风

2010年07月1日

2009年3月2日发表于新浪开发者博客:系统开发部内部交流-MemcacheDB的扩展应用

Filed under: 你要去哪里 — 好大的风 @ 11:15 上午

本文通过整理系统开发部一次内部交流的资料,总结了一下SPACE产品开发初期形成的一些MemcacheDB的衍生应用。业务需求是千变万化的,我们需要灵活的运用这些基础设施,简单高效的达到我们的目标。

《原有PPT截图丢失》

以下是针对 MemcacheDB-Queue的技术实现的一些文字简介:
memcachedb-queue 设计与实现

0,基于memcachedb的代码,memcachedb为单进程单线程程序,所以全局变量不须任何锁操作。

1,增加两个全局变量:head和tail,类型为unsigned long。
用于表示头节点和尾节点所对应的key值。

2,精简memcache协议,只支持add和get两个命令,add表示入队列,get表示出队列。
此时add和get的key参数和expire参数已经无实际意义,用途仅为协议兼容。

3,增加一个init_queue函数,用于初始化head和tail的值,默认从db中取得,如果没有,则都为0。

4,增加一个save_queue函数,并通过atexit注册,在程序退出时负责将head和tail的值保存到db中。

5,add的实现伪代码:
key=tail;
save_to_db(key,value);
tail++;

6,get的实现伪代码:
key=head;
get_from_db(key,&value);
del_db(key);
head++;

具体实现参见 memcachedb-queue.c
目前经过几天的测试,基本实现目标。
计划用于纸条箱的发纸条队列,还有其他的一些模型类似“生产者/消费者”的程序。

本次交流已经年代久远,其中很多观点和技术以现在的眼光来看,已经显得有些落伍,我目前正在筹划新的一版队列系统的设计与实现,队列是很有用的基础组件之一,值得深入的研究。完成之后,会在博客上与大家分享,敬请期待!

评论暂缺 »

还没有任何评论。

这篇文章上的评论的 RSS feed TrackBack URL

留下评论

Powered by WordPress