|
|
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmЯ чуть о другом. При использовании транзакции XADisk и декларативного подхода в Spring, нужно чтобы обе транзакции(БД и ФС) были в одном методе(ACID все дела). Таким образом транзакция в БД будет открытой долгое время при записи файлов на диск. Непосредственно создать файл можно попробовать не транзакционно. А потом перенести в рамках транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:54:21 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdm, 1. У тебя видео файлы, что ты БД жалеешь?. Всегда надо чем-то жертвовать во имя простоты (с) 2. Там наверняка есть эмуляция транзакции чтобы обойти эту проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:55:12 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, +1 ну, ручная транзакция в пределах класса СВОЕГО. Всё равно try писать и райзе могут быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:56:51 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Попробую XADisk и свой велосипед) Спасибо за советы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:02:01 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Как ты бэкапить будешь свои файлики? Клади в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:02:22 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪКак ты бэкапить будешь свои файлики? Клади в базу. Так я 19 числа каталог 2013/3/18/ в архив и куда нить отправлю типа AWS S3 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:05:00 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪКак ты бэкапить будешь свои файлики? Клади в базу. клиент ещё не созрел)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:05:20 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123Йуный джавистЪКак ты бэкапить будешь свои файлики? Клади в базу. клиент ещё не созрел)) люди делятся на тех, кто не делает бэкап и тех, кто его уже делает) Чуть позже, чуть позже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:19:44 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Так я 19 числа каталог 2013/3/18/ в архив и куда нить отправлю типа AWS S3 ) Почитай например http://www.postgresql.org/docs/current/static/continuous-archiving.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:20:43 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪТак я 19 числа каталог 2013/3/18/ в архив и куда нить отправлю типа AWS S3 ) Почитай например http://www.postgresql.org/docs/current/static/continuous-archiving.html Я все пытаюсь найти обзор(компетентных людей) о плюсах и минусах сохранения файлов в БД или ФС, с красивыми графиками). Может быть у вас есть подобный материал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:40:27 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdm, просто поверь - вопрос не актуален. Устарел). Не парься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 18:59:16 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Petro123rdm, просто поверь - вопрос не актуален. Устарел). Не парься. Т.е. всё сохраняют в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 19:00:34 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Если ты не создаешь новый инстаграм то клади в базу - никакой дополнительной возни с бэкапом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 19:02:08 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЕсли ты не создаешь новый инстаграм то клади в базу - никакой дополнительной возни с бэкапом. Это понятно. Вопрос в том с какими проблема сталкивается сферический "инстаграм" (я не знаю как он там что хранит). В сетевые задержки? Т.е. в каких случаях хранить в базе однозначно плохо. От противного станет понятно в каких хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 19:07:03 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmПри использовании транзакции XADisk и декларативного подхода в Spring, нужно чтобы обе транзакции(БД и ФС) были в одном методе(ACID все дела). Таким образом транзакция в БД будет открытой долгое время при записи файлов на диск.Нифига подобного. XADisk-у скармливается группа операций и он делает или всё или ничего. Если ничего - запротоколировали ошибку, кинули исключение или что там положено по бизнес-логике. Если XADisk сделал всё - отражаем эту группу операций в базе. Если откат или исключение - протоколируем ошибку, кидаем исключение или что там положено по бизнес-логике, потом скармливаем XADisk-у (немного) другую группу операций и он "откатит" то, что "накатил". Если ошибка - протоколируем, кидем исключение или что там по бизнес-логике. Таким образом, транзакции файловой системы никак не связаны с транзакциями базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 20:01:38 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЕсли ты не создаешь новый инстаграм то клади в базу - никакой дополнительной возни с бэкапом.Это если разработчик озаботился вопросами экономии места. А то всяко, знаете ли, бывает, а бэкапить половинку терабайта не так вдохновительно, как вы думаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 20:05:36 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovrdmПри использовании транзакции XADisk и декларативного подхода в Spring, нужно чтобы обе транзакции(БД и ФС) были в одном методе(ACID все дела). Таким образом транзакция в БД будет открытой долгое время при записи файлов на диск.Нифига подобного. XADisk-у скармливается группа операций и он делает или всё или ничего. Если ничего - запротоколировали ошибку, кинули исключение или что там положено по бизнес-логике. Если XADisk сделал всё - отражаем эту группу операций в базе. Если откат или исключение - протоколируем ошибку, кидаем исключение или что там положено по бизнес-логике, потом скармливаем XADisk-у (немного) другую группу операций и он "откатит" то, что "накатил". Если ошибка - протоколируем, кидем исключение или что там по бизнес-логике. Таким образом, транзакции файловой системы никак не связаны с транзакциями базы данных. Между тем как XADisk сделал коммит, а потом ему придется откатывать(в случае исключения со стороны БД) кто-то или что-то может изменить файлы. Нет? Или я что-то не понимаю) Т.е. это перестанет быть единой транзакцией, так как происходить они будут отдельно. Опять же я дилетант и могу ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 20:52:32 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
rdmМежду тем как XADisk сделал коммит, а потом ему придется откатывать(в случае исключения со стороны БД) кто-то или что-то может изменить файлы.И что? В самом пиковом раскладе получите мусор в хранилище - файлы есть, но никем не используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 16:12:05 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovrdmМежду тем как XADisk сделал коммит, а потом ему придется откатывать(в случае исключения со стороны БД) кто-то или что-то может изменить файлы.И что? В самом пиковом раскладе получите мусор в хранилище - файлы есть, но никем не используются. мусор надо чистить, только наоборот, сначала добавлять в БД, затем сохранять на диск, ну и при доступе к записи, у которой нет файла, делать варнинг и временно блокировать запись до разрешения коллизии, можно через флаг типа disabled = 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 22:07:43 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Герой днямусор надо чистить, только наоборот, сначала добавлять в БД, затем сохранять на диск, ну и при доступе к записи, у которой нет файла, делать варнинг и временно блокировать запись до разрешения коллизии, можно через флаг типа disabled = 1Сразу вспоминается одна из "последних страниц" журнала "Техника - молодёжи" - "Зачем просто, когда можно сложно". До наиболее экстравагантных конструкций ещё не дотягиваете, но вы работайте, работайте ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 17:30:55 |
|
||
|
Алгоритм транзакции при записи на диск и в БД
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, А что такое "максимально быстро" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 12:59:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129702]: |
0ms |
get settings: |
11ms |
get forum list: |
24ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
105ms |
get tp. blocked users: |
3ms |
| others: | 331ms |
| total: | 550ms |

| 0 / 0 |
