0

我正在構建一個允許用戶向其發佈消息的自定義CMS。消息很短,像推文一樣。在CMS上併發管理

問題是這些消息是由真正的版主來主持的。並且有多個主持人同時處理消息流。我擔心的是,如果這些主持人正在處理同樣的信息呢。這既低效又不一致。由於一個消息可以被一個主持人拒絕,然後由另一個主持人傳遞。

因此,我想建立某種機制,以便CMS可以將這些消息分發給不同版主並避免重複。 CMS期望在短時間內處理大量的信息。所以這個問題變得更加嚴重。

任何想法表示讚賞。乾杯。

回答

1

我會做這樣的:

  • 消息的每個登錄的主持人得到他自己的隊列,中度
  • 有將被用作buffert中央隊列
  • 發佈消息進入中央隊列
  • 每個主持人隊列一次獲取10條消息。
  • 當主持人隊列中只剩下5個時,隊列將自動獲取10條新消息。

缺點是你需要一個鎖定機制的中央隊列。如果你想避免甚至是鎖定我提出了兩種解決方案之一:

  1. 完全卸下中央隊列和發佈消息,即時到主持人隊列之一(也許randmoly選擇一個),或者,
  2. 有一箇中央隊列,讓每個主持人從隊列頂部選擇一個randmoly選擇的消息(例如,讓他們從前20名中選擇一個)。如果由於沒有鎖定而出現「雙重仲裁」,只需忽略第二次仲裁併接受時間浪費。
+0

偉大的思想家都認爲... – 2010-08-21 10:55:25

+0

謝謝你的想法埃米爾。 – TuanCM 2010-08-21 12:07:18

0

您可以在主持人之前讓主持人將消息從隊列中拉出。像退房一樣排序?所以主持人點擊一些分配給他們處理的消息的東西。他們處理這些問題,然後從隊列中取出另一批。

+0

是的,如果他們被抓住,然後沒有主持,將項目放回隊列。 – 2010-08-21 10:56:09

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或其他頁面。

+0

他誤解了實際的問題,我的建議阻止了適度的衝突,而不是爲你解決努力的分配,對不起! :) – keeran 2010-08-21 11:00:10

+0

謝謝Keeran,非常有用的資源。我一定會用它。 – TuanCM 2010-08-21 11:17:59