Сообщение Re: Транзакция на несколько файлов от 11.09.2018 17:54
Изменено 11.09.2018 17:54 Shmj
Re: Транзакция на несколько файлов
Здравствуйте, #John, Вы писали:
J>надо добавить информацию сначала в один файл, потом во второй,
J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?
Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.
Но! В качестве альтернативы попробую предложить альтернативу.
Итак:
1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.
2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.
3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.
Пока не вижу подводных камней, но к критике готов.
J>надо добавить информацию сначала в один файл, потом во второй,
J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?
Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.
Но! В качестве альтернативы попробую предложить альтернативу.
Итак:
1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.
2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.
3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.
Пока не вижу подводных камней, но к критике готов.
Re: Транзакция на несколько файлов
Здравствуйте, #John, Вы писали:
J>надо добавить информацию сначала в один файл, потом во второй,
J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?
Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.
Но! В качестве разминки попробую предложить альтернативу. Итак:
1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.
2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.
3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.
Пока не вижу подводных камней, но к критике готов.
J>надо добавить информацию сначала в один файл, потом во второй,
J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?
Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.
Но! В качестве разминки попробую предложить альтернативу. Итак:
1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.
2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.
3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.
Пока не вижу подводных камней, но к критике готов.