在CMS上同时进行审核

时间:2010-08-21 10:40:27

标签: ruby-on-rails web-applications concurrency content-management-system

我正在构建一个自定义CMS,允许用户向其发布消息。消息很短,就像推文一样。

问题是这些消息是由真正的主持人主持的。并且有多个主持人同时处理消息流。我担心的是,如果这些主持人正在处理相同的消息。这既低效又不一致。由于一个主持人可以拒绝一条消息,然后另一条消息传递。

因此,我想构建某种机制,以便CMS可以将这些消息分发给不同的主持人并避免重复。 CMS期望在短时间内处理大量消息。因此这个问题变得更加严重。

任何想法都表示赞赏。欢呼声。

3 个答案:

答案 0 :(得分:1)

我会这样做:

  • 每位登录版主都会获得自己的消息队列以适度
  • 有一个中央队列,将用作缓冲
  • 已发布消息进入中央队列
  • 每个主持人队列一次提取10条消息。
  • 当主持人队列中只剩下5个队列时,该队列将自动获取10条新消息。

缺点是你需要一个带锁定机制的中央队列。如果你想避免这种锁定,我建议采用以下两种解决方案之一:

  1. 完全删除中央队列并即时将消息发布到其中一个主持人队列(可能是一个randmoly选择的队列),或者,
  2. 拥有一个中央队列,并让每个主持人从队列的顶部有一个randmoly选择的消息(例如,让他们从前20名中有一个)。如果由于没有锁定而存在“双重审核”,则忽略第二次审核并接受时间浪费。

答案 1 :(得分:0)

您可以让主持人在审核之前将消息从队列中拉出来。有点像退房吗?因此,主持人点击了一些内容,为他们分配了许多要处理的消息。他们处理那些,然后从队列中抓取另一批。

答案 2 :(得分:0)

对“消息执行此操作”进行更新操作

def update
  # perform regular update stuff ;)
rescue ActiveRecord::StaleObjectError
  flash[:message] = "Someone else has updated this message"
  redirect_to message_path(@message)
end

在Rails中查看http://railscasts.com/episodes/59-optimistic-locking或其他关于'锁定'(乐观或其他)的页面。