Как можно реализовать распределенную очередь -, подобную -, поверх RBDMS или хранилища данных NOSQL или другой системы обмена сообщениями (, например, rabbitmq )?

Из не будет -это -будет -круто -если категория вопросов...

Под "очередью -как -вещь" я имею в виду поддержку следующих операций:

  • добавить (запись :запись)-добавить запись в хвост очереди
  • взять ():запись -удалить запись из головы очереди и вернуть ее
  • продвигать (запись _идентификатор)-переместить запись на одну позицию ближе к голове; запись, которая в настоящее время занимает эту позицию, перемещается в старую позицию
  • понижение (запись _идентификатор)-противоположность продвижения (запись _идентификатор)

Необязательные операции могут быть чем-то вроде:

  • продвигать (запись _id, количество)-аналогично продвигать (запись _id ), только вы указываете количество позиций
  • понижать (запись _id, количество)-напротив продвижения (запись _id, сумма)
  • конечно,если мы позволим сумме быть положительной или отрицательной, мы можем объединить методы повышения/понижения с помощью одного перемещения (запись _идентификатор, сумма )метод

Было бы идеально, если бы можно было выполнять следующие операции в очереди распределенным образом (несколько клиентов, взаимодействующих с очередью):

queue =...

queue.append( a )
queue.append( b )
queue.append( c )

print queue
"a b c"

queue.promote( b.id )
print queue
"b a c"

queue.demote( a.id )
"b c a"

x = queue.take()
print x
"b"
print queue
"c a"

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

Если бы не требование повышения/понижения/перемещения, не было бы особых проблем.

Редактировать :Бонусные баллы, если есть библиотеки Java и/или Python для выполнения описанной выше задачи.

Решение должно очень хорошо масштабироваться.

7
задан Marcin 10 May 2012 в 08:00
поделиться