Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails CMS的并发调节_Ruby On Rails_Web Applications_Concurrency_Content Management System - Fatal编程技术网

Ruby on rails CMS的并发调节

Ruby on rails CMS的并发调节,ruby-on-rails,web-applications,concurrency,content-management-system,Ruby On Rails,Web Applications,Concurrency,Content Management System,我正在建立一个自定义的CMS,允许用户发布消息到它。信息很短,就像推特一样 问题是,这些消息是由真正的主持人主持的。并且有多个版主同时处理消息流。我担心的是,如果这些主持人正在处理同一条消息会怎么样。这既低效又不一致。因为一条消息可以被一个版主拒绝,然后被另一个版主传递 因此,我想建立某种机制,以便CMS可以将这些消息分发给不同的主持人,并避免重复。CMS希望在短时间内处理大量信息。因此,这个问题变得更加严重 任何想法都值得赞赏。干杯。我会这样做: 每个登录的主持人都会获得自己的消息队列以进行

我正在建立一个自定义的CMS,允许用户发布消息到它。信息很短,就像推特一样

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

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


任何想法都值得赞赏。干杯。

我会这样做:

  • 每个登录的主持人都会获得自己的消息队列以进行主持
  • 有一个中心队列将用作缓冲区
  • 已发布的消息进入中央队列
  • 每个版主队列一次获取10条消息
  • 当主持人队列中只剩下5条消息时,该队列将自动获取10条新消息
缺点是您需要一个带有锁定机制的中央队列。如果您想避免这种锁定,我建议两种解决方案之一:

  • 完全移除中心队列,并将消息动态发布到其中一个主持人队列(可能是randmoly选择的队列),或者
  • 有一个中央队列,让每个主持人从队列的顶部有一条randmoly选择的消息(例如,让他们从前20名中有一条)。如果由于缺少锁定而出现“双重调节”,只需忽略第二个调节,接受时间浪费

  • 您可以让版主在版主之前将消息从队列中删除。有点像退房?所以主持人点击一些东西,给他们分配一些要处理的消息。他们处理这些问题,然后从队列中再抓取一批

    让您的消息更新操作执行此操作

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

    查看Rails中关于“锁定”(乐观或其他)的页面。

    Yep,如果项目被抓取,然后没有被调节,则将其放回队列中。Heh误读了实际问题,我的建议防止了调节冲突,无法为您解决工作分配问题,抱歉!)谢谢Keeran,非常有用的资源。我一定会用的。