Параллельное модерирование на CMS - PullRequest
0 голосов
/ 21 августа 2010

Я создаю собственную CMS, которая позволяет пользователю публиковать на ней сообщения.Сообщения короткие и как твиты.

Проблема в том, что эти сообщения модерируются реальными модераторами.И есть несколько модераторов, работающих над потоком сообщений одновременно.И меня беспокоит то, что если эти модераторы обрабатывают одно и то же сообщение.Это неэффективно и противоречиво.Поскольку одно сообщение может быть отклонено одним модератором, а затем передано другим.

Поэтому я хочу создать какой-то механизм, чтобы CMS могла распространять эти сообщения другому модератору и избегать дублирования.CMS ожидает обработки большого объема сообщений в короткие сроки.Поэтому эта проблема становится более серьезной.

Любая идея ценится.Приветствия.

Ответы [ 3 ]

1 голос
/ 21 августа 2010

Я бы сделал это следующим образом:

  • Каждый вошедший в систему модератор получает свою очередь сообщений для модерирования
  • Существует центральная очередь, которая будет использоваться в качестве буфера
  • Отправленные сообщения попадают в центральную очередь
  • Каждая очередь модератора извлекает, скажем, 10 сообщений одновременно.
  • Когда в очереди модератора остается только 5, эта очередь будетавтоматически получать 10 новых сообщений.

Недостатком является то, что вам потребуется центральная очередь с механизмом блокировки.Если вы хотите избежать даже такой блокировки, я предлагаю одно из двух решений:

  1. Полностью удалить центральную очередь и публиковать сообщения на лету в одну из очередей модератора (возможно, случайное выбранное), или,
  2. Иметь центральную очередь и позволить каждому модератору иметь произвольно выбранное сообщение из верхней части очереди (например, пусть у него будет одно из топ-20).Если имеется «двойная модерация» из-за отсутствия блокировки, просто проигнорируйте вторую модерацию и примите потерю времени.
0 голосов
/ 21 августа 2010

Сделайте так, чтобы ваше действие обновления для Сообщений делало это

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

Проверьте http://railscasts.com/episodes/59-optimistic-locking или другие страницы о блокировке (оптимистично или иным образом) в Rails.

0 голосов
/ 21 августа 2010

Модераторы могут удалить сообщение из очереди перед модерацией. Вроде как проверить? Поэтому модератор щелкает что-то, что назначает им ряд сообщений для обработки. Они разбираются с ними, а затем забирают очередную партию из очереди.

...