5

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

Есть приложение, работающее с базой данный на sqlite.

Система сделана так, что коммит изменений происходит по кнопке или перед выходом из приложения.

Если сведения не были сохранены, пользователю будет задан вопрос - хотите вы сохранить все что тут наделали или откатиться. И, соответственно, есть вариант что в конце работы программы будет не коммит, а ролбэк.

Сейчас возникла задача прикрутить автосейф к бд, срабатывающий с какой то частотой.

И, соответсвенно, появилась проблема - пока транзакция не закоммичена, измененные данные в бэкап не попадают. А если сделать коммит - тогда будет нарушена логика работы программы, и будет невозможно откатится назад.

Подскажите пожалуйста: есть какое либо решение? Такой вариант где-нибудь описан? Может есть какой то вариант откатывать закоммиченное?

chubatiy
  • 3,274
  • Похожий вопрос на АнглоСО: https://stackoverflow.com/q/25675314/1892060. – Ainar-G Feb 14 '20 at 14:13
  • То есть вы хотите автосейв, но без сохранения данных в БД? Вариант вынести это на сторону пользователя(вкл/выкл автосейв каждые N секунд) и, соответсвенно, пускай сам управляет, надо оно ему или нет. Второй вариант - набивать изменения в кеш(в памяти поднять). И если он нажмет коммит - то изменения перенести из кеша в БД, отменит - почистить кеш – chubatiy Feb 14 '20 at 14:22
  • 1
    Набивать изменения в кеш - это развернуть еще бд in memory и работать с ней и потом скидывать или не скидывать в основную бд, или это как то по другому делается? – Надежда Feb 14 '20 at 14:28
  • Это при условии, что можно модифицировать приложение. Иначе да, снимать бекап после каждого автокоммита и потом таким образом делать откат(брать нужный бекап). Но если у вас многопользовательское прложение - то тут печальнее((( – chubatiy Feb 14 '20 at 14:28
  • Для пользователя так и должно остаться - если за весь сеанс он не нажал Сохранить, оно не сохраниться, а вот в автосейве - если какие-то изменения были на тот момент, они должны там быть. – Надежда Feb 14 '20 at 14:29
  • Набивать в кеш - в любое хранилище. Массив на уровне приложения, сторонняя БД и т.д. Что угодно) – chubatiy Feb 14 '20 at 14:30
  • Спасибо. Попробую наверно с бд in memory – Надежда Feb 14 '20 at 14:44

0 Answers0