队列实现的一些问题(scalable, persistent)

Persistent Queue的实现方式:

1)Berkeley DB,一个基于文件的高效的key-value store。需要一个从key-value 存取系统到 FIFO存取系统的转换。维护一个自增的Long型的key,队头就是最小的key,队尾就是最大的key。

2)paged file。队列由一系列文件或者块组成,只有第一个块和最后一个块是hot的,需要map到memory里


队头:第一个块 :offset

队尾:最后一个块 :offset

Enqueue:从最后一个块的offset处写,如果offset达到块大小,另起一个新块

Dequeue:从第一个块的offset处读,如果offfset到达第一块末尾,删除当前块,读入下一个块,offset置为0,继续读

并发:一般情况,dequeue和enqueue是不同的块,不需要互斥, 当然enqueue之间需要互斥。队列只有一个块的情况下,退化成数组队列。


分布式扩展:

1)类似merge k sorted list那样,可以配多个队列,进队的时候round robbin或者随机,出队的时候比较k个队列的队头时间戳(序列号),选最小,或者也round robbin,和入队的顺序一样,这样就把一个逻辑队列分部到多台机器上。

2)message 是有key的,按key就映射到不同server上的queue


http://bulldog2011.github.io/blog/2013/03/27/the-architecture-and-design-of-a-pub-sub-messaging-system/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值