Система производителя/потребителя, использующая базу данных (MySql), осуществимо ли это?

StackOverflow https://stackoverflow.com/questions/2449172

Вопрос

мне нужно использовать что-нибудь координировать свою систему с несколькими потребителями/производителями, каждый из которых работает на разных машинах с разными операционными системами.Я изучал возможность использования MySql для этого, но это кажется смехотворно сложным.

Мои требования просты:Я хочу иметь возможность добавлять или удалять потребителей/производителей в любое время, чтобы они вообще не зависели друг от друга.Естественно, база данных будет прекрасно разделять эти два понятия.

Я искал плагин очереди сообщений Q4M для MySql, но он кажется сложным в использовании.

Мне действительно нужна информация о том, как лучше всего построить мою систему.

Это было полезно?

Решение

Мне нужно использовать что -то для координации моей системы с несколькими потребителями/производителями, каждый из которых работает на разных машинах с разными операционными системами

Это очередь сообщения. Не преследуйте другие альтернативы. Все остальное (т.е. использование базы данных с вставкой и удалением) ужасно медленное и громоздкое.

Создание большой, медленной очередей сообщений с базой данных часто оказывается плохо на практике, потому что (1) базы данных медленные, (2) базы данных огромны и сложны, (3) у вас есть проблемы с блокировкой и конфликтами, которые делают каждую транзакцию потенциально медленной, ((((3) проблемы с уточнением, которые делают каждую транзакцию потенциально медленной (((3). 4) Это намного больше накладных расходов, чем заслуживает проблема.

Есть многочисленные решения в очереди.

Если вы не можете сделать 4 -м кварталов работать, вы должны перейти к другому.

http://en.wikipedia.org/wiki/message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

Другие советы

На самом деле (довольно) сложно построить такую ​​систему.(Я говорю честно, потому что это, конечно, выполнимо).

Если у вас несколько продюсеров и один потребитель, это легко.Все производители пишут одновременно, а один потребитель читает данные, как только они становятся видимыми (фиксируются).

Но если вам нужна масштабируемость с несколько потребителя, вам нужно будет создать нетривиальную схему блокировки.(Вы должны гарантировать, что ни одна строка не будет отправлена ​​двум потребителям.Этого нелегко добиться с помощью транзакций и блокировок базы данных.Наивные решения приводят к сериализации доставки всех сообщений, как будто у вас есть только один потребитель, чего мы не хотим.).

Я бы предложил использовать встроенное решение.Вы также можете прочитать этот вопрос по поводу аналогичного вопроса.

Я думаю, что это осуществимо без стороннего программного обеспечения.

Мой первый дизайн выглядел так:

  • Производитель записывает данные в базу данных
  • Чтобы гарантировать согласованность, он должен использовать транзакции
  • Потребитель обрабатывает данные (чтение и удаление) также с использованием транзакций.

Из -за требования транзакций InnoDB является логическим выбором двигателя хранения. Также вы должны тщательно выбрать уровень изоляции. Мое первое предположение «сериализуемо», чтобы избежать фантомных чтений, но, возможно, более слабый уровень также возможен.

Если производительность и масштабируемость являются проблемой, вам следует рассмотреть возможность использования «реального» решения обмена сообщениями. Развертывание вашего, скорее всего, приведет к проблемам производительности и/или масштабируемости.

Это зависит от ситуаций.

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

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top