Я ищу ответ высокого уровня, но вот некоторые особенности, если это помогает, я развертываю приложение J2EE в кластере в WebLogic. На сервере есть одна база данных Oracle.
Нормальный поток приложения составляет
- пользователи подают данные (для вставки в виде строк) в приложение
- приложение ожидает получения данных определенного размера и выполняет пакетную вставку в базу данных (только 1 коммит)
В базе данных есть ограничение, препятствующее «дублированию» вставки данных. Если приложение получает нарушение ограничения, оно должно будет выполнить откат и заново вставить одну строку за раз, чтобы дублированные строки можно было «переименовать» и вставить.
Предположим, у меня было 2 запущенных экземпляра приложения. Каждый из экземпляров собирается вставить 1000 строк. Даже если есть только 1 дубликат, одному экземпляру придется выполнить откат и вставить строки одну за другой.
Я легко вижу, что в этом случае было бы разумнее повторно вставить неконфликтующие строки 999 в виде пакета, но что если бы у меня было 3 запущенных приложения и 999 строк также имели возможность дублирования?
Итак, у меня такой вопрос: есть ли шаблон проектирования для такой ситуации?
Это длинный вопрос, поэтому, пожалуйста, дайте мне знать, где уточнить. Спасибо за ваше время.
EDIT:
1000 строк данных находятся в памяти для каждого экземпляра, но они не могут видеть строки друг друга. Единственный способ узнать, является ли строка дубликатом, - это вставить ее в базу данных.
И если нынешний дизайн приложения не имеет смысла, смело предлагайте лучшие способы решения этой проблемы. Я был бы очень признателен.