MegaMufa
@MegaMufa

Есть какой-то механизм, подобный транзакциям бд, только для файловой системы?

Добрый дань.

На сайте у пользователя есть возможность создавать альбомы и загружать в них фотографии. Фотографии можно грузить пачками, после чего они yf cthdtht ресайзятся и сохраняются. Фотография сохраняется на жестком диске, плюс делается соответствующая запись в БД.

Работа с бд происходит при помощи ActiveRecords (Yii). В классе описано поведение: после сохранения записи в базу, сохраняются файлы. Я обратил внимание, что бывают случаи, когда файл не записывается на диск.

Мне необходимо в случае ошибки записи хотя бы одного файла откатывать все изменения. С базой понятно - транзакции в помощь. А как быть с файлами?

Единственное, что приходит в голову: в случае возникновения ошибки руками удалять все файлы, которые уже были сохранены. Но как то это неправильно.

Подскажите, может есть какой то механизм подобный транзакциям бд, только для файловой системы? Сейчас используется ext4, но возможно поменять на что то более подходящее.
  • Вопрос задан
  • 3107 просмотров
Решения вопроса 1
@Masterme
всё делается через базу. заводите отдельную таблицу заданий, например, заданий удаления файлов с диска. и делаете так

1. вам нужно сохранить файл blabla.jpg
1a. заносите в таблицу заданий "удалить blabla.jpg с таймаутом например 1 час"
1b. создаёте файл blabla.jpg
2. открываете транзацкию
3. делаете запись в основную таблицу, где в одном из полей сохраняете ассоциированный файл blabla.jpg (не сам файл, конечно, а его название)
4. удаляете запись сделанную п. 1а
5а. если нет ошибок - закрываете транзакцию
5б. если есть ошибки - откатываете транзакцию

вторая часть схемы - скрипт, обходящий таблицу заданий и выполняющий задания из неё.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Masterme
В MSSQL есть встроенная возможность Remote BLOB Storage (RBS)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы