Транзакции с шаблоном интеграции стиля Drop Box - PullRequest
0 голосов
/ 05 мая 2011

В настоящее время я сталкиваюсь с проблемой, пытаясь спроектировать надежное решение, используя шаблон интеграции стиля выпадающего списка. Файлы поступают в папку в файловой системе, и я должен поместить содержимое в базу данных Oracle. Проблема заключается в том, что транзакция завершается, а затем файл перемещается в другую папку, чтобы указать, что обработка завершена. Предположим, что процесс был прерван между моментом фиксации и перемещением файла. После перезапуска процесса содержимое файла будет снова вставлено в базу данных, что приведет к дублированию данных. Я чувствую, что есть несколько подходов, чтобы сделать надежное решение, но я не уверен, какой выбрать. Я прочитал статью Пэт Хелланд Жизнь за пределами распределенных транзакций: мнение отступника , но теперь я сталкиваюсь с практическими проблемами реализации.

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

  2. Я мог бы сделать какую-то распределенную транзакцию, используя файловую систему и базу данных. Я мог бы привязать перемещение файла к той же транзакции, что и фиксация базы данных. Я использую Java, и я знаю о распределенных транзакциях (XAResource), но я никогда не использовал их. Это решение может включать в себя использование Транзакционный файловый ввод / вывод JBoss , хотя существует несколько альтернатив. XADisk - это еще одна готовая библиотека, которая может делать подобное.

  3. Я мог бы использовать другую альтернативу, о которой я не думал.

Есть предложения?

1 Ответ

1 голос
/ 29 июля 2011

Если вам захочется перейти на XA, вы можете попробовать XADisk . Я принимал активное участие в проекте XADisk, и есть несколько реальных проектов, которые решили проблему согласованности файловой базы данных <->, аналогично тому, что вы написали, используя XADisk.

Полагаю, вы найдете XA простым, по крайней мере, с точки зрения разработчика приложений, которому не нужно писать менеджер транзакций для XA.

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

Нитин (@XADisk)

...