|
|
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Задача сделать общую транзакцию. В программе идет запись в БД и файлов на диск. К примеру, есть 10 файлов, которые надо записать на диск и сделать запись информации о файлах в БД. Могут возникнуть исключения при записи файла на диск, при не соответствие файла шаблону, со стороны БД. Как это правильно организовать и как в случае необходимости сделать откат такой транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 16:55:59 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdm, алгоритм обычный - записал, проверил, откатил (удалил файлы). И перекрываешь любой доступ вне этой БЛ. Например из ОСи. А дальше ньансы) - спринг? Декларативные? Хибер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:05:26 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Если база локальная, хранить в блобах. Многие базы имеют специальные оптимизации для блобов, чтобы по эффективности не особо отличалось от файловой системы, с учетом расходов на транзакционность. Если база удаленная и блобы вообще не вариант, то нужен простейший JCA адаптер, чтобы участвовать в XA транзакции. Причем для файловой системы двухфазный комит не особо нужен. Обычного commit\rollback достаточно. А для JDBC почти все драйвера имеются в реализации XA. http://xadisk.java.net/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:07:06 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123rdm, алгоритм обычный - записал, проверил, откатил (удалил файлы). И перекрываешь любой доступ вне этой БЛ. Например из ОСи. А дальше ньансы) - спринг? Декларативные? Хибер? Spring, Hiber @Transactional для БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:10:32 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕсли база локальная, хранить в блобах. Многие базы имеют специальные оптимизации для блобов, чтобы по эффективности не особо отличалось от файловой системы, с учетом расходов на транзакционность. Если база удаленная и блобы вообще не вариант, то нужен простейший JCA адаптер, чтобы участвовать в XA транзакции. Причем для файловой системы двухфазный комит не особо нужен. Обычного commit\rollback достаточно. А для JDBC почти все драйвера имеются в реализации XA. http://xadisk.java.net/ Если БД на том же ПК, это локальная или удаленная?Говоря о локальной БД, вы говорите в смысле на том же ПК, или что она embeded? Блобы не хочу использовать, просто запись в ФС на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:13:07 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmSpring, Hiber @Transactional для БД. Если сервер не полноценный JEE контейнер, то нужно ещё подключить XA Transaction Manager. Можно взять atomicos. Если полноценный, то попробовать подъюзать такой из сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:13:41 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmЕсли БД на том же ПК, это локальная или удаленная?Говоря о локальной БД, вы говорите в смысле на том же ПК, или что она embeded? На том же ПК. Если база на другом, то можно отхватить в будущем проблемы с перегрузкой сети блобами. rdmБлобы не хочу использовать, просто запись в ФС на диск. Обдуманный обоснованый выбор. Добавить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:15:56 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Мне хотелось бы инструмент(надеюсь он уже есть), чтобы сделать запись нескольких файлов на диск ФС в стиле транзакции в БД. Т.е. либо все файлы успешно записываются, либо ни одного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:18:34 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmPetro123rdm, алгоритм обычный - записал, проверил, откатил (удалил файлы). И перекрываешь любой доступ вне этой БЛ. Например из ОСи. А дальше ньансы) - спринг? Декларативные? Хибер? Spring, Hiber @Transactional для БД. тогда - делаем класс УправляторФайлами, который если что возбуждает исключение имеет зеркальную процедуруОтката @меткаТранзакции БизнесТранзакция { ЗаписатьВ_БД ЗаписатьФайлы } - обрботка исключения (БД сама откатит) Если не руками, то выше написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:18:59 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczrdmБлобы не хочу использовать, просто запись в ФС на диск. Обдуманный обоснованый выбор. Добавить нечего. Ну да) Мне проще структуру каталогов и файлы смотреть через проводник) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:20:26 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmМне хотелось бы инструмент(надеюсь он уже есть), чтобы сделать запись нескольких файлов на диск ФС в стиле транзакции в БД. Т.е. либо все файлы успешно записываются, либо ни одного. оверхед или конфигуразм))). Там писать нечего. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:20:39 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123, как я понял вы про http://xadisk.java.net/ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:21:37 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmМне хотелось бы инструмент(надеюсь он уже есть), чтобы сделать запись нескольких файлов на диск ФС в стиле транзакции в БД. Т.е. либо все файлы успешно записываются, либо ни одного. Самописные транзакции это полумеры. Вот пример от Petro123 выше - создали файлы - ОК - - записали в базу - OK - - коммит в файловую систему - Exception - что мы делать будем с базой, куда мы уже закомитили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:23:16 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmТ.е. либо все файлы успешно записываются, либо ни одного.Ссылка на XADisk вам уже привели - чем не устроило? Есть ещё TrueZIP - тоже с версионностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:25:37 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЕсть ещё TrueZIP - тоже с версионностью атомарностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:27:01 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczrdmМне хотелось бы инструмент(надеюсь он уже есть), чтобы сделать запись нескольких файлов на диск ФС в стиле транзакции в БД. Т.е. либо все файлы успешно записываются, либо ни одного. Самописные транзакции это полумеры. Вот пример от Petro123 выше - создали файлы - ОК - - записали в базу - OK - - коммит в файловую систему - Exception - что мы делать будем с базой, куда мы уже закомитили? Видимо коммит должен быть внутри метода, чтобы при исключении rollback=MyWriteException откатил изменения в базе) Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:27:38 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ты прав, но БД всегда надёжнее, поэтому в неё просто ПОСЛЕ опасных транзакций. Это как снимать флаг отправки письма только полсе отправки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:28:32 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmВидимо коммит должен быть внутри метода ну, у нас же автоматом спринг). Так и дОлжно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:29:21 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123rdmМне хотелось бы инструмент(надеюсь он уже есть), чтобы сделать запись нескольких файлов на диск ФС в стиле транзакции в БД. Т.е. либо все файлы успешно записываются, либо ни одного. оверхед или конфигуразм))). Там писать нечего. imho Все равно что нужно будет, а так уже готовое решение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:30:39 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123ты прав, но БД всегда надёжнее, поэтому в неё просто ПОСЛЕ опасных транзакций. Это как снимать флаг отправки письма только полсе отправки. Нет термина "опасные транзакции". Есть XA транзакция и двухфазный комит в базу, в которую можно вклинится. Но для этого в любом случае нужен и транзакционный враппер для файловой системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:30:44 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmВидимо коммит должен быть внутри метода, чтобы при исключении rollback=MyWriteException откатил изменения в базе) Нет?Файлы могут записываться секундами-минутами - накойхер (фамилие такой) держать транзакцию дольше, чем это абсолютно необходимо? Поэтому - сначала записали файлы, потом (максимально быстро) отразили (конечное) состояние в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:31:14 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovrdmВидимо коммит должен быть внутри метода, чтобы при исключении rollback=MyWriteException откатил изменения в базе) Нет?Файлы могут записываться секундами-минутами - накойхер (фамилие такой) держать транзакцию дольше, чем это абсолютно необходимо? Поэтому - сначала записали файлы, потом (максимально быстро) отразили (конечное) состояние в базе. Тоже правда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:33:54 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovrdmВидимо коммит должен быть внутри метода, чтобы при исключении rollback=MyWriteException откатил изменения в базе) Нет?Файлы могут записываться секундами-минутами - накойхер (фамилие такой) держать транзакцию дольше, чем это абсолютно необходимо? Поэтому - сначала записали файлы, потом (максимально быстро) отразили (конечное) состояние в базе. Только как тогда откатить запись файлов, если исключение со стороны БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:39:51 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmТолько как тогда откатить запись файлов, если исключение со стороны БД. так же как записывал, только в обратную сторону: Setter\Getter Write \ Delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:41:57 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123rdmТолько как тогда откатить запись файлов, если исключение со стороны БД. так же как записывал, только в обратную сторону: Setter\Getter Write \ Delete Я чуть о другом. При использовании транзакции XADisk и декларативного подхода в Spring, нужно чтобы обе транзакции(БД и ФС) были в одном методе(ACID все дела). Таким образом транзакция в БД будет открытой долгое время при записи файлов на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:50:00 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38188404&tid=2129702]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 300ms |
| total: | 463ms |

| 0 / 0 |
