Я работаю с базой данных IN-MEMORY.
Когда моя программа запускается, я загружаю данные из базы данных файловой системы в свою базу данных IN-MEMORY.
С этого момента и далее я работаю напрямую с IN-MEMORY db.
Это сделано для достижения высокой производительности.
Кроме того, у меня есть требование, что моя исходная файловая система db будет обновляться каждые несколько секунд.
Для этого я пытался использовать API резервного копирования SQLite .Идея заключалась в том, чтобы создать рабочий поток, который будет сохранять последние модификации каждые несколько секунд:
void WorkerThread()
{
// Initialize SQLite online-backup ONCE:
p = sqlite3_backup_init(...);
loop{
Sleep(few seconds);
// Save only intermediate changes (?)
sqlite3_backup_step(p, -1); // Backup all modifications from last time
} while( program is running);
// Program is exiting...
sqlite3_backup_finish(p);
}
Проблема, которую я обнаружил, заключалась в том, что этот API нельзя использовать последовательно :
первый вызов sqlite3_backup_step()
сохранит всю базу данных, но любые последующие вызовы после изменения некоторых данных ничего не сохранят (!).
Мой вопрос:
Существует ли эффективный и инкрементный способ для поддержания внешней базы данных файловой системы в актуальном состоянии с последним состоянием IN-MEMORY db?
Эффективный и инкрементальный в том смысле, что я могу вызывать его каждые ~ n секунд, и он будет сохранять только самые последние изменения , сделанные с момента его последнего сохранения.