Есть ли хорошие примеры для распределенного программного обеспечения и одной базы данных для этой проблемы? - PullRequest
1 голос
/ 15 ноября 2010

Я ищу ответ высокого уровня, но вот некоторые особенности, если это помогает, я развертываю приложение J2EE в кластере в WebLogic. На сервере есть одна база данных Oracle.

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

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

Предположим, у меня было 2 запущенных экземпляра приложения. Каждый из экземпляров собирается вставить 1000 строк. Даже если есть только 1 дубликат, одному экземпляру придется выполнить откат и вставить строки одну за другой.

Я легко вижу, что в этом случае было бы разумнее повторно вставить неконфликтующие строки 999 в виде пакета, но что если бы у меня было 3 запущенных приложения и 999 строк также имели возможность дублирования?

Итак, у меня такой вопрос: есть ли шаблон проектирования для такой ситуации?

Это длинный вопрос, поэтому, пожалуйста, дайте мне знать, где уточнить. Спасибо за ваше время.

EDIT: 1000 строк данных находятся в памяти для каждого экземпляра, но они не могут видеть строки друг друга. Единственный способ узнать, является ли строка дубликатом, - это вставить ее в базу данных.

И если нынешний дизайн приложения не имеет смысла, смело предлагайте лучшие способы решения этой проблемы. Я был бы очень признателен.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010
1 голос
/ 15 ноября 2010

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

...