/ / Виробник - споживач, що використовує MySQL DB - java, mysql, sql, алгоритм, дизайн

Виробник - споживач, що використовує MySQL DB - java, mysql, sql, алгоритм, дизайн

Моя вимога така

  • Підтримуйте пул записів у таблиці (MySQL DB).
  • Робота виконує роль виробника і заповнює цей пул, якщо кількість записів перевищує певний поріг. Робота працює кожні 15 хвилин.
  • У кожного споживача може бути декілька споживачів, які збирають лише один запис кожного. Двоє споживачів, які приходять одночасно, повинні отримати два різні записи.
  • Виробник не повинен блокувати споживача. Тож, поки робота виробника працює, споживачі повинні мати можливість підібрати будь-які наявні рядки.

Виробник / споживач є частиною коду програми, який, в свою чергу, є додатком JBoss.

Для того щоб переконатися, що кожен споживач вибирає чіткий запис (у випадку одночасності), ми робимо наступне

  • Ми використовуємо цілий стовпець як індекс.
  • Споживач спочатку оновить запис із найнижчим значенням індексу своїм власним іменем.
  • Потім він вибере та підбере цей запис і продовжить це.
  • Цей підхід гарантує, що двоє споживачів не закінчуються одним і тим же записом.

Одна з проблем, яку ми бачимо, що коливиробник заповнює басейн, споживачів блокують. Оскільки виробник може зайняти деякий час, щоб завершити, всі споживачі в цей період блокуються, оскільки оновлення споживачем чекає, коли виробник вставить його.

Чи є спосіб вирішити цей сценарій? Будь-який інший підхід до дизайну цього також вітається.

Відповіді:

1 для відповіді № 1

Це важка вимога, яку ви використовуєтереляційна база даних як черга? Це здається поганим підходом до проблеми, тим більше, що проблеми вирішувались чергами повідомлень. Ви можете використовувати MySQL для збереження стану вашої черги, але це не зможе зробити хорошу чергу самостійно.

Погляньте на ActiveMQ або JBoss Messaging (враховуючи, що ви використовуєте JBoss)